PageSourceSearch

https://www.coderli.com/topics/java/

html coderli.com collected 2026-10-03 21:18:31 UTC 730,718 bytes, 2 lines download raw bytes

1<!DOCTYPE html><html lang="zh-CN" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/images/onecoder/avatar.png"/><link rel="stylesheet" href="/_next/static/css/87dfc6598b12eeb9.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/8be92eda0d914e56.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-c13df28283053ad7.js"/>
1<script src="/_next/static/chunks/7e4aa0f9-4ab89d5132fd213e.js" async=""></script>
1<script src="/_next/static/chunks/342-87200865fbc92b30.js" async=""></script>
1<script src="/_next/static/chunks/main-app-6d2a175ef94505b1.js" async=""></script>
1<script src="/_next/static/chunks/cdfede43-0eb4616c36bac96e.js" async=""></script>
1<script src="/_next/static/chunks/699-51981c2e37ffc06e.js" async=""></script>
1<script src="/_next/static/chunks/app/topics/%5Btopic%5D/page-1b532aedb5b949e3.js" async=""></script>
1<script src="/_next/static/chunks/181-7005c4c81a18e79a.js" async=""></script>
1<script src="/_next/static/chunks/app/layout-0bd8d7dd89e7861b.js" async=""></script>
1<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7615326632728696" crossorigin="anonymous"></script>
1<link rel="preload" href="https://www.googletagmanager.com/gtag/js?id=G-5L9P03RR0R" as="script"/><meta name="google-site-verification" content="EQxpnRQ0t7ULCtknIN_oBRlo8FXtZsL-OaiUcI50_wU"/><title>Java 架构演进与实战 · OneCoder</title><meta name="description" content="系统梳理 Java 基础、Log 日志门面演进、Spring 核心、Netty 高性能网络通信与 JVM 字节码研究。"/><link rel="author" href="https://www.coderli.com"/><meta name="author" content="OneCoder"/><meta name="keywords" content="C++,GESP,NOI,Java,Python,算法,架构,Spring,Netty,PostgreSQL"/><link rel="shortcut icon" href="/favicon.svg"/><link rel="icon" href="/favicon.svg" type="image/svg+xml"/><link rel="icon" href="/icon.svg" type="image/svg+xml"/><link rel="apple-touch-icon" href="/icon.svg"/>
1<script>(function(){try{if(localStorage.getItem('theme')==='dark'){document.documentElement.classList.add('dark');}}catch(e){}})();</script>
1<script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script>
1</head><body class="min-h-screen flex flex-col font-sans selection:bg-teal-500 selection:text-white"><header class="sticky top-0 z-40 backdrop-blur-md bg-white/95 dark:bg-slate-950/95 border-b border-slate-200 dark:border-slate-800 transition-colors shadow-sm"><div class="max-w-[var(--container-max-width)] mx-auto px-4 md:px-8 py-3 flex items-center justify-between"><a class="flex items-center gap-3 group" title="点击返回首页或回到顶部" href="/"><img src="/images/onecoder/avatar.png" alt="OneCoder Avatar" class="w-10 h-10 rounded-xl object-cover border-2 border-teal-500 shadow-sm group-hover:scale-105 transition"/><div class="flex flex-col"><span class="font-extrabold text-xl tracking-tight text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-tight">OneCoder</span><span class="text-[11px] font-mono text-slate-500 dark:text-slate-400 leading-tight">coderli.com<!-- --> · 972 篇博文</span></div></a><nav class="hidden lg:flex items-center gap-2"><a class="px-3.5 py-1.5 rounded-lg text-sm font-medium transition text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-slate-200 hover:bg-slate-100 dark:hover:bg-slate-800/60" href="/">首页</a><a class="px-3.5 py-1.5 rounded-lg text-sm font-medium transition text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-slate-200 hover:bg-slate-100 dark:hover:bg-slate-800/60" href="/topics/gesp/">🏆 GESP 考级</a><a class="px-3.5 py-1.5 rounded-lg text-sm font-medium transition text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 font-semibold" href="/topics/java/">☕ Java 架构</a><a class="px-3.5 py-1.5 rounded-lg text-sm font-medium transition text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-slate-200 hover:bg-slate-100 dark:hover:bg-slate-800/60" href="/topics/csp/">⌘ CSP / NOIP</a><a class="px-3.5 py-1.5 rounded-lg text-sm font-medium transition text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-slate-200 hover:bg-slate-100 dark:hover:bg-slate-800/60" href="/topics/algo/">🧮 算法专题</a></nav><div class="flex items-center gap-2 md:gap-2.5"><button type="button" class="flex items-center gap-2 px-3 py-1.5 rounded-lg border border-slate-200 dark:border-slate-800 bg-slate-100/70 dark:bg-slate-900/70 text-xs text-slate-600 dark:text-slate-400 hover:border-teal-500 transition cursor-pointer" title="快捷搜索 (按 / 或 Ctrl+K)"><span>🔍 搜索博文...</span><kbd class="hidden sm:inline-block px-1.5 py-0.5 rounded bg-white dark:bg-slate-800 border border-slate-300 dark:border-slate-700 text-[10px] font-mono">/</kbd></button><button type="button" class="p-2 rounded-lg border border-slate-200 dark:border-slate-800 bg-slate-100/70 dark:bg-slate-900/70 text-slate-600 dark:text-slate-300 hover:border-teal-500 transition text-sm flex items-center gap-1 cursor-pointer" title="切换超宽屏 / 标准宽度"><span>⤢</span><span class="text-xs hidden md:inline">超宽屏</span></button><button type="button" class="p-2 rounded-lg border border-slate-200 dark:border-slate-800 bg-slate-100/70 dark:bg-slate-900/70 text-slate-600 dark:text-slate-300 hover:border-teal-500 transition text-sm cursor-pointer" title="切换浅色 / 深色模式">☀️</button><button type="button" class="lg:hidden p-2 rounded-lg border border-slate-200 dark:border-slate-800 bg-slate-100/70 dark:bg-slate-900/70 text-slate-700 dark:text-slate-200 hover:text-teal-600 text-base flex items-center justify-center cursor-pointer" aria-label="打开网站导航菜单">☰</button></div></div></header><main class="flex-1"><div class="max-w-[var(--container-max-width)] mx-auto px-4 md:px-8 py-8"><nav class="flex items-center gap-2 text-xs text-slate-400 mb-6"><a class="hover:text-teal-500" href="/">首页</a><span>/</span><span>专题专栏</span><span>/</span><span class="text-slate-600 dark:text-slate-300 font-medium">Java 架构演进与实战</span></nav><div class="bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800 rounded-2xl p-8 mb-8 shadow-sm"><div class="flex items-center gap-3 text-2xl md:text-3xl font-extrabold text-slate-900 dark:text-slate-100 mb-2"><span>☕</span><h1>Java 架构演进与实战</h1><span class="text-xs font-mono font-bold bg-teal-50 dark:bg-teal-950 text-teal-600 dar
1k:text-teal-400 px-2.5 py-1 rounded-full border border-teal-500/20">187<!-- --> 篇</span></div><p class="text-sm text-slate-600 dark:text-slate-400 max-w-3xl leading-relaxed">系统梳理 Java 基础、Log 日志门面演进、Spring 核心、Netty 高性能网络通信与 JVM 字节码研究。</p></div><div class="grid grid-cols-1 lg:grid-cols-[minmax(0,1fr)_320px] gap-8 items-start"><div><div class="space-y-6"><div class="bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800 rounded-2xl p-5 shadow-sm space-y-4"><div class="flex flex-col sm:flex-row sm:items-center justify-between gap-3"><div class="flex items-center gap-2"><span class="text-sm font-bold text-slate-900 dark:text-slate-100 flex items-center gap-1.5"><span>🎯</span><span>分类筛选</span></span><span class="text-xs text-slate-400">(显示 <!-- -->187<!-- --> / 共 <!-- -->187<!-- --> 篇)</span></div><div class="relative"><input type="text" placeholder="在此专栏中快速过滤..." class="w-full sm:w-56 text-xs px-3 py-1.5 rounded-lg border border-slate-200 dark:border-slate-700 bg-slate-50 dark:bg-slate-800 text-slate-900 dark:text-slate-100 placeholder-slate-400 focus:outline-none focus:ring-1 focus:ring-teal-500" value=""/></div></div><div class="flex items-center gap-2 flex-wrap text-xs pt-1 border-t border-slate-100 dark:border-slate-800/80"><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-teal-600 text-white shadow-sm font-semibold"><span>全部</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-teal-700 text-white">187</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>(3)JDK篇</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">2</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>(5)配置篇</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">2</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>(4)测试篇</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">4</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>(2)引入日志篇</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">6</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>(1)起步搭建篇</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">8</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>JDK</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">15</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dar
1k:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>架构实践</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">90</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>日志篇</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">2</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>Log</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">4</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>JPPF</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">3</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>Spring</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">10</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>Gradle</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">1</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>Eclipse</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">4</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>Maven</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">6</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>Netty</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">19</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>Restlet</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">1</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>知识扩展</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">1</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dar
1k:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>随笔</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">1</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>JVM</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">2</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>Libvirt</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">3</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>Jar</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">1</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>JUnit</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">1</span></button><button type="button" class="px-3 py-1.5 rounded-lg font-medium transition cursor-pointer flex items-center gap-1.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"><span>Hibernate</span><span class="text-[10px] px-1.5 py-0.5 rounded-full bg-slate-200 dark:bg-slate-700 text-slate-500 dark:text-slate-400">1</span></button></div></div><div class="space-y-4"><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->(3)JDK篇</span><span>·</span><time dateTime="2024-12-22">2024-12-22</time><span>·</span><span>17 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-go-22-jdk-string-utf16/"><span class="">一起学Java(22)-[JDK篇]学习Java中String的字符编码和代理对机制</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">上文《一起学Java(21)-[配置篇]Gradle控制台乱码问题配置和解决》中,我们解决了Gradle控制台字符乱码问题,这个问题实际是在研究Java String的字符编码机制时产生的。本文回归正题,研究下Java中String的字符编码和代理对机制。</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a>
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#JDK」筛选博文" href="/tags/JDK/">#<!-- -->JDK</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#一起学Java」筛选博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/">#<!-- -->一起学Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->(5)配置篇</span><span>·</span><time dateTime="2024-12-17">2024-12-17</time><span>·</span><span>9 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-go-21-gradle-idea-console-garbled/"><span class="">一起学Java(21)-[配置篇]Gradle控制台乱码问题配置和解决</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">在《一起学Java(18)-[配置篇]一个诡异(有趣)的Gradle Wrapper问题》中,我们解决了一个有趣的Gradle Wrapper使用问题,这次我们在研究Java String编码的时候,又遇到了Gradle使用中的控制台乱码问题,遂记录并分享问题的现象和解决的过程。</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Gradle」筛选博文" href="/tags/Gradle/">#<!-- -->Gradle</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#一起学Java」筛选博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/">#<!-- -->一起学Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/java-go-21/java-build-and-run.png" alt="一起学Java(21)-[配置篇]Gradle控制台乱码问题配置和解决" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->(4)测试篇</span><span>·</span><time dateTime="2024-12-02">2024-12-02</time><span>·</span><span>10 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-go-20-test-jacoco-config/"><span class="">一起学Java(20)-[测试篇]教你通过Gradle配置和使用JaCoCo单元测试覆盖率检查工具</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">在《一起学Java(19)-[测试篇]教你通过Gradle配置和使用JUnit5》中,我们引入了JUnit5单元测试框架。在进行单元测试时,我们不仅要关注测试的正确性和完整性,还要关注测试的覆盖率。覆盖率反映了测试用例对代码的覆盖程度,能够帮助我们发现潜在的测试盲区,确保代码的每个部分都得到了适当的验证。 为了更好地分...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#单元测试」筛选博文" href="/tags/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/">#<!-- -->单元测试</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Gradle」筛选博文" href="/tags/Gradle/">#<!-- -->Gradle</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#JaCoCo」筛选博文" href="/tags/JaCoCo/">#<!-- -->JaCoCo</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#一起学Java」筛选博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/">#<!-- -->一起学Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/java-go-20/jacoco-report.png" alt="一起学Java(20)-[测试篇]教你通过Gradle配置和使用JaCoCo单元测试覆盖率检查工具" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->(4)测试篇</span><span>·</span><time dateTime="2024-11-26">2024-11-26</time><span>·</span><span>14 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-go-19-test-junit5-config/"><span class="">一起学Java(19)-[测试篇]教你通过Gradle配置和使用JUnit5</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">前文已详细介绍了JUnit框架的特点以及JUnit5和JUnit4版本的核心差异(《一起学Java(17)-[测试篇]教你认识Java单元测试框架JUnit,JUnit5和JUnit4区别详解》)。本文将进入应用实战,详细介绍如何在Gradle项目中引入、配置和使用JUnit5测试框架。</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#单元测试」筛选博文" href="/tags/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/">#<!-- -->单元测试</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Gradle」筛选博文" href="/tags/Gradle/">#<!-- -->Gradle</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#JUni5」筛选博文" href="/tags/JUni5/">#<!-- -->JUni5</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#一起学Java」筛选博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/">#<!-- -->一起学Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/java-go-19/junit5-report.png" alt="一起学Java(19)-[测试篇]教你通过Gradle配置和使用JUnit5" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->(5)配置篇</span><span>·</span><time dateTime="2024-11-04">2024-11-04</time><span>·</span><span>14 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dar
1k:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-go-18-gradle-wrapper-problem/"><span class="">一起学Java(18)-[配置篇]一个诡异(有趣)的Gradle Wrapper问题</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">在研究JUnit使用的时候,遇到了一个有趣的Gradle Wrapper使用问题,经过若干天的研究,终于找到并解决了问题,记录分享如下,这也是我们一起学Java过程中遇到的问题。</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Gradle」筛选博文" href="/tags/Gradle/">#<!-- -->Gradle</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#一起学Java」筛选博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/">#<!-- -->一起学Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><div class="my-6 text-center overflow-hidden transition-colors  " style="min-height:90px"><ins class="adsbygoogle block" data-ad-client="ca-pub-7615326632728696" data-ad-slot="9656071817" data-ad-format="fluid" data-full-width-responsive="true"></ins></div><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->(4)测试篇</span><span>·</span><time dateTime="2024-10-28">2024-10-28</time><span>·</span><span>13 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-go-17-test-junit-intro/"><span class="">一起学Java(17)-[测试篇]教你认识Java单元测试框架JUnit,JUnit5和JUnit4区别详解</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">在上一篇文章中(《一起学Java(16)-[测试篇]教你知道什么是单元测试,单元测试的特点以及Java主要的单元测试框架》),我们介绍了什么是单元测试,单元测试的特点以及Java主要的单元测试框架。其中提到,JUnit是Java世界中最广泛使用且最具影响力的单元测试框架。本文将重点介绍JUnit框架,特别是其最新版本J...</span></p><div class="flex flex-wrap items-center gap-2 text-xs">
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#单元测试」筛选博文" href="/tags/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/">#<!-- -->单元测试</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#一起学Java」筛选博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/">#<!-- -->一起学Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->(4)测试篇</span><span>·</span><time dateTime="2024-10-27">2024-10-27</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-go-16-test-unittest-intro/"><span class="">一起学Java(16)-[测试篇]教你知道什么是单元测试,单元测试的特点以及Java主要的单元测试框架</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">看起来好像学习的主题有些跳跃,因为正在研究Java单元测试覆盖率统计相关问题,所以跳到单测这个领域。为了更好理解这个问题,我从什么是单元测试学起,逐步深入到如何做单元测试、单元测试效果如何检查,最后落到Jacoco单元测试覆盖率工具介绍和使用这个主题。个人感觉这个路径还是比较便于理解的。 本文主要聚焦什么是单元测试,单...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#单元测试」筛选博文" href="/tags/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/">#<!-- -->单元测试</a>
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#一起学Java」筛选博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/">#<!-- -->一起学Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->(3)JDK篇</span><span>·</span><time dateTime="2024-10-23">2024-10-23</time><span>·</span><span>10 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-go-15-jdk-8-lambda/"><span class="">一起学Java(15)-[JDK篇]教你了解Java8特性,学习Lambda表达式</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">在文章《2024年主流使用的JDK版本及其核心特性介绍》中,我们详细介绍了Java8、Java11、Java17等主流Java版本主要新增特性。针对其中的一些核心特性,展开研究一二。</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#JDK」筛选博文" href="/tags/JDK/">#<!-- -->JDK</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#一起学Java」筛选博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/">#<!-- -->一起学Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->(2)引入日志篇</span><span>·</span><time dateTime="2024-09-28">2024-09-28</time><span>·</span><span>21 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-go-14-log-six-log4j2-config/"><span class="">一起学Java(14)-[日志篇]教你用透Log4j2,掌握Log4j2配置原理和实际应用</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">研究完Log4j2与SLF4J集成的原理(一起学Java(13)-[日志篇]教你分析SLF4J和Log4j2源码,掌握SLF4J与Log4j2桥接集成原理),学习如何真正应用Log4j2。</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Log」筛选博文" href="/tags/Log/">#<!-- -->Log</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#一起学Java」筛选博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/">#<!-- -->一起学Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/java-go/log4j2-config.png" alt="一起学Java(14)-[日志篇]教你用透Log4j2,掌握Log4j2配置原理和实际应用" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->(2)引入日志篇</span><span>·</span><time dateTime="2024-09-14">2024-09-14</time><span>·</span><span>15 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-go-13-import-log-five-log4j2-slf4j2/"><span class="">一起学Java(13)-[日志篇]教你分析SLF4J和Log4j2源码,掌握SLF4J与Log4j2桥接集成原理</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">研究完SLF4J和Logback这种无缝集成的方式(一起学Java(12)-[日志篇]教你分析SLF4J源码,掌握SLF4J如何与Logback无缝集成的原理),继续研究Log4j2和SLF4J这种需要桥接集成的方式。</span></p><div class="flex flex-wrap items-center gap-2 text-xs">
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Log」筛选博文" href="/tags/Log/">#<!-- -->Log</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#SLF4J」筛选博文" href="/tags/SLF4J/">#<!-- -->SLF4J</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#一起学Java」筛选博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/">#<!-- -->一起学Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/java-go-13/log4j2-slf4j2-provider-relation.svg" alt="一起学Java(13)-[日志篇]教你分析SLF4J和Log4j2源码,掌握SLF4J与Log4j2桥接集成原理" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->(2)引入日志篇</span><span>·</span><time dateTime="2024-09-02">2024-09-02</time><span>·</span><span>9 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-go-12-import-log-four-logback/"><span class="">一起学Java(12)-[日志篇]教你分析SLF4J源码,掌握SLF4J如何与Logback无缝集成的原理</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">继续完成上篇(一起学Java(11)-[日志篇]教你分析SLF4J源码,掌握Logger接口实现类加载原理)留给自己的任务,研究Logback是如何和SLF4J无缝集成的。</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Log」筛选博文" href="/tags/Log/">#<!-- -->Log</a>
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#SLF4J」筛选博文" href="/tags/SLF4J/">#<!-- -->SLF4J</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Logback」筛选博文" href="/tags/Logback/">#<!-- -->Logback</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#一起学Java」筛选博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/">#<!-- -->一起学Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/java-go-12/logback-provider.png" alt="一起学Java(12)-[日志篇]教你分析SLF4J源码,掌握SLF4J如何与Logback无缝集成的原理" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->(2)引入日志篇</span><span>·</span><time dateTime="2024-08-21">2024-08-21</time><span>·</span><span>22 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-go-11-import-log-three/"><span class="">一起学Java(11)-[日志篇]教你分析SLF4J源码,掌握Logger接口实现类加载原理</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">最近各种事情很忙,今天继续。在第十篇(一起学Java(10)-为项目引入Log框架(Log篇二-引入SLF4J接口层框架))中,我们为项目(https://github.com/lihongzheshuai/java-all-in-one)引入了SLF4J和Logback框架,按计划通过阅读源码研究下SLF4J的实现原...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Log」筛选博文" href="/tags/Log/">#<!-- -->Log</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#SLF4J」筛选博文" href="/tags/SLF4J/">#<!-- -->SLF4J</a>
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#一起学Java」筛选博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/">#<!-- -->一起学Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/previews/concrete-bindings.png" alt="一起学Java(11)-[日志篇]教你分析SLF4J源码,掌握Logger接口实现类加载原理" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->(2)引入日志篇</span><span>·</span><time dateTime="2024-08-10">2024-08-10</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-go-10-import-log-two/"><span class="">一起学Java(10)-[日志篇]教你为本项目引入SLF4J接口层框架</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">在上一节一起学Java(9)-为项目引入Log框架(Log篇一-框架演进和设计逻辑中,我们已经理清了Java日志框架的演进过程、设计思想和核心框架。从这节开始,进入实战研究环节。</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Log」筛选博文" href="/tags/Log/">#<!-- -->Log</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#SLF4J」筛选博文" href="/tags/SLF4J/">#<!-- -->SLF4J</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#一起学Java」筛选博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/">#<!-- -->一起学Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/java-go-9/java-log-bridge.svg" alt="一起学Java(10)-[日志篇]教你为本项目引入SLF4J接口层框架" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->(2)引入日志篇</span><span>·</span><time dateTime="2024-08-05">2024-08-05</time><span>·</span><span>7 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-go-9-import-log-one/"><span class="">一起学Java(9)-[日志篇]教你掌握Java日志框架的演进和设计逻辑</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">在项目开发中,日志记录(Logging)扮演着至关重要的角色。日志是开发人员调试代码和诊断问题的重要工具。例如:在生产环境中,开发人员通常无法直接调试代码,日志提供了一个详细的执行轨迹,帮助开发人员重现问题。因此,在进入其他框架和代码研究前,我首先想到的就是先完成项目日志框架的引入,进一步夯实基础工作。 要完成Log框...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Log」筛选博文" href="/tags/Log/">#<!-- -->Log</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#一起学Java」筛选博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/">#<!-- -->一起学Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/previews/concrete-bindings.png" alt="一起学Java(9)-[日志篇]教你掌握Java日志框架的演进和设计逻辑" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->(1)起步搭建篇</span><span>·</span><time dateTime="2024-08-04">2024-08-04</time><span>·</span><span>4 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-go-8-first-pr-and-remove-all-ide-files/"><span class="">一起学Java(8)-[起步篇]教你如何进行本项目的PR和将IDE相关文件移除版本控制</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">我们的java-all-in-one项目的第一个PR比我预想的来的早了很多。感谢来自我的QQ群友(插播广告,欢迎大家加入Java技术交流群982860385)的PR。今天就介绍一下这次PR和项目调整的主要内容。</span></p><div class="flex flex-wrap items-center gap-2 text-xs">
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Git」筛选博文" href="/tags/Git/">#<!-- -->Git</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#一起学Java」筛选博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/">#<!-- -->一起学Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/java-go-8/firstpr_2024-08-04_14-48-41.png" alt="一起学Java(8)-[起步篇]教你如何进行本项目的PR和将IDE相关文件移除版本控制" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->(1)起步搭建篇</span><span>·</span><time dateTime="2024-08-01">2024-08-01</time><span>·</span><span>5 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-go-7-write-readme-for-the-project/"><span class="">一起学Java(7)-[起步篇]教你为本开源项目编写README文件</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">在现代软件开发中,README文件是任何项目中不可或缺的一部分。它不仅为用户提供了项目的基本信息,还指导开发者如何使用、安装和贡献代码。其实,早在2014年的文章《为项目编写Readme.MD文件》中,我就提到过关于README的事情。今天为了我们的项目,旧事重提也为让大家再get一个知识点,我们再来说说这个READM...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Git」筛选博文" href="/tags/Git/">#<!-- -->Git</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dar
1k:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#一起学Java」筛选博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/">#<!-- -->一起学Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/java-go-7/readme-preview_2024-08-01_21-15-25.png" alt="一起学Java(7)-[起步篇]教你为本开源项目编写README文件" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->(1)起步搭建篇</span><span>·</span><time dateTime="2024-07-31">2024-07-31</time><span>·</span><span>18 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-go-6-project-config-files-intro-git-idea/"><span class="">一起学Java(6)-[起步篇]教你掌握本协作项目中Git和IDEA相关配置文件</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">前两篇文章(《一起学Java(4)-java-all-in-one协作项目相关文件研究(Gradle篇-上)》和《一起学Java(5)-java-all-in-one协作项目相关文件研究(Gradle篇-下))》)我们已经完成了对项目中Gradle相关文件的研究,按照计划我们继续研究项目的其他配置文件,主要是Git和I...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Gradle」筛选博文" href="/tags/Gradle/">#<!-- -->Gradle</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Git」筛选博文" href="/tags/Git/">#<!-- -->Git</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#一起学Java」筛选博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/">#<!-- -->一起学Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/java-go-6-idea-files/idea-files.png" alt="一起学Java(6)-[起步篇]教你掌握本协作项目中Git和IDEA相关配置文件" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->(1)起步搭建篇</span><span>·</span><time dateTime="2024-07-30">2024-07-30</time><span>·</span><span>10 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-go-5-project-config-files-intro-gradle-two/"><span class="">一起学Java(5)-[起步篇]教你掌握本协作项目中的Gralde相关配置文件(下)</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">接上篇《一起学Java(4)-java-all-in-one协作项目相关文件研究(Gradle篇-上)》,本文继续研究项目中Gradle相关文件。</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Gradle」筛选博文" href="/tags/Gradle/">#<!-- -->Gradle</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#一起学Java」筛选博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/">#<!-- -->一起学Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->(1)起步搭建篇</span><span>·</span><time dateTime="2024-07-29">2024-07-29</time><span>·</span><span>16 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-go-4-project-config-files-intro-gradle-one/"><span class="">一起学Java(4)-[起步篇]教你掌握本协作项目中的Gralde相关配置文件(上)</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">将思绪拉回java-all-in-one项目,如果你fork并下载了代码,你会看到在项目中除了HelloWorldMain代码外,还存在很多文件。如果你并不了解他们的作用并有足够的好奇心,那你应该想要知道他们的作用。带着好奇,今天我也来研究一下,先从Gradle相关的开始。</span></p><div class="flex flex-wrap items-center gap-2 text-xs">
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Gradle」筛选博文" href="/tags/Gradle/">#<!-- -->Gradle</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#一起学Java」筛选博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/">#<!-- -->一起学Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->(1)起步搭建篇</span><span>·</span><time dateTime="2024-07-23">2024-07-23</time><span>·</span><span>9 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-go-3-gradle-vs-maven/"><span class="">一起学Java(3)-[起步篇]教你详细掌握Java构建工具Gradle和Maven定位和优缺点对比</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">在第一步创建的项目(java-all-in-one)项目里,我们提到了使用Gradle作为项目构建工具。看到这里,不知道你是否有疑惑,什么是项目构建工具。Java项目常用构建工具有哪些?都有什么特点? 带着疑惑,本文对Java的构建工具进行一些梳理,以同步理解。从而使大家对我们项目中使用到的技术栈和技术工具都有个基本的...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Gradle」筛选博文" href="/tags/Gradle/">#<!-- -->Gradle</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dar
1k:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Maven」筛选博文" href="/tags/Maven/">#<!-- -->Maven</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#一起学Java」筛选博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/">#<!-- -->一起学Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><div class="my-6 text-center overflow-hidden transition-colors  " style="min-height:90px"><ins class="adsbygoogle block" data-ad-client="ca-pub-7615326632728696" data-ad-slot="9656071817" data-ad-format="fluid" data-full-width-responsive="true"></ins></div><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->(1)起步搭建篇</span><span>·</span><time dateTime="2024-07-22">2024-07-22</time><span>·</span><span>5 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-go-2-how-to-work-on-github/"><span class="">一起学Java(2)-[起步篇]教你如何利用Github fork一起进行开源项目协作</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">在第一步中(一起学Java(1)-新建一个Gradle管理的Java项目)我们已经完成了项目的创建并托管到了Github上。现在自然要首先解决同学们如何下载代码和进行代码同步更新和联系的问题。这就涉及到Git的fork理念和协作模式的问题。具体介绍如下。</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Git」筛选博文" href="/tags/Git/">#<!-- -->Git</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#一起学Java」筛选博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/">#<!-- -->一起学Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dar
1k:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/java-go-2-work-on-github/fork.png" alt="一起学Java(2)-[起步篇]教你如何利用Github fork一起进行开源项目协作" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->(1)起步搭建篇</span><span>·</span><time dateTime="2024-07-21">2024-07-21</time><span>·</span><span>14 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-go-1-new-gradle-project/"><span class="">一起学Java(1)-[起步篇]教你如何创建一个Gradle管理的Java开源项目(java-all-in-one)</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">一时兴起,也为了便于跟大家同步学习进展和分享样例代码,遂决定创建一个全新的Java项目,并通过Github与大家分享。本文就是记录该项目的创建过程以及其中的一些知识要点(如Gradle等)。为了紧跟技术潮流和提高操作效率,本项目通过IDEA直接创建,用Gradle进行配置管理和用Git进行版本管理,并托管到Github...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Gradle」筛选博文" href="/tags/Gradle/">#<!-- -->Gradle</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#一起学Java」筛选博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/">#<!-- -->一起学Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/java-go-1-new-gradle-project/new_gradle-proj_2024-07-21_15-15-50.png" alt="一起学Java(1)-[起步篇]教你如何创建一个Gradle管理的Java开源项目(java-all-in-one)" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->JDK</span><span>·</span><time dateTime="2024-07-20">2024-07-20</time><span>·</span><span>27 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/string-compare-equals/"><span class="">字节码分析-Java中String用==判断值相等一定是错的么</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">经常听到有同学讨论,在Java中String判断值相等应该用equals()而不能用==,并且分析的信誓旦旦。那么真相真的是这样么?==就完全不能用么?Java内部的原理究竟是如何呢?这需要理解它们背后的原理。下面是详细的原理分析:</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#String」筛选博文" href="/tags/String/">#<!-- -->String</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2024-07-12">2024-07-12</time><span>·</span><span>8 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/configuration-of-java-env-variables/"><span class="">给Java初学者-Java环境变量的本质和配置方法(Windows、Linux)</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">经常遇到初学者问到关于Java环境变量配置的问题,基本围绕在集中情况:(1)环境变量要配哪些;(2)2024年了还需不需要配;(3)为啥我这个没配、那个没配也好用。会不会有什么影响。今天我就展开讲讲关于Java环境变量的定位和本质。 在配置 Java 环境变量时,主要涉及两个重要的变量:JAVAHOME 、 PATH和...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dar
1k:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Windows」筛选博文" href="/tags/Windows/">#<!-- -->Windows</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Linux」筛选博文" href="/tags/Linux/">#<!-- -->Linux</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Mac」筛选博文" href="/tags/Mac/">#<!-- -->Mac</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2024-07-07">2024-07-07</time><span>·</span><span>24 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/feature-of-popular-jdk-version/"><span class="">2024年主流使用的JDK版本及其核心特性介绍</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">在群里交流的时候,经常遇到不同同学使用的JDK版本五花八门,并且很多不知道其使用版本的特点。作为Java开发者,理解不同JDK版本的核心特性和优势不仅能提高我们的开发效率,还能帮助我们更好地选择适合自己项目的版本。</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#JDK」筛选博文" href="/tags/JDK/">#<!-- -->JDK</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dar
1k:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2024-07-06">2024-07-06</time><span>·</span><span>17 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/suggestions-for-new-java-beginners/"><span class="">给Java初学者-Java程序员必备知识体系和成长路径建议</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">经常遇到各种新人在学习Java过程中遇到迷茫、学习路线不清、发展路径不明的情况,最长听到的一个问题就是,我学完了基础语法我该学什么呢?下面我就结合我的一些粗浅经验给新手一些基本的建议。 新手开始学习Java,建议的学习路线应包括以下几个阶段,每个阶段都有相应的学习目标和推荐资源(尽量中文)。这种循序渐进的路径可以帮助你...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2024-07-03">2024-07-03</time><span>·</span><span>3 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/jdk-installer-exe-msi/"><span class="">JDK安装包.exe和.msi差异</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">在Oracle官网下载Java Development Kit (JDK)安装包时,针对 Windows 操作系统,除zip压缩包外,安装包通常有两种格式:.exe 和 .msi。 这两种安装包在使用体验和功能上有一些区别。下面详细解释它们的区别:</span></p><div class="flex flex-wrap items-center gap-2 text-xs">
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#JDK」筛选博文" href="/tags/JDK/">#<!-- -->JDK</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/jdk-installer/jdk-installer.png" alt="JDK安装包.exe和.msi差异" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2018-08-13">2018-08-13</time><span>·</span><span>14 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty4-3-netty-server-client-demo/"><span class="">Netty4自学笔记 (3) - Netty NIO Server和Client 样例说明</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">更新节奏缓慢,因为每晚学习注意力不够集中,学习进展缓慢。本还给自己找了一大堆其他理由,但摸着良心问自己,似乎只有这个理由说的通。 想搞懂的太多,却始终没搞明白。先看一个用Netty编写的NIO Server的样例。 &lt;!--break-- ServerHanler代码 上述代码改自Netty官方手册。NettyNioS...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2018-07-24">2018-07-24</time><span>·</span><span>12 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dar
1k:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty4-java-nio/"><span class="">Netty4自学笔记 (2) - Java NIO</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">距离上一篇博文已经过去了半个多月。这期间有一周多的时间用在了准备单位举办的英语竞赛上。余下的时间沉迷于陪孩子玩耍和睡觉,日复一日。 当然,我也抽空学习了Java NIO(None-Blocking / New IO) 一些知识,现总结如下。 Java的非阻塞IO的原理是采用了操作系统的多路复用器机制,即在一个通道(ch...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2018-07-06">2018-07-06</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty4-java-bio/"><span class="">Netty4自学笔记 (1) - Java BIO</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">2012年,由于项目的需要我第一次接触到了Netty,当时Netty还处于3.x版本。我用十几篇博文记录了自己自学Netty的过程,虽然内容浅薄,但没想到被各处转载,我想主要是因为当时Netty的资料确实较少的缘故。 五六年过去了,Netty早已发展到了4.x系列,好奇也好,求知也罢,我打算重学Netty,虽然严格来说...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-11-23">2017-11-23</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-convert-sorted-array-to-binary-search-tree/"><span class="">LeetCode Convert Sorted Array to Binary Search Tree</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Given an array where elements are sorted in ascending order, convert it to a height balanced BST. &lt;!--break-- Java 实现 分析 二叉树的处理,首先想到递归。剩下就好处理了。</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-11-23">2017-11-23</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-balanced-binary-tree/"><span class="">LeetCode  Balanced Binary Tree</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary tree is defined as a binary tree in which the depth...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dar
1k:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-11-16">2017-11-16</time><span>·</span><span>10 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-binary-tree-level-order-traversal-ii/"><span class="">LeetCode Binary Tree Level Order Traversal II</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Given a binary tree, return the bottom-up level order traversal of its nodes&#x27; values. (ie, from left to right, level by level from leaf to root). For ex...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-11-15">2017-11-15</time><span>·</span><span>5 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-maximum-depth-of-binary-tree/"><span class="">LeetCode  Maximum Depth of Binary Tree</span></a></h3>
1<p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the longest path from the root node down to the farthest lea...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-11-14">2017-11-14</time><span>·</span><span>9 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-symmetric-tree/"><span class="">LeetCode Symmetric Tree</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For example, this binary tree [1,2,2,3,4,4,3] is symmetri...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><div class="my-6 text-center overflow-hidden transition-colors  " style="min-height:90px">
1<ins class="adsbygoogle block" data-ad-client="ca-pub-7615326632728696" data-ad-slot="9656071817" data-ad-format="fluid" data-full-width-responsive="true"></ins></div><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-11-11">2017-11-11</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-same-tree/"><span class="">LeetCode  Same Tree</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Given two binary trees, write a function to check if they are the same or not. Two binary trees are considered the same if they are structurally identic...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-11-09">2017-11-09</time><span>·</span><span>5 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-remove-duplicates-from-sorted-list/"><span class="">LeetCode Remove Duplicates from Sorted List</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Given a sorted linked list, delete all duplicates such that each element appear only once. For example, Given 1-1-2, return 1-2. Given 1-1-2-3-3, return...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dar
1k:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-11-09">2017-11-09</time><span>·</span><span>4 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-merge-sorted-array/"><span class="">LeetCode  Merge Sorted Array</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: You may assume that nums1 has enough space (size that...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-11-09">2017-11-09</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dar
1k:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-climbing-stairs/"><span class="">LeetCode Climbing Stairs</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you clim...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-11-08">2017-11-08</time><span>·</span><span>5 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-sqrtx/"><span class="">LeetCode Sqrt X</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Implement int sqrt(int x). Compute and return the square root of x. x is guaranteed to be a non-negative integer. Example 1: Input: 4 Output: 2 Example...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-11-07">2017-11-07</time><span>·</span><span>5 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-plus-one/"><span class="">LeetCode Plus One</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Given a non-negative integer represented as a non-empty array of digits, plus one to the integer. You may assume the integer do not contain any leading...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-11-07">2017-11-07</time><span>·</span><span>4 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-length-of-last-word/"><span class="">LeetCode Length of Last Word</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Given a string s consists of upper/lower-case alphabets and empty space characters &#x27; &#x27;, return the length of last word in the string. If the last word d...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dar
1k:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-11-07">2017-11-07</time><span>·</span><span>5 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-add-binary/"><span class="">LeetCode  Add Binary</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Given two binary strings, return their sum (also a binary string). For example, a = &quot;11&quot; b = &quot;1&quot; Return &quot;100&quot;. 题目的意思就是按二进制的方式计算两个数相加。 &lt;!--break-- Java 实...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-11-06">2017-11-06</time><span>·</span><span>9 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-maximum-subarray/"><span class="">LeetCode Maximum Subarray</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Find the contiguous subarray within an array (containing at least one number) which has the largest sum. For example, given the array [-2,1,-3,4,-1,2,1,...</span></p><div class="flex flex-wrap items-center gap-2 text-xs">
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-10-31">2017-10-31</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-count-and-say/"><span class="">LeetCode Count And Say</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem The count-and-say sequence is the sequence of integers with the first five terms as following: 1. 1 2. 11 3. 21 4. 1211 5. 111221 1 is read off as &quot;one...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-10-29">2017-10-29</time><span>·</span><span>7 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-implement-strstr/"><span class="">LeetCode  Implement strStr()</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack. 题目其实就是实现Java中String的indexO...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-10-26">2017-10-26</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-remove-element/"><span class="">LeetCode Remove Element</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Given an array and a value, remove all instances of that value in place and return the new length. Do not allocate extra space for another array, you mu...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dar
1k:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-10-22">2017-10-22</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-remove-duplicates-from-sorted-array/"><span class="">LeetCode  Remove Duplicates from Sorted Array</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space for...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-10-19">2017-10-19</time><span>·</span><span>8 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-merge-two-sorted-list/"><span class="">LeetCode Merge Two Sorted Lists</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. 即合并两个已经排好序...</span></p><div class="flex flex-wrap items-center gap-2 text-xs">
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-10-18">2017-10-18</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-valid-parentheses/"><span class="">LeetCode Valid Parentheses</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Given a string containing just the characters &#x27;(&#x27;, &#x27;)&#x27;, &#x27;{&#x27;, &#x27;}&#x27;, &#x27;[&#x27; and &#x27;]&#x27;, determine if the input string is valid. The brackets must close in the co...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><div class="my-6 text-center overflow-hidden transition-colors  " style="min-height:90px"><ins class="adsbygoogle block" data-ad-client="ca-pub-7615326632728696" data-ad-slot="9656071817" data-ad-format="fluid" data-full-width-responsive="true"></ins></div><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-10-17">2017-10-17</time><span>·</span><span>8 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-longest-common-prefix/"><span class="">LeetCode Longest Common Prefix</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Write a function to find the longest common prefix string amongst an array of strings. 就是找出一个字符串数组中元素,最长的通用前缀。例如:{&quot;ab&quot;,&quot;abc&quot;,&quot;abd&quot;},答案是 &quot;ab&quot;。 &lt;!--break-...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-10-16">2017-10-16</time><span>·</span><span>11 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-integer-to-roman/"><span class="">LeetCode  Integer To Roman</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. 跟[Roman To Integer][1]是对应问题。即将整数转换成对应的罗马数字。罗...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dar
1k:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-10-13">2017-10-13</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-roman-to-integer/"><span class="">LeetCode Roman to Integer</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. 即将罗马数字1-3999转换成对应的整数。罗马数字规则见wiki:[罗马数字规则][1]...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-10-12">2017-10-12</time><span>·</span><span>4 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-reverse-integer/"><span class="">
1LeetCode  Reverse Integer</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 Note: The input is assumed to be a 32-bit signed integer. Yo...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-10-12">2017-10-12</time><span>·</span><span>4 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/leetcode-palindrome-number/"><span class="">LeetCode  Palindrome Number</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Problem Determine whether an integer is a palindrome. Do this without extra space. 即返回一个数是否是回数。例如:1,1221,12321是回数,负数不是回数。题目特别提醒,不要使用额外的空间,即不要考虑转换成String来处理。 &lt;!-...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#LeetCode」筛选博文" href="/tags/LeetCode/">#<!-- -->LeetCode</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-10-11">2017-10-11</time><span>·</span><span>8 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/httpclient-connection-release-analysis/"><span class="">Httpcomponents-client 连接释放逻辑源码研究</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">研究背景 上篇(Httpcomponents-core 从池中获取连接代码解析)研究中,我们知道,Httpcomponents-client底层维护了一个socket连接池,对于同一个地址,默认只可以建立2个连接。如果连接不及时释放,就会造成连接池中无可用的连接获取,从而导致请求等待(阻塞)。因此,我们需要关注连接池释...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#HttpClient」筛选博文" href="/tags/HttpClient/">#<!-- -->HttpClient</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-09-27">2017-09-27</time><span>·</span><span>14 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/httpclient-core-get-pool-entry-blocking-analysis/"><span class="">Httpcomponents-core 从池中获取连接代码解析</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">最近使用Httpcomponents-client过程中遇到一个线程阻塞的问题。通过jstack dump线程发现,是block在AbstractConnPool的getPoolEntryBlocking中,于是决定研究一下Httpcomponents-client的源码。 &lt;!--break-- 问题背景 邮件发送线...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#HttpClient」筛选博文" href="/tags/HttpClient/">#<!-- -->HttpClient</a>
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/httpcomponents-core-get-pool-entry/jstack-dump.png" alt="Httpcomponents-core 从池中获取连接代码解析" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-09-24">2017-09-24</time><span>·</span><span>9 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java9-collections-factory-method/"><span class="">Java9 Collections工厂函数特性说明</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">刚发布的Java9中,有一个特性是新增了快速构造不可变集合的工厂函数。官方说明如下: JEP 269: Convenience Factory Methods for Collections Makes it easier to create instances of collections and maps with...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-09-23">2017-09-23</time><span>·</span><span>4 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/lombok-issue-with-java9/"><span class="">Lombok与Java9兼容性问题</span></a></h3>
1<p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">很久没更新博客,本想写篇关于Java9 集合工厂函数的博客,却没想到阴差阳错先遇到Lombok与Java9的兼容性问题。 &lt;!--break-- 我在一个试验用的工程里,想做一些关于Java9新特性的试验,该工程原本是依赖lombok的。结果,编译时,原有的使用@Slf4j注解的的类报编译错误。 Error:(18,...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Lombok」筛选博文" href="/tags/Lombok/">#<!-- -->Lombok</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-06-27">2017-06-27</time><span>·</span><span>2 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/springxd-deploy-lanuch-analysis/"><span class="">SpringXD 任务、启动消息通信代码流程分析</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">通信流程概括 任务部署时,xd-admin和container之间通过zookeeper的节点监听通信。container监听zk deployment节点,执行部署。同事绑定kafka message consumer和reactor subscriber。 任务启动时,xd-admin和container通过kaf...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Spring」筛选博文" href="/tags/Spring/">#<!-- -->Spring</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/xd-deploy-launch/job-deploy-launch.png" alt="SpringXD 任务、启动消息通信代码流程分析" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-04-10">2017-04-10</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/encrypt-decrypt-spring-properties/"><span class="">Spring .properties配置文件加密</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">对于保存在.properties文件中的敏感信息,支持采用加密的方式保存。然后在程序中解密使用。 &lt;!--break-- 实现方案 采用自定义PropertySourceLoader的方式,在.properties配置文件加载期,遍历值,遇到指定格式的值,则执行解密操作。具体代码如下: CodecUtil即加解密工具类...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Spring」筛选博文" href="/tags/Spring/">#<!-- -->Spring</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2017-03-24">2017-03-24</time><span>·</span><span>38 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/spring-hadoop-yarn-ha/"><span class="">Spring Hadoop Yarn HA问题调研</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Spring XD on Yarn在使用过程中发现不论是YarnClient还是AppMaster对Yarn HA的支持都不好。在Yarn的RM重启或切换的情况下,YarnClient必须修改配置文件中的RM地址才可以继续使用,即使在配置文件中配置了Yarn HA的相关配置也不生效。而AppMaster同样会因为长时间...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Hadoop」筛选博文" href="/tags/Hadoop/">#<!-- -->Hadoop</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3">
1<span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2016-12-01">2016-12-01</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/using-container-group-in-springxd-on-yarn/"><span class="">SpringXD on yarn 使用Container工作组</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">SpringXD on Yarn支持Container分组。可以更好的控制admin和container分配。 控制组内成员 以组单位整体控制生命周期 动态创建组 重启失败的容器 &lt;!--break-- 实际上,XD on Yarn有内置分组admin和container。结合例子使用: 查看分组列表: 创建新的分组...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Spring」筛选博文" href="/tags/Spring/">#<!-- -->Spring</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/xd-on-yarn-groups/yarn-rm-containers-8.png" alt="SpringXD on yarn 使用Container工作组" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2016-11-10">2016-11-10</time><span>·</span><span>2 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/flo-for-springxd-on-yarn/"><span class="">On Yarn模式下 Spring Flo for SpringXD UI部署</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">配置Spring Flo可在SpringXD的admin-ui页面提供拖拽式的组合job的定义。 从Pivotal官方下载Flo for XD 1.0.1版本 https://network.pivotal.io/products/p-spring-flo &lt;!--break-- 解压flo-spring-xd-adm...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dar
1k:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Spring」筛选博文" href="/tags/Spring/">#<!-- -->Spring</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/flo-for-springxd-on-yarn/flo-for-xd.png" alt="On Yarn模式下 Spring Flo for SpringXD UI部署" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2016-11-07">2016-11-07</time><span>·</span><span>18 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/develop-springxd-custom-module/"><span class="">SpringXD 自定义Job模块开发</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">SpringXD中的Job实际即为Spring Batch中的Job,因此我们先按照Spring Batch的规范开发一个简单的Job。 &lt;!--break-- 项目依赖: 实际这里无需配置spring-batch的依赖,因为会在springxd的parent pom中声明。而springxd的parent一般我们都会...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Spring」筛选博文" href="/tags/Spring/">#<!-- -->Spring</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><div class="my-6 text-center overflow-hidden transition-colors  " style="min-height:90px"><ins class="adsbygoogle block" data-ad-client="ca-pub-7615326632728696" data-ad-slot="9656071817" data-ad-format="fluid" data-full-width-responsive="true"></ins></div><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2016-11-01">2016-11-01</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/springxd-on-yarn-setup/"><span class="">SpirngXD on YARN模式部署说明</span></a></h3>
1<p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Spring XD可以on yarn运行。 下载on yarn运行包并解压 部署本地Hadoop环境 要on yarn运行需要依赖本地的Hadoop环境。下载Hadoop安装包并解压。笔者试验环境中已经提供了针对Hadoop的自动化配置脚本,这里不再赘述。 xd on yarn配置 修改servers.yml配置文件,...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Spring」筛选博文" href="/tags/Spring/">#<!-- -->Spring</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2016-10-21">2016-10-21</time><span>·</span><span>7 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/springxd-distributed-mode-setup/"><span class="">SpringXD分布式模式部署</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Spring XD有两种运行模式:单机和分布式模式。这里关注分布式模式的部署和运行时特点。 &lt;!--break-- 分布式集群组件 Spring XD分布式环境包含以下组件: - Admin 管理节点。管理Stream和Job的配置和发布,提供REST接口等。 - Container 运行流式任何和批量任务的节点,部署...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Spring」筛选博文" href="/tags/Spring/">#<!-- -->Spring</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2016-04-12">2016-04-12</time><span>·</span><span>7 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/mybatis-pagehelper-reentrantlock-bug/"><span class="">Mybatis-PageHelper Reentrantlock锁使用问题</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;a href=&quot;https://github.com/pagehelper/Mybatis-PageHelper&quot; target=&quot;blank&quot;Mybatis-PageHelper&lt;/a应该是目前使用比较广泛的一个Mybatis分页插件。我在几个项目里都引入了该插件。今天偶然阅读其源码,却发现了一个不小的问题。 注:...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Mybatis」筛选博文" href="/tags/Mybatis/">#<!-- -->Mybatis</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/mybatis-pagehelper-bug/pull-request.png" alt="Mybatis-PageHelper Reentrantlock锁使用问题" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2016-03-03">2016-03-03</time><span>·</span><span>3 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/package-executable-jar-with-gradle/"><span class="">Gradle打包可执行Jar</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">为自己快速写博客开发的yami程序初稿基本完成了。需要打成jar通过命令行快速调用。具体可看Readme。 项目地址:[https://github.com/lihongzheshuai/yami ](https://github.com/lihongzheshuai/yami ) 搜了一下Gradle 打包execu...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Gradle」筛选博文" href="/tags/Gradle/">#<!-- -->Gradle</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2014-11-24">2014-11-24</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/design-mode-proxy/"><span class="">乱学设计模式——代理模式</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">在乱学装饰模式的时候给出了一篇参考文章,是对比装饰模式和代理模式的。自然,这就是OneCoder现在需要理解的问题。 先复习一下设计模式6大原则: 设计模式的六大原则(引自:http://zz563143188.iteye.com/blog/1847029) &lt;blockquote 1. 开闭原则(Open Close...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#设计模式」筛选博文" href="/tags/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/">#<!-- -->设计模式</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2014-11-12">2014-11-12</time><span>·</span><span>8 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/design-mode-decorator/"><span class="">乱学设计模式——装饰模式</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">码农写码3,4年,设计模式用了不少,但又有一种在乱用的感觉。要么叫不出名字,要么感觉摸不到其精髓。其实所谓Java中的23种设计模式,OneCoder之前也乱乱的看过几遍,但是至今感觉也没有什么深刻的领悟。 之前,看到每种设计模式总会有一种“理所应当”的感觉,心里就好像在说本来就应该这么做啊,我也是这么写的啊。但是后头...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dar
1k:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#设计模式」筛选博文" href="/tags/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/">#<!-- -->设计模式</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2014-11-06">2014-11-06</time><span>·</span><span>11 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/supercsv-csv-tsv/"><span class="">利用supercsv读写CSV、TSV文件</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">先简单介绍下CSV和TSV文件的区别: &lt;blockquoteTSV ,Tab-separated values的缩写,即制表符分隔值。关于TSV标准,参考:&lt;a href=&quot;http://en.wikipedia.org/wiki/Tab-separatedvalues&quot;http://en.wikipedia.org...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2014-10-24">2014-10-24</time><span>·</span><span>10 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dar
1k:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/ip-range-filter/"><span class="">IP范围过滤实现</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">项目里要求实现在项目上线前社内测试团地可以正常访问系统,而外部访问用户看到的是系统尚未开放的页面。 OneCoder的第一反映就是实现一个filter,配置可访问的IP规则,通过正则进行匹配。通过的正常进入系统,不通过的redirect到指定欢迎页面。 整个代码没什么难度,核心就是一个IP规则的检验功能。考虑到配置的简...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2014-09-28">2014-09-28</time><span>·</span><span>24 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/spring-batch-intro-sample/"><span class="">Spring Batch 初探、使用样例</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p 工作里用到了Spring Batch项目,以前我也是做并行计算的,听说过Spring Batch不过并没有去具体了解过。今天抽空看看官方文档进行下初步的了解。&lt;/p &lt;p 官方文档地址:&lt;a href=&quot;http://docs.spring.io/spring-batch/trunk/reference/html...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Spring」筛选博文" href="/tags/Spring/">#<!-- -->Spring</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2014-09-14">2014-09-14</time><span>·</span><span>12 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/big-file-download-shallowetagheaderfilter-outofmemory/"><span class="">关于ShallowEtagHeaderFilter 大文件下载Out of memory问题解决</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p 最近解决大文件下载的问题,遇到一个&amp;quot;Out of memory&amp;quot;的exception。建厂controller层的代码,发现是用BufferdOutputStream写入Response中的,缓冲区也只有8m,按理说不应该出现内存溢出的。&lt;/p &lt;p 仔细观察异常堆栈,发现堆栈中出现了&amp;ldq...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2014-09-04">2014-09-04</time><span>·</span><span>4 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-lombok-try/"><span class="">点滴积累 Lombok  实用且有想法的jar</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p 官网:&lt;a href=&quot;http://projectlombok.org/&quot;http://projectlombok.org/&lt;/a&lt;/p &lt;p 通过官网的视频,可以看到Lombok可以帮助我们节约很多机械而繁琐的代码。例如在写Pojo类或者Log的时候。写段代码体会一下:&lt;/p &lt;p Gradle依赖配置:&lt;/...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Lombok」筛选博文" href="/tags/Lombok/">#<!-- -->Lombok</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3">
1<span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2014-08-12">2014-08-12</time><span>·</span><span>9 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/five-type-singleton-java/"><span class="">Java面试题 实现单例模式</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p 好久没有更新博客了,&lt;a href=&quot;http://www.coderli.com&quot;OneCoder&lt;/a没挂,只是儿子出生,忙了一个多月。生活节奏有点小乱。这期间也抽空换了份工作,坚持技术路线不动摇。So,抓紧调整一下状态,继续读书,写码。&lt;/p &lt;p 面试题系列,是&lt;a href=&quot;http://www.co...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2014-05-09">2014-05-09</time><span>·</span><span>2 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/spring-hibernate-hbm2dll-config/"><span class="">Spring集成Hibernate注解配置 无hibernate.cfg.xml文件,自动生成表配置</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p 本以为一个无足挂齿的小问题,没想到还折腾了一下。遂记录一下。主要搜索出的结果排名靠前的大多是在hibernate.cfg.xml中的配置方式。与我的环境不符。正确配置方式如下。已测试。&lt;/p &lt;p 注:注释掉的配置value配置方式和prop配置方式,均有效。&lt;br / &amp;nbsp;&lt;/p</span></p><div class="flex flex-wrap items-center gap-2 text-xs">
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Spring」筛选博文" href="/tags/Spring/">#<!-- -->Spring</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Hibernate」筛选博文" href="/tags/Hibernate/">#<!-- -->Hibernate</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2014-05-06">2014-05-06</time><span>·</span><span>10 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/log4j-mdc-classloader-problem/"><span class="">log4j 同一线程隔离classloader下MDC信息不同问题解决 ThreadLocal问题分析</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p 最近遇到日志文件记录错误的问题。一个任务的日志信息会被莫名的拆分到两个不同目录中。且有一个目录还是曾经执行过的任务的目录。经过分析,首先怀疑的是MDC没有清理的问题,这也是最直观的问题。因为任务是在线程池(fixedThreadPool)中运行的。由于线程会被重用,而MDC是绑定在Threadlocal上的,所以...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Log4j」筛选博文" href="/tags/Log4j/">#<!-- -->Log4j</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2014-02-26">2014-02-26</time><span>·</span><span>12 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty-5-new-and-noteworthy/"><span class="">Netty5.x中新增和值得注意的点</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;div 最近事情多,OneCoder折腾了好几天,总算翻译完成了。&lt;/div &lt;div 翻译自官方文档:&lt;a href=&quot;http://netty.io/wiki/new-and-noteworthy-in-5.x.html&quot;http://netty.io/wiki/new-and-noteworthy-in-5.x...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><div class="my-6 text-center overflow-hidden transition-colors  " style="min-height:90px"><ins class="adsbygoogle block" data-ad-client="ca-pub-7615326632728696" data-ad-slot="9656071817" data-ad-format="fluid" data-full-width-responsive="true"></ins></div><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2014-01-24">2014-01-24</time><span>·</span><span>2 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/zeromq-jzmq-enviroment-config/"><span class="">JZMQ环境变量配置说明 ZeroMQ Java Binding</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p 在考虑使用ZeroMQ时,灵活夸平台使用的问题。除了要在编译不同平台的版本,还需要在不同的平台下,进行相应的环境变量的配置。简要说明一下:&lt;br / 首先,对于JNI调用来说,不论什么平台都需要指定本地动态链接库的位置,指向包含动态链接库的文件夹:&lt;/p &lt;p 不过光这样是不够的,因为底层C/C++ 库之间也需要...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#ZeroMQ」筛选博文" href="/tags/ZeroMQ/">#<!-- -->ZeroMQ</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dar
1k:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2014-01-18">2014-01-18</time><span>·</span><span>51 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/zeromq-jzmq-mdp-java-demo/"><span class="">ZeroMQ研究 Majordomo Protocol, Java样例实现</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;div 最近研究利用zeromq实现多对多的双向自由收发。在官方上发现了MDP协议,经过验证貌似可行。正在开发中,将验证代码分享如下。&lt;/div &lt;div &amp;nbsp;&lt;/div &lt;div style=&quot;text-align: center;&quot; &lt;img alt=&quot;&quot; src=&quot;/images/oldposts/Gd...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#ZeroMQ」筛选博文" href="/tags/ZeroMQ/">#<!-- -->ZeroMQ</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2014-01-15">2014-01-15</time><span>·</span><span>23 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/zeromq-jzmq-javabind-demo/"><span class="">ZeroMQ 初学 Java Binding验证代码</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;div 学习ZeroMQ使用,根据官方文档介绍,写了如下Java验证代码。仅供参考。需要依赖jzmq的jar包和本地库。&lt;/div &lt;div &amp;nbsp;&lt;/div &lt;div 1、请求-响应模式&lt;/div &lt;div style=&quot;text-align: center;&quot; &lt;img alt=&quot;&quot; src=&quot;/image...</span></p><div class="flex flex-wrap items-center gap-2 text-xs">
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#ZeroMQ」筛选博文" href="/tags/ZeroMQ/">#<!-- -->ZeroMQ</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2014-01-13">2014-01-13</time><span>·</span><span>3 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/windows64-zeromq-jzmq-compile/"><span class="">Windows7 x64下编译ZeroMQ和JZMQ  Java Binding</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p 首先,先说明的是,OneCoder采用的是使用vs2010的编译方式,zeromq的版本是3.2.4。&lt;/p &lt;p 先编译zeromq3.2.4的源码。双击builds/msvc/ 目录下的msvc.sln导入到VS2010。选择x64位编译器,生成解决方案。&lt;/p &lt;p style=&quot;text-align: c...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#ZeroMQ」筛选博文" href="/tags/ZeroMQ/">#<!-- -->ZeroMQ</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2014-01-10">2014-01-10</time><span>·</span><span>4 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/macos-zeromq-jzmq-compile/"><span class="">MacOS10.9 下 ZeroMQ4.0.3和Java Binding安装部署</span></a></h3>
1<p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p ZeroMQ是什么可以自己去官网了解。&lt;br / &lt;a href=&quot;http://zeromq.org/&quot;http://zeromq.org/&lt;/a&lt;/p &lt;p Mac下,对于安装了brew的朋友,很简单了。&lt;br / 首先安装zeromq&lt;/p &lt;pre class=&quot;brush:shell;first-lin...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#ZeroMQ」筛选博文" href="/tags/ZeroMQ/">#<!-- -->ZeroMQ</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2013-12-16">2013-12-16</time><span>·</span><span>2 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/restlet-client-socket-timeout/"><span class="">Restlet 客户端连接超时问题解决</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p 使用Restlet进行同步请求,有时可能处理的时间会很长所以需要客户端进行较长时间的等待。从API中查得客户端的设置方式如下:&lt;/p &lt;!--break-- 不过,设置后,OneCoder经测试却发现无效。无论socketTimeout设置为多少。均会在1分钟左右超时。 这好像是由于Restlet默认使用的是一个...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Restlet」筛选博文" href="/tags/Restlet/">#<!-- -->Restlet</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2013-12-16">2013-12-16</time><span>·</span><span>4 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/restlet-bug-fix-objectrepresentation/"><span class="">Restlet2.1.6发布,修正ObjectRepresentation的构造函数问题</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p &lt;a href=&quot;http://www.coderli.com\&quot;OneCoder&lt;/a在Restlet 2.1.4中 匪夷所思的ObjectRepresentation的构造函数中,提到过在使用2.1.4的时候遇到的异常&lt;/p &lt;blockquote &lt;p Exception in thread &amp;quot;m...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Restlet」筛选博文" href="/tags/Restlet/">#<!-- -->Restlet</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2013-12-14">2013-12-14</time><span>·</span><span>8 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/migrating-from-earlier-versions-of-the-spring-framework4/"><span class="">Spring Framework 4.0 迁移指南 (官方文档翻译)</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">看到Spring Framework4.0发布的消息,看了下new future,&lt;a href=&quot;http://www.coderli.com&quot;OneCoder&lt;/a很喜欢spring这种追&amp;ldquo;时髦&amp;rdquo;的风格,groovy脚本配置和Java8都支持了。顺便就翻译了一下官方的迁移指南。对一般使用来说...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Spring」筛选博文" href="/tags/Spring/">#<!-- -->Spring</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#翻译」筛选博文" href="/tags/%E7%BF%BB%E8%AF%91/">#<!-- -->翻译</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dar
1k:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2013-12-08">2013-12-08</time><span>·</span><span>5 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/differents-log4j2-log4j/"><span class="">log4j2 与 log4j使用时的几点小区别 - log4j2上手说明</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p 虽然log4j2 目前还是beta版,不过&lt;a href=&quot;http://www.coderli.com&quot;OneCoder&lt;/a已经忍不住要尝试一下。跟使用log4j 比起来,上手上主要的区别有。&lt;br / 1、依赖的jar包。使用slf4j+log4j2 时,依赖的jar包如下:(gradle配置,Maven对...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Log4j」筛选博文" href="/tags/Log4j/">#<!-- -->Log4j</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2013-12-04">2013-12-04</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/restlet-inputrepresentation-file-read/"><span class="">Restlet流式读取远端文件内容 InputRepresentation</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p &lt;a href=&quot;http://www.coderli.com&quot;OneCoder&lt;/a验证用Restlet做服务,读取远端文件内容功能,编写验证代码。目前测试通过,主要是利用restlet内部提供的InputRepresentation对象,通过ReadableByteChannel,按字节流的方式读取文件内容。...</span></p><div class="flex flex-wrap items-center gap-2 text-xs">
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Restlet」筛选博文" href="/tags/Restlet/">#<!-- -->Restlet</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2013-12-03">2013-12-03</time><span>·</span><span>12 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/restlet-2-1-4-objectrepresentation-bug/"><span class="">Restlet 2.1.4中 匪夷所思的ObjectRepresentation的构造函数</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;a href=&quot;http://www.coderli.com&quot;OneCoder&lt;/a使用Restlet最新版2.1.4开发样例,却一直抛出异常: Exception in thread &quot;main&quot; java.lang.IllegalArgumentException : The serialized represe...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Restlet」筛选博文" href="/tags/Restlet/">#<!-- -->Restlet</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->日志篇</span><span>·</span><time dateTime="2013-11-27">2013-11-27</time><span>·</span><span>18 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/log4j-slf4j-logger-linenumber/"><span class="">log4j日志封装说明—slf4j对于log4j的日志封装-正确获取调用堆栈</span></a></h3>
1<p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p 日志是项目中必用的东西,日志产品里最普及应该就是log4j了。(logback这里暂不讨论。) 先看一下常用的log4j的用法,一般来说log4j都会配合slf4j或者common-logging使用,这里已slf4j为例。添加gradle依赖:&lt;/p &lt;p 最直接的用法就是在每个需要记录日志的类里,构造一个属于...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Log4j」筛选博文" href="/tags/Log4j/">#<!-- -->Log4j</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#SLF4J」筛选博文" href="/tags/SLF4J/">#<!-- -->SLF4J</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2013-11-24">2013-11-24</time><span>·</span><span>19 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/log4j-permgen-space-leak/"><span class="">log4j 和 java.lang.OutOfMemoryError PermGen space</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p 还是&lt;a href=&quot;http://www.coderli.com&quot;OneCoder&lt;/a在项目中沙箱的问题,用classloader隔离做的沙箱,反复运行用户的任务,出现永生区内存溢出:&lt;br / java.lang.OutOfMemoryError: PermGen space&lt;/p &lt;p 这个问题在tomc...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Log4j」筛选博文" href="/tags/Log4j/">#<!-- -->Log4j</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2013-11-21">2013-11-21</time><span>·</span><span>4 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/log4j-thread-context-classloader/"><span class="">log4j 多classloader重复加载配置问题解决</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p 最近&lt;a href=&quot;http://www.coderli.com&quot;OneCoder&lt;/a在开发隔离任务运行的沙箱,用于隔离用户不同任务间以及任务和框架本身运行代码的隔离和解决潜在的jar包冲突问题。&lt;br / &lt;!--break-- 运行发现,隔离的任务正常运行,但是却没有任何日志记录。从控制台可看到如下错误信...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Log4j」筛选博文" href="/tags/Log4j/">#<!-- -->Log4j</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->日志篇</span><span>·</span><time dateTime="2013-11-20">2013-11-20</time><span>·</span><span>2 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/log4j-mdc-clear/"><span class="">log4j 清除MDC上下文 MDC分类日志</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">在项目里需要分类收集处理日志信息,使用log4j的MDC在线程中添加分类信息。不过最近却出现日志信息记录错误的情况,具体来说,就是会出现本来是属于下一个分类的一部分信息莫名的记录到上一个分类的日志文件中了。这很显然是MDC信息错误造成的。其实,最开始暴露给我们的现象是,在日志清空后,第一次运行任务,会出现两条日志。显然...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Log4j」筛选博文" href="/tags/Log4j/">#<!-- -->Log4j</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dar
1k:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><div class="my-6 text-center overflow-hidden transition-colors  " style="min-height:90px"><ins class="adsbygoogle block" data-ad-client="ca-pub-7615326632728696" data-ad-slot="9656071817" data-ad-format="fluid" data-full-width-responsive="true"></ins></div><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2013-11-19">2013-11-19</time><span>·</span><span>3 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/windows64-java-jni-dll/"><span class="">Java JNI Windows64位系统下 使用32位的dll</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p 今天遇到在处理一个多classloader调用本地native方法报错的问题的时候,想要通过调用本地的一个dll进行测试。该dll是在32位环境下编译的。而&lt;a href=&quot;http://www.coderli.com&quot;OneCoder&lt;/a的调试机器是64位的win7。自然调用会报如下错误:&lt;/p &lt;block...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2013-11-17">2013-11-17</time><span>·</span><span>9 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty4-hello-world/"><span class="">Java NIO框架Netty教程(十七) - Netty4 Hello world</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">
1最近很多人问我有没有Netty4的Hello World样例,很早之前知道Netty要出4,当时只知道4的包名完全边了,因为Netty从JBoss中独立出来了,并采用了新的netty.io的域名,但是没想到代码也有这么大的调整。 &lt;!--break-- 既然答应了别人,就抽时间看一下Netty4,也顺便补充一下自己的知...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2013-10-17">2013-10-17</time><span>·</span><span>2 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/slf4j-log4j-failed/"><span class="">slf4j+log4j2 控制台输出错误解决</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;blockquote &lt;p SLF4J: Failed to load class &quot;org.slf4j.impl.StaticLoggerBinder&quot;. SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See &lt;uhttp:...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Log4j」筛选博文" href="/tags/Log4j/">#<!-- -->Log4j</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#SLF4J」筛选博文" href="/tags/SLF4J/">#<!-- -->SLF4J</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2013-10-16">2013-10-16</time><span>·</span><span>4 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/acm-poj-1001/"><span class="">Poj1001 求高精度幂</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">实话说,不是正规解法,只是因为用的Java,利用里里面的API而已。仅供一笑了。 PS:代码是AC过的。</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2013-10-12">2013-10-12</time><span>·</span><span>2 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/log4j-appender-ignoresthrowables/"><span class="">log4j自定义appender实现,处理异常堆栈</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">在项目中需要自定义实现一个log4j的appender。根据log中MDC里的信息,构造日志存储的目录结构。自定义实现log4j appender的方法已经介绍过了。主要是覆盖AppenderSkeleton中的appender方法。 日志内容的获取和格式处理,通过Layout进行格式化 这里有个问题,一般情况下,我们...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Log4j」筛选博文" href="/tags/Log4j/">#<!-- -->Log4j</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2013-10-08">2013-10-08</time><span>·</span><span>2 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/gradle-maven-local-repositories/"><span class="">Gradle 使用Maven本地缓存库</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">从Maven切换到Gradle,原有的几G的本地缓存库当然想继续使用。在用户手册中找到了答案。在50.6.3章节。 如果想使用Maven本地缓存,需要定义: Gradle使用与Maven相同的策略去定位本地Maven缓存的位置。如果在settings.xml中定义了本地Maven仓库的地址,则使用该地址。在USERHO...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Gradle」筛选博文" href="/tags/Gradle/">#<!-- -->Gradle</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2013-09-24">2013-09-24</time><span>·</span><span>4 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/translate-gradle-userguide-multi-projectjavabuild/"><span class="">《Gradle user guide》翻译 — 7.3 多工程Java构建</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">现在我们来看一个典型的多项目构建的例子。下面是工程的布局: 样例7.10 多项目构建 - 分层布局 构建结构 注意:本样例的代码可以在Gradle完整安装包的samples/java/multiproject目录下找到 这里我们有三个工程。api工程生成用于Java客户端访问XML webservice服务的JAR包。...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Gradle」筛选博文" href="/tags/Gradle/">#<!-- -->Gradle</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dar
1k:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#翻译」筛选博文" href="/tags/%E7%BF%BB%E8%AF%91/">#<!-- -->翻译</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2013-09-23">2013-09-23</time><span>·</span><span>9 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/translate-gradle-userguide-a-basic-java-project/"><span class="">《Gradle user guide》翻译 — 7.2 一个基本的Java项目</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">7.2 一个基本的Java项目 我们来看一个简单的例子。把下面的代码加入你的构建文件,以使用Java插件: 例子 7.1 使用Java插件 注意:该样例的代码可在Gradle的安装包中的samples/java/quickstart路径下找到。 这就是你定义一个Java项目所需要做的一切。这就会在你项目里使用Java插...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Gradle」筛选博文" href="/tags/Gradle/">#<!-- -->Gradle</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#翻译」筛选博文" href="/tags/%E7%BF%BB%E8%AF%91/">#<!-- -->翻译</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2013-09-21">2013-09-21</time><span>·</span><span>4 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dar
1k:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/translate-gradle-userguide-6/"><span class="">《Gradle user guide》原创翻译 — 第六章 构建脚本基础</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">译者注:从第六章开始翻译,为了个人学习需要,先省略了前面已经了解和不太相关部分。见谅。&lt;br / &lt;br / 6.1 项目和任务&lt;br / &lt;br / Gradle里的一切都基于两个基本概念:项目和任务。(projects and tasks)。&lt;br / &lt;br / 每个Gradle构建都是由一个或多个项目组成的。项...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Gradle」筛选博文" href="/tags/Gradle/">#<!-- -->Gradle</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#翻译」筛选博文" href="/tags/%E7%BF%BB%E8%AF%91/">#<!-- -->翻译</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2013-09-21">2013-09-21</time><span>·</span><span>2 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/gradle-userguide-javaplugin/"><span class="">《Gradle user guide》翻译 — 第七章 Java快速开始</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">7.1 Java插件 &lt;p 如我们所了解的,Gradle是一个通用的构建工具。它可以通过你的构建脚本实现几乎任何你想做的事情。不过,作为开箱即用的产品,它不会做任何构建脚本不包含的任务。&lt;/p 大多数的Java项目都跟基础情况很相似:你需要编译你的Java源文件,执行单元测试,并且创建一个包含你的类的JAR包。如果你不...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Gradle」筛选博文" href="/tags/Gradle/">#<!-- -->Gradle</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dar
1k:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Log</span><span>·</span><time dateTime="2013-09-17">2013-09-17</time><span>·</span><span>3 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/log4j-custom-appender/"><span class="">自定义实现log4j的appender</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">log4j,应用最广泛的日志框架。其作者后来推出logback,也是好选择。不多说废话。 log4j组件介绍 Log4j主要有三个组件: Logger:负责供客户端代码调用,执行debug(Object msg)、info(Object msg)、warn(Object msg)、error(Object msg)等方...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Log4j」筛选博文" href="/tags/Log4j/">#<!-- -->Log4j</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2013-09-12">2013-09-12</time><span>·</span><span>3 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-countsort/"><span class="">计数排序Java实现</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">计数排序&amp;mdash;&amp;mdash;线性排序算法《算法导论》8.2</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a>
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#排序」筛选博文" href="/tags/%E6%8E%92%E5%BA%8F/">#<!-- -->排序</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#算法」筛选博文" href="/tags/%E7%AE%97%E6%B3%95/">#<!-- -->算法</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->JPPF</span><span>·</span><time dateTime="2013-07-17">2013-07-17</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/jppf-remote-log/"><span class="">JPPF-log4j远程日志管理</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p 利用JPPF进行并行计算,计算任务运行在远端节点上,那么如何收集运行在远端的任务日志,用于跟踪和分析呢?&lt;/p &lt;p JPPF框架对此也有封装,主要的实现思路是,通过自定义实现一个log4j的appender,对外提供JMX服务。客户端(监控端)实现一个监听器,监听远端日志,这样即可把远端日志采集到本地进行统一的...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#JPPF」筛选博文" href="/tags/JPPF/">#<!-- -->JPPF</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->JPPF</span><span>·</span>
1<time dateTime="2013-07-12">2013-07-12</time><span>·</span><span>10 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/jppf-classloader/"><span class="">JPPF并行计算框架类加载机制研究</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p 不算什么深入的研究,主要是了解下JPPF中类的加载和隔离机制。&lt;/p &lt;p JPPF中类的加载采用的是分布式类加载技术。这样既可在Node节点运行在node上并不存在的类。也就是类可以仅在用户的Client端存在。&lt;/p &lt;p style=&quot;text-align: center;&quot; &lt;img alt=&quot;&quot; src...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#JPPF」筛选博文" href="/tags/JPPF/">#<!-- -->JPPF</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->JPPF</span><span>·</span><time dateTime="2013-07-10">2013-07-10</time><span>·</span><span>7 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/jppf-3-first-use/"><span class="">并行计算框架JPPF3.3.4试用</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p 先说一个挺有意思的事情,就在OneCoder准备记录试用过程的时候,给大家截图下载页面的时候,发现最新版本变成3.3.4了。于是,我也只好重新下载了:)&lt;/p &lt;p 关于JPPF的介绍,可访问其官网:&lt;a href=&quot;http://www.jppf.org&quot;http://www.jppf.org&lt;/a&lt;br /...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#JPPF」筛选博文" href="/tags/JPPF/">#<!-- -->JPPF</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><div class="my-6 text-center overflow-hidden transition-colors  " style="min-height:90px">
1<ins class="adsbygoogle block" data-ad-client="ca-pub-7615326632728696" data-ad-slot="9656071817" data-ad-format="fluid" data-full-width-responsive="true"></ins></div><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Spring</span><span>·</span><time dateTime="2013-07-04">2013-07-04</time><span>·</span><span>8 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/hessian-spring-fileupload/"><span class="">Hessian4.0.7+Spring3.2.2文件上传</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p 最近用Hessian4.0.7做文件上传,先给出自己做试验的样例代码,写在tomcat7下,采用servlet3.0,配置代码如下:&lt;/p &lt;p 定义接口,并在服务端实现,Hessian4.0开始支持流作为参数传递,以前则采用byte[]方式传递:&lt;/p &lt;p class=&quot;p1&quot; 客户端调用:&lt;/p &lt;p 很简...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Spring」筛选博文" href="/tags/Spring/">#<!-- -->Spring</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Gradle</span><span>·</span><time dateTime="2013-03-19">2013-03-19</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/gradle-eclipse/"><span class="">Gradle初试</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p Gradle是什么就不多说了,跟Maven是同类型的工具。Spring和Hibernate都早已经迁移了过来。官网地址:&lt;a href=&quot;http://www.gradle.org&quot;http://www.gradle.org&lt;/a。最新稳定版为1.4&lt;/p &lt;p Gradle Eclipse Plugin是spr...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dar
1k:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Gradle」筛选博文" href="/tags/Gradle/">#<!-- -->Gradle</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Eclipse</span><span>·</span><time dateTime="2013-01-12">2013-01-12</time><span>·</span><span>2 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/macos-jdk-eclipse-config/"><span class="">Mac OS 下 Java开发环境搭建</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;a href=&quot;http://www.coderli.com&quot;OneCoder&lt;/a最近入手一台Mac Pro。其实这个话题本来没什么可写的。但是考虑确实自己开始是不知道的,哪怕是一丁点的收获,也应该记录下来。 其实Java开发环境无非就是安装JDK,安装IDE,配置环境变量。JDK自然从官网下载Mac版的,IDE,...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/oldposts/11JWWn.jpg" alt="Mac OS 下 Java开发环境搭建" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Maven</span><span>·</span><time dateTime="2012-11-22">2012-11-22</time><span>·</span><span>2 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/maven-export-jar-file/"><span class="">导出Maven工程依赖的Jar包</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">其实这个本来没什么可写的,只是&lt;a href=&quot;http://www.coderli.com&quot;OneCoder&lt;/a恰巧用到又不会,在网上查了一下找到了答案,所以记录一下,也做分享。 很简单,一句话,执行: 会将依赖的包拷贝到工程的lib目录下。</span></p><div class="flex flex-wrap items-center gap-2 text-xs">
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Maven」筛选博文" href="/tags/Maven/">#<!-- -->Maven</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->JDK</span><span>·</span><time dateTime="2012-11-12">2012-11-12</time><span>·</span><span>8 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/translate-java-collections-bigdata-mapdb/"><span class="">用16G内存在Java Map中处理30亿对象</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">在一个下雨的夜晚,我在思考Java中内存管理的问题,以及Java集合对内存使用的效率情况。我做了一个简单的实验,测试在16G内存条件下,Java的Map可以插入多少对象。 这个试验的目的是为了得出集合的内部上限。所以,我决定使用很小的key和value。所有的测试,都是在64w位linux环境下进行的,操作系统是ubu...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Spring</span><span>·</span><time dateTime="2012-10-22">2012-10-22</time><span>·</span><span>3 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/junit-spring-test-applicationcontext/"><span class="">SpringTest框架JUnit单元测试用例获取ApplicationContext实例的方法</span></a></h3>
1<p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">JUnit单元测试用例中使用Spring框架,之前我的使用方式很直接。 在测试的过程中,有人提到,想要获取ApplicationContext实例。于是,添加了对ApplicationContext的注入。 其实,Spring中早已直接提供了更加方便使用的基类:AbstractJUnit4SpringContextTe...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#JUnit」筛选博文" href="/tags/JUnit/">#<!-- -->JUnit</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Spring</span><span>·</span><time dateTime="2012-10-19">2012-10-19</time><span>·</span><span>18 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/spring-configuration-autowire-failed/"><span class="">Spring3.1完全基于注解配置@Configuration类中@Autowire无法注入问题解决</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">在上回介绍Spring3.1+Hibernate4.1.7基于注解配置的时候(&lt;a href=&quot;http://www.coderli.com/spring-hibernate-base-annotation&quot;《SpringMVC3.1+Hibernate4.1.7完全基于注解配置(零配置文件)》&lt;/a)说过,在修改配置...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Spring」筛选博文" href="/tags/Spring/">#<!-- -->Spring</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Spring</span><span>·</span><time dateTime="2012-10-18">2012-10-18</time><span>·</span><span>8 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dar
1k:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/spring-hibernate-base-annotation/"><span class="">SpringMVC3.1+Hibernate4.1.7完全基于注解配置(零配置文件)</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">其实这篇文章应该是上篇&lt;a href=&quot;http://www.coderli.com/springmvc-servlet3-code-bases-configuration&quot;《Servlet3.0下基于注解的SpringMVC3.1配置-完全零配置文件》&lt;/a的续篇,因为上篇只介绍到web工程和Spring(包括MVC...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Spring」筛选博文" href="/tags/Spring/">#<!-- -->Spring</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Hibernate」筛选博文" href="/tags/Hibernate/">#<!-- -->Hibernate</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Spring</span><span>·</span><time dateTime="2012-10-15">2012-10-15</time><span>·</span><span>7 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/springmvc-servlet3-code-bases-configuration/"><span class="">Servlet3.0下基于注解的SpringMVC3.1配置-完全零配置文件</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p Spring3.1.x系列的一个新特性就是支持了Servlet3.0规范,基于注解的方式配置SpringMVC框架。官方文档描述如下:&lt;/p &lt;blockquote &lt;div &lt;div &lt;div &lt;h3 3.1.10&amp;nbsp;Support for Servlet 3 code-based configurat...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Spring」筛选博文" href="/tags/Spring/">#<!-- -->Spring</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->JDK</span><span>·</span><time dateTime="2012-10-10">2012-10-10</time><span>·</span><span>3 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/timertask-period-test/"><span class="">Java Timer任务执行消耗事件大于执行周期问题验证</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p 其实是一个不值得一提的小问题,不过既然验证了,就拿出来分享一下吧。&lt;/p &lt;div &lt;a href=&quot;http://www.coderli.com&quot;OneCoder&lt;/a在要做一个周期性的任务,Timer即可实现,不过考虑到有可能在一个周期内,任务可能没有结束,不知道Timer的处理方式,是直接启动下一个,还是等...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->JDK</span><span>·</span><time dateTime="2012-10-08">2012-10-08</time><span>·</span><span>4 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/translate-java-parsing-csv-files/"><span class="">Java 解析CSV文件</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p 十一匆匆的就过去了,OneCoder过的也是有点恍惚。不知道都做了什么,心却有点散。做一篇翻译,权当收收心,找找感觉吧。&lt;/p &lt;div 原文地址:&lt;a href=&quot;http://www.markhneedham.com/blog/2012/09/23/java-parsing-csv-files/&quot;http:/...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3">
1<span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Eclipse</span><span>·</span><time dateTime="2012-09-29">2012-09-29</time><span>·</span><span>10 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/eclipse-tomcat-maven-logback-servlet-web/"><span class="">Eclipse4.2+Tomcat7+Maven3+Servlet3.0 J2EE工程配置说明</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;a href=&quot;http://www.coderli.com&quot;OneCoder&lt;/a准备自己慢慢写点东西,把离散的知识点汇总一下。给出的版本没什么特别的含义,只是&lt;a href=&quot;http://www.coderli.com&quot;OneCoder&lt;/a目前使用的环境而已。 &lt;ul &lt;li IDE:Eclipse4.2 J...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->JDK</span><span>·</span><time dateTime="2012-09-25">2012-09-25</time><span>·</span><span>3 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/translate-callable-vs-runnable-brawl/"><span class="">Callable vs Runnable - Runners间的“争论”</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;p 看到一篇通过模拟Runnable和Callable对话的方式,形象的讲述Java中Runnable和Callable区别的文章,遂决定ç
1¿»è¯‘过来加深印象与大家分享。&lt;/p &lt;p 英文原文地址:&lt;a href=&quot;http://java.dzone.com/articles/callable-vs-runnable-b...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#翻译」筛选博文" href="/tags/%E7%BF%BB%E8%AF%91/">#<!-- -->翻译</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Netty</span><span>·</span><time dateTime="2012-09-25">2012-09-25</time><span>·</span><span>8 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty-server-bootstrap-nio-source-analysis/"><span class="">Java NIO框架Netty教程(十六)-ServerBootStrap启动流程源码分析</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">有一段事件没有更新文章了,各种原因都有吧。搬家的琐事,搬家后的安逸呵呵。不过,&lt;a href=&quot;http://www.coderli.com&quot;OneCoder&lt;/a明白,绝不能放松。对于Netty的学习,也该稍微深入一点了。 所以,这次&lt;a href=&quot;http://www.coderli.com&quot;OneCoder&lt;/...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/oldposts/aGtVD.jpg" alt="Java NIO框架Netty教程(十六)-ServerBootStrap启动流程源码分析" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Restlet</span><span>·</span><time dateTime="2012-09-17">2012-09-17</time><span>·</span><span>2 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dar
1k:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/restlet-404-client-protocol/"><span class="">Restlet一个由Client的Protocol引发的404的问题</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">今天&lt;a href=&quot;http://www.coderli.com&quot;OneCoder&lt;/a遇到一个不大不小的问题。用Restlet开启了一个rest服务,并且在这个服务内部还会访问其他的rest服务,结果遇到404的错误。但是通过浏览器直接访问却可以访问,通过测试用例直接访问也可以,只有在间接通过restlet访问的时...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Restlet」筛选博文" href="/tags/Restlet/">#<!-- -->Restlet</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><div class="my-6 text-center overflow-hidden transition-colors  " style="min-height:90px"><ins class="adsbygoogle block" data-ad-client="ca-pub-7615326632728696" data-ad-slot="9656071817" data-ad-format="fluid" data-full-width-responsive="true"></ins></div><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Netty</span><span>·</span><time dateTime="2012-09-13">2012-09-13</time><span>·</span><span>7 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty-file-transfer/"><span class="">Java NIO框架Netty教程(十五)-利用Netty进行文件传输</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">如果您持续关注&lt;a href=&quot;http://www.coderli.com&quot;OneCoder&lt;/a,您可能会问,在&lt;a href=&quot;http://www.coderli.com/netty-oio-nio&quot;《Java NIO框架Netty教程(十四)- Netty中OIO模型(对比NIO)》&lt;/a中不是说下节介绍的是...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Netty</span><span>·</span><time dateTime="2012-09-06">2012-09-06</time><span>·</span><span>5 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty-oio-nio/"><span class="">Java NIO框架Netty教程(十四)-Netty中OIO模型(对比NIO)</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;a href=&quot;http://www.coderli.com&quot;OneCoder&lt;/a这个周末搬家,并且新家目前还没有网络,本周的翻译的任务尚未完成,下周一起补上,先上一篇OIO和NIO对比的小研究。 Netty中不光支持了Java中NIO模型,同时也提供了对OIO模型的支持。(New IO vs Old IO)。 首...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Maven</span><span>·</span><time dateTime="2012-09-04">2012-09-04</time><span>·</span><span>5 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/maven-appassembler-plugin-bat/"><span class="">利用Maven插件打包产生可运行bat文件</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">其实是一个很简单的技巧,就是利用Maven的appassembler-maven-plugin插件,就可以实现自动打包可运行的脚本ï¼
1Œè¿˜å¯ä»¥è·¨å¹³å°ã€‚(Windows/linux) 首先在pom.xml文件的build节点下配置插件: 然后选择你要编译的工程,右键-maven build... 命令如下图: 然后Run一下...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Maven」筛选博文" href="/tags/Maven/">#<!-- -->Maven</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/oldposts/ogPHi.jpg" alt="利用Maven插件打包产生可运行bat文件" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Netty</span><span>·</span><time dateTime="2012-08-30">2012-08-30</time><span>·</span><span>8 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty-concurrency-problem-test-end/"><span class="">Java NIO框架Netty教程(十三)-并发访问测试(下)</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">在上节(&lt;a href=&quot;http://www.coderli.com/netty-concurrency-problem-test-two&quot; target=&quot;\blank&quot;《Java NIO框架Netty教程(十二)-并发访问测试(中)》&lt;/a),我们从各个角度对Netty并发的场景进行了测试。这节,我们将重点关注上...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/oldposts/4hFcy.jpg" alt="Java NIO框架Netty教程(十三)-并发访问测试(下)" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->知识扩展</span><span>·</span><time dateTime="2012-08-28">2012-08-28</time><span>·</span><span>2 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dar
1k:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/translate-organize-imports-eclipse/"><span class="">在Eclipse中管理Java类引用的技巧</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">今天,我学到了一个在Eclipse中管理引用的小技巧。当然,你可以在单个文件中用Ctrl+shift+O去移除未使用的引用。但是,如果你想移除很多类的无用的引用你该如何去做,比如移除整个包下的类? 很简单,在包浏览(Package Exporler)视图下,右击你想要修改的包,然后依次选择source -&amp;gt; Or...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Eclipse」筛选博文" href="/tags/Eclipse/">#<!-- -->Eclipse</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->随笔</span><span>·</span><time dateTime="2012-08-21">2012-08-21</time><span>·</span><span>9 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-study-resolve-problem-by-itself/"><span class="">OneCoder愚见 Java初学者如何自学和自己定位解决问题</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">今天群里(Java爱好者群:982860385)的朋友,问我该如何看帮助文档,或者说在遇到问题的时候如何解决。希望我能介绍一下我的方法。 这个&lt;a href=&quot;http://www.coderli.com&quot;OneCoder&lt;/a其实没有资格高谈阔论,只能说说个人的习惯和方式。自学和自我解决问题确实是一项非常非常重要的能...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/oldposts/hcrs8.jpg" alt="OneCoder愚见 Java初学者如何自学和自己定位解决问题" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Netty</span><span>·</span><time dateTime="2012-08-20">2012-08-20</time><span>·</span><span>11 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty-concurrency-problem-test-two/"><span class="">Java NIO框架Netty教程(十二)-并发访问测试(中)</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">写在前面:对Netty并发问题的测试和解决完全超出了我的预期,想说的东西越来越多。所以才出现这个中篇,也就是说,一定会有下篇。至于问题点的发现,&lt;a href=&quot;http://www.coderli.com&quot;OneCoder&lt;/a也在努力验证中。 继续并发的问题。在&lt;a href=&quot;http://www.coderli...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/oldposts/7FrMP.jpg" alt="Java NIO框架Netty教程(十二)-并发访问测试(中)" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Netty</span><span>·</span><time dateTime="2012-08-11">2012-08-11</time><span>·</span><span>4 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty-concurrency-problem-one/"><span class="">Java NIO框架Netty教程(十一)-并发访问测试(上)</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">之前更新了几篇关于JVM研究的文章,其实也是在做本篇文章验证的时候,跑的有点远,呵呵。回归Netty教程,这次要讲的其实是针对一个问题的研究和验证结论。另外,最近工作比较忙,所以可能会分文章更新一些阶段性的成果,而不是全部汇总更新,以免间隔过久。 起因是一个朋友,通过微博私信给我一个问题,大意是说他在用Netty做并发...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3">
1<span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->JVM</span><span>·</span><time dateTime="2012-08-06">2012-08-06</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/jvm-heap-code-overflow/"><span class="">JVM运行时数据区详解-Heap堆(优化配置、代码样例)</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">在Java虚拟机中,堆(Heap)是可供各条线程共享的运行时内存区域,也是供所有类实例和数组对象分配内存的区域。 Java堆在虚拟机启动的时候就被创建,它存储了被自动内存管理系统(Automatic Storage Management System,也即是常说的&quot;Garbage Collector(垃圾收集器)&quot;)所...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#JVM」筛选博文" href="/tags/JVM/">#<!-- -->JVM</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/jvm-heap/heap.png" alt="JVM运行时数据区详解-Heap堆(优化配置、代码样例)" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Libvirt</span><span>·</span><time dateTime="2012-08-04">2012-08-04</time><span>·</span><span>15 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/windows-libvirt-api-three/"><span class="">Windows下Libvirt Java API使用教程(三)- TLS认证访问和动态连接文件依赖</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">突兀的出来一个libvirt的教程三,您可能会觉得奇怪,其实这是OneCoder以前写的一个小系列教程,原来发在51cto的博客上,前两篇已经发了过来,考虑到完整性,就把第三篇也发过来。前两篇地址: - 《&lt;a href=&quot;http://www.coderli.com/windows-libvirt-one/&quot; tar...</span></p><div class="flex flex-wrap items-center gap-2 text-xs">
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Libvirt」筛选博文" href="/tags/Libvirt/">#<!-- -->Libvirt</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/oldposts/GyTui.jpg" alt="Windows下Libvirt Java API使用教程(三)- TLS认证访问和动态连接文件依赖" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->JVM</span><span>·</span><time dateTime="2012-08-03">2012-08-03</time><span>·</span><span>9 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/jvm-stack-code-overflow/"><span class="">JVM运行时数据区详解-Stack栈(优化配置、代码样例)</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">最近有段时间没有更新Netty的教程了,却发了一些其他的东西。可能有的朋友会问,难道这就完事了?不会的。两方面原因。第一、笔者也是需要工作的人,自然要完成好工作中的任务,这里面也有很多东西需要学习和研究,这也是我分享的方向和源泉。第二、想要掌握好Netty,周边的知识也不能少,这也是笔者在恶补的东西。所以,你完全可以把...</sp
1an></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#JVM」筛选博文" href="/tags/JVM/">#<!-- -->JVM</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/oldposts/sXecH.jpg" alt="JVM运行时数据区详解-Stack栈(优化配置、代码样例)" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Netty</span><span>·</span><time dateTime="2012-07-27">2012-07-27</time><span>·</span><span>32 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty-object-continuous-readwrite/"><span class="">Java NIO框架Netty教程(十)-Object对象的连续收发解析分析</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">如果您一直关注OneCoder,我们之前有两篇文章介绍关于Netty消息连续收发的问题。( &lt;a href=&quot;http://www.coderli.com/netty-message-receive-count-mismatch/&quot; target=&quot;\blank&quot;《Java NIO框架Netty教程(五)- 消息收发次...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->JDK</span><span>·</span><time dateTime="2012-07-26">2012-07-26</time><span>·</span><span>3 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/story-future-java/"><span class="">Java小故事 我许你一个未来 Future</span></a></h3>
1<p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">还是梳理代码,频频到Future这个字眼,很自然的让我想到了未来。 还是那对男孩和女孩,女孩问男孩,你会娶我吗?男孩说,一定会,等我为你盖好一栋美丽的房子……</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->JDK</span><span>·</span><time dateTime="2012-07-25">2012-07-25</time><span>·</span><span>3 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/story-boygirl-observer/"><span class="">Java小故事 不舍得叫醒女孩的男孩 观察者模式</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">今天在梳理项目里一些老的代码逻辑和结构的时候,发现了一段观察者的代码。脑海里同时浮现出这样一个故事…… 有一个女孩和一个男孩,他们在山里迷路了。晚上,他们都精疲力尽。男孩对女孩说,你睡会吧,我看着,有动静我叫你,然而……</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Netty</span><span>·</span><time dateTime="2012-07-24">2012-07-24</time><span>·</span><span>8 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dar
1k:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty-custom-object-codec/"><span class="">Java NIO框架Netty教程(九)-Object对象编/解码</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">看到题目,有的同学可能会想,上回不是说过&lt;a href=&quot;http://www.coderli.com/netty-object-transmit/&quot; target=&quot;\blank&quot;对象传递&lt;/a了吗?是的,只是在&lt;a href=&quot;http://www.coderli.com/netty-object-transmit...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><div class="my-6 text-center overflow-hidden transition-colors  " style="min-height:90px"><ins class="adsbygoogle block" data-ad-client="ca-pub-7615326632728696" data-ad-slot="9656071817" data-ad-format="fluid" data-full-width-responsive="true"></ins></div><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2012-07-23">2012-07-23</time><span>·</span><span>2 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/proxifile-eclipse-ipv6/"><span class="">Eclipse javaw 通过Proxifile代理ipv6协议问题解决</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">这是一个在比较特殊情况下才会发生的问题。不过却在笔者的身上发生了,既然如此,那就记录一下,也许还有其他朋友也会碰到。 问题描述:笔者办公环境使用Proxifile全局代码上网,不过对于一些不想走代理的程序和地址进行了过滤。然后笔者发现,Eclipse更新不好用了。查看Proxifile记录,发现Eclipse访问网址,...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Eclipse」筛选博文" href="/tags/Eclipse/">#<!-- -->Eclipse</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/oldposts/11FR3Q.jpg" alt="Eclipse javaw 通过Proxifile代理ipv6协议问题解决" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Netty</span><span>·</span><time dateTime="2012-07-23">2012-07-23</time><span>·</span><span>8 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty-object-transmit/"><span class="">Java NIO框架Netty教程(八)-Object对象传递</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">说了这么多废话,才提到对象的传输,不知道您是不是已经不耐烦了。一个系统内部的消息传递,没有对象传递是不太现实的。下面就来说说,怎么传递对象。 如果,您看过前面的介绍,如果您善于专注本质,勤于思考。您应该也会想到,我们说过,Netty的消息传递都是基于流,通过ChannelBuffer传递的,那么自然,Object也需要...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Netty</span><span>·</span><time dateTime="2012-07-22">2012-07-22</time><span>·</span><span>4 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty-message-receive-count-mismatch-two/"><span class="">Java NIO框架Netty教程(七)-再谈收发信息次数问题</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">在&lt;a href=&quot;http://www.coderli.com/netty-message-receive-count-mismatch/&quot; target=&quot;\blank&quot;《Java NIO框架Netty教程(五)- 消息收发次数不匹配的问题》&lt;/a里我们试图分析一个消息收发次数不匹配的问题。当时笔者还是心存疑惑的。...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3">
1<span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Netty</span><span>·</span><time dateTime="2012-07-18">2012-07-18</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty-nio-selector/"><span class="">Java NIO框架Netty教程(六)-Java NIO Selector模式</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">看到标题,您可能觉得,这跟Netty有什么关系呢?确实,如果你完全是使用Netty的,那么可能你可以完全不需要了解Selector。但是,不得不提的是,Netty底层关于NIO的实现也是基于Java的Selector的,是对Selector的封装。所以,我个人认为理解好Selector对于使用和理解Netty都是很多有...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Netty</span><span>·</span><time dateTime="2012-07-16">2012-07-16</time><span>·</span><span>18 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty-message-receive-count-mismatch/"><span class="">Java NIO框架Netty教程(五)- 消息收发次数不匹配的问题</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">周末是最好的学习时间,不过这周末收房子,可想而知事情自然也不会少。这段时间的周末,可能很少有时间学习了。见缝插针吧。 不说废话了,好好学习。&lt;a href=&quot;http://www.coderli.com/netty-channel-stream/&quot; target=&quot;\blank&quot;上回&lt;/a通过代码理解了Netty底层信...</span></p><div class="flex flex-wrap items-center gap-2 text-xs">
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Netty</span><span>·</span><time dateTime="2012-07-13">2012-07-13</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty-navi/"><span class="">Netty学习专题系列导航</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">OneCoder原创系列 - &lt;a href=&quot;http://www.coderli.com/netty-course-hello-world/&quot; target=&quot;\blank&quot;Java NIO框架Netty教程(一) - Hello Netty&lt;/a - &lt;a href=&quot;http://www.coderli.com...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Netty</span><span>·</span><time dateTime="2012-07-13">2012-07-13</time><span>·</span><span>9 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty-channel-stream/"><span class="">Java NIO框架Netty教程(四)- ChannelBuffer</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">在&lt;a href=&quot;http://www.coderli.com/netty-string-channelbuffer/&quot; target=&quot;\blank&quot;字符串消息收发&lt;/a中提到。ChannelBuffer是Netty中非常重要的概念。所有消息的收发都依è
1µ–于这个Buffer。我们通过Netty的官方的文档来了解一下,...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->JDK</span><span>·</span><time dateTime="2012-07-13">2012-07-13</time><span>·</span><span>2 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/java-i-jvm/"><span class="">Java i=i++值的问题的解答 反编译</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">昨晚有朋友问我这样的一个问题。 打印的结果为什么是 0。 其实我一下也说不清楚,第一反应就是看看编译后的class文件。 这就好解释了: 至此完成i = i++,所以最后i的值为0 iinc 指令是直接对局部变量区进行操作,操作数栈不发生任何变化,这是由JVM规范定义的。</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Netty</span><span>·</span><time dateTime="2012-07-12">2012-07-12</time><span>·</span><span>9 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dar
1k:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty-string-channelbuffer/"><span class="">Java NIO框架Netty教程(三)- 字符串消息收发</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">了解了Netty的&lt;a href=&quot;http://www.coderli.com/netty-two-concepts/&quot; target=&quot;\blank&quot;基本概念&lt;/a,开发起来应该会顺手很多。在&lt;a href=&quot;http://www.coderli.com/netty-course-hello-world/&quot; tar...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/oldposts/CT0dH.jpg" alt="Java NIO框架Netty教程(三)- 字符串消息收发" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Netty</span><span>·</span><time dateTime="2012-07-11">2012-07-11</time><span>·</span><span>4 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty-two-concepts/"><span class="">Java NIO框架Netty教程(二) - 白话概念</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;a href=&quot;http://www.coderli.com/netty-course-hello-world/&quot; target=&quot;\blank&quot; &quot;Hello World&quot;&lt;/a的代码固然简单,不过其中的几个重要概念(类)和 Netty的工作原理还是需要简单明确一下,至少知道其是负责什。方便自己以后更灵活的使用和扩...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/oldposts/FjuwT.jpg" alt="Java NIO框架Netty教程(二) - 白话概念" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Netty</span><span>·</span><time dateTime="2012-07-11">2012-07-11</time><span>·</span><span>7 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty-course-hello-world/"><span class="">Java NIO框架Netty教程(一) - Hello Netty</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">先啰嗦两句,如果你还不知道Netty是做什么的能做什么。那可以先简单的搜索了解一下。我只能说Netty是一个NIO的框架,可以用于开发分布式的Java程序。具体能做什么,各位可以尽量发挥想象。技术,是服务于人而不是局限住人的。 Netty的简介和下载可参考:开源Java高性能NIO框架推荐。注意,此时的最新版已经为3....</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Log</span><span>·</span><time dateTime="2012-07-05">2012-07-05</time><span>·</span><span>3 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/log4j-console-file-garbled/"><span class="">Log4J 控制台和文件输出乱码问题解决</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">一个小问题,却让我感觉到,现在真正动脑的人很少。。我来说说吧。 今天遇到一个小问题,log4j输出到文件乱码,控制台正常。显然是编码问题导致。Google一搜,几乎一水的说: 项目中log4j在英文版linux下输出中文日志为乱码。由于log4j配置文件中没有设置编码格式(encoding),所以log4j就使用系统默...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Log」筛选博文" href="/tags/Log/">#<!-- -->Log</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dar
1k:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/log4j-console/console-config.png" alt="Log4J 控制台和文件输出乱码问题解决" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->JDK</span><span>·</span><time dateTime="2012-07-04">2012-07-04</time><span>·</span><span>2 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/unexpected-java-nullpointexception/"><span class="">一个容易忽略的Java空指针问题</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">今天有人提出了代码中一个的NullPointException问题。这类问题,很好解决,找到所在行,一看便知。 但是这次,有点意外。抛异常的行,只是一个简单的Pojo的get、set方法。出错的行在 很自然的想到b会为null。但是前面的代码已经用过b了,也就是说,如果b是null。早就抛出空指针了。a是新new的。不...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Netty</span><span>·</span><time dateTime="2012-07-04">2012-07-04</time><span>·</span><span>14 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/netty-object-readwrite/"><span class="">Netty Object传输问题解决</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">使用Netty开发分布式框架,对象的传输是基本的需求。但是,在开发中却总遇到服务端接受不到客户端的对象发送数据。遂动手解决。 如果看到最后,你可能会发现,笔者的问题是那么的二,不适合你。。所以,你可以决定不看,或者只看样例代码。笔者记录的是,个人的解决过程。 先看一下官方提供的,对象传输的样例代码:(核心部分) 代码很...</span></p><div class="flex flex-wrap items-center gap-2 text-xs">
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->JDK</span><span>·</span><time dateTime="2012-06-29">2012-06-29</time><span>·</span><span>3 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/try-finally-plain-java/"><span class="">白话Java - try-finally块</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">本文讲述的是Java中try finally代码块执行顺序,和当其存在于循环中的时候的跳出和执行问题。白话,也要简化,一段代码,来说明问题。 执行结果: 如果还没看明白,那我再啰嗦两句:finally就是最后的,跟try和catch是兄弟,就好像正常人走try分支,走着走着你不正常了,就开始走catch分支,但是不管你...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><div class="my-6 text-center overflow-hidden transition-colors  " style="min-height:90px"><ins class="adsbygoogle block" data-ad-client="ca-pub-7615326632728696" data-ad-slot="9656071817" data-ad-format="fluid" data-full-width-responsive="true"></ins></div><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Maven</span><span>·</span><time dateTime="2012-06-29">2012-06-29</time><span>·</span><span>2 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dar
1k:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/maven-jar-version-conflict/"><span class="">Maven 解决Jar包版本冲突</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">今天遇到一个小问题。在使用apache-commons-codec包进行编码/解码的时候,用到了Base64类的decodeBase64(String base64String)方法,这个方法在1.4版中才提供。而我们的工程中对codec存在两个间接的依赖,一个依赖1.2版本,一个依赖1.4版本,打包后,只有1.2版本...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Maven」筛选博文" href="/tags/Maven/">#<!-- -->Maven</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->JDK</span><span>·</span><time dateTime="2012-06-28">2012-06-28</time><span>·</span><span>3 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/double-nan-plain-java/"><span class="">白话Java - Double.NaN</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">今天处理一个关于Double.NaN的异常。 Unknown column &#x27;NaN&#x27; in &#x27;field list&#x27; NaN = Not a Number。就是不是数字。我们用0/0.0打印出来的结果就是NaN。 JDK的Double类里,提供的NaN的实现是: 如果是非零的数除以0.0,得出的是:Infinity。...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Maven</span><span>·</span><time dateTime="2012-06-27">2012-06-27</time><span>·</span><span>13 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/maven-install-jar-tools/"><span class="">Maven批量安装本地Jar文件小工具</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Maven 批量安装本地 Jar文件到本地Maven库小程序。根据自己的需求临时开发完成。 使用方式: - 在config.properties中,配置待安装jar文件的存放路径。 - 安装时groupId,artifactId,version等信息,根据jar文件的文件名获得。采用分割&quot;-&quot;的方式,解析出来。所以,推...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Maven」筛选博文" href="/tags/Maven/">#<!-- -->Maven</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Maven</span><span>·</span><time dateTime="2012-06-26">2012-06-26</time><span>·</span><span>5 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/maven-lastupdated-delete/"><span class="">Maven库中.lastUpdated文件自动清除工具</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">最近开发过程中,在更新maven库时,如果网络问不定或者是一些自己手动安装到本地maven库的jar包,在中心库找不到对应的jar,会生成一些.lastUpdated文件,会导致m2e工具无法找到依赖的jar包,从而提示编译错误。 对于该问题,我也没有找到很好的解决方案,只能手动删除一下lastUpdated文件。文件...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Maven」筛选博文" href="/tags/Maven/">#<!-- -->Maven</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3">
1<span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->JDK</span><span>·</span><time dateTime="2012-06-25">2012-06-25</time><span>·</span><span>7 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/daemon-thread-plain-words/"><span class="">白话Java - 守护线程</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">关于&quot;白话&quot;, 偶然想到的词。目的就是用简洁,明快的语言来告诉您,我所知道的一切。 Java中的线程分两类,用户线程和守护线程。 这样就是用户线程。 这样就是守护线程。 起了&quot;守护&quot;线程这么动听的名字,自然要起到&quot;守护&quot;的作用。就好比男人要守护妹子。守护线程的作用,按照网上的说法是: 守护线程则是用来服务用户线程的,如...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/daemon-thread/debug-all-live.png" alt="白话Java - 守护线程" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Libvirt</span><span>·</span><time dateTime="2012-06-21">2012-06-21</time><span>·</span><span>39 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/windows-libvirt-api-two/"><span class="">Windows下Libvirt Java API使用教程(二)- 接口使用说明</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">介绍完&lt;a href=&quot;http://www.coderli.com/windows-libvirt-one&quot; target=&quot;/blank&quot;libvirt Java API的部署工作&lt;/a,接下来我们就介绍一下接口的使用和代码样例。 libvirt的管理单位是单个主机,所以探测和监控接口所能获取的信息的最大范围也是主...</span></p><div class="flex flex-wrap items-center gap-2 text-xs">
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Libvirt」筛选博文" href="/tags/Libvirt/">#<!-- -->Libvirt</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Libvirt</span><span>·</span><time dateTime="2012-06-19">2012-06-19</time><span>·</span><span>11 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/windows-libvirt-one/"><span class="">Windows下Libvirt Java API使用教程 - 开发环境部署</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">&lt;a href=&quot;http://libvirt.org/&quot; target=&quot;\blank&quot;Libvirt&lt;/a是一个优秀的虚拟化环境管理的工具包。核心用c实现,不过提供了不同语言的调用API。官网的简介如下: libvirt is: - A toolkit to interact with the virtualiza...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Libvirt」筛选博文" href="/tags/Libvirt/">#<!-- -->Libvirt</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/windows-libvirt/libvirt-cmd.jpg" alt="Windows下Libvirt Java API使用教程 - 开发环境部署" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Jar</span><span>·</span><time dateTime="2012-06-16">2012-06-16</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/runnablejar-to-exe/"><span class="">教你打包Java程序,jar转exe随处可跑</span></a></h3>
1<p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">发现很多人问如何把Jar转成exe程序。可能是想双击运行和随处运行。其实这个并不难,我就简单总结几种方法,供大家参考,关键还是要知其所以然。 Java程序的运行不可能脱离JRE,不管你是Jar包还是exe程序。这点你必须了解。那么在没有JRE的机器上你的程序怎么跑?很简单,在你程序里带一份JRE就行了。 先介绍集中打包...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/jar-to-exe/export.jpg" alt="教你打包Java程序,jar转exe随处可跑" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->JDK</span><span>·</span><time dateTime="2012-06-14">2012-06-14</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/null-string/"><span class="">未初始化的String相 &quot;+&quot; 为什么会打印出“nullnull&quot;</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">今天在我的一个qq群里有人问了这样一个问题。 输出是nullnull。问为什么是这样。 其实问题并不复杂,很多同学也觉得自己知道原因,遂不予关注。但是我相信还是有初学Java的同学在这里是存在误会的。很典型的误会就是如一个群里的朋友说的String类型的变量如果没有显示初始化,默认的值就是&quot;null&quot;。支持的理由就是...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Log</span><span>·</span><time dateTime="2012-06-14">2012-06-14</time><span>·</span><span>2 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/logback-pattern-caller/"><span class="">Logback控制台输出类名行号带链接的Pattern配置</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">从log4j切换到logback会发现,原来在log4j使用的日志格式 %l 的功能不见了。Eclipse控制台的输出,不再带有可快速进入的链接了。 在logback里,需要使用%c%L才能打印出完整的类路径和行号。但是却没有链接。查阅了一下,发现了caller这个Pattern。配置好caller:%caller{1...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Logback」筛选博文" href="/tags/Logback/">#<!-- -->Logback</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/logback-console-link/console.jpg" alt="Logback控制台输出类名行号带链接的Pattern配置" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->JUnit</span><span>·</span><time dateTime="2012-06-13">2012-06-13</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/multi-thread-junit-grobountils/"><span class="">教你快速写出多线程Junit单元测试用例 - GroboUtils</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">写过Junit单元测试的同学应该会有感觉,Junit本身是不支持普通的多线程测试的,这是因为Junit的底层实现上,是用System.exit退出用例执行的。JVM都终止了,在测试线程启动的其他线程自然也无法执行。JunitCore代码如下 RealSystem: 所以要想编写多线程Junit测试用例,就必须让主线程等...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Groboutils」筛选博文" href="/tags/Groboutils/">#<!-- -->Groboutils</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#JUnit」筛选博文" href="/tags/JUnit/">#<!-- -->JUnit</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dar
1k:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Maven</span><span>·</span><time dateTime="2012-06-11">2012-06-11</time><span>·</span><span>3 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/maven-compile-wildcode-resolve/"><span class="">Maven编译报错乱码问题和编译问题解决</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">最近需要用Maven打包工程,却不想遇到乱码问题。在Eclipse中通过Maven Plugin执行install 命令报错如下: [ERROR] Failure executing javac, but could not parse the error:&quot;一串乱码&quot; 错误信息都是乱码,问题解决起来就头疼了。所以决定...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Maven」筛选博文" href="/tags/Maven/">#<!-- -->Maven</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/maven-compile-encode/language-setting.jpg" alt="Maven编译报错乱码问题和编译问题解决" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Spring</span><span>·</span><time dateTime="2012-06-10">2012-06-10</time><span>·</span><span>38 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/spring-wildpath-parse/"><span class="">Spring源码学习-含有通配符路径解析(上)</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">继续前文&lt;a href=&quot;http://www.coderli.com/spring-filesystem-filepath-parse/&quot; target=&quot;blank&quot;《[原创] Spring源码学习-FileSystemXmlApplicationContext路径格式及解析方式》&lt;/a的问题。 先测试分析包含通配...</span></p><div class="flex flex-wrap items-center gap-2 text-xs">
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Spring」筛选博文" href="/tags/Spring/">#<!-- -->Spring</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Spring</span><span>·</span><time dateTime="2012-06-09">2012-06-09</time><span>·</span><span>19 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/spring-filesystem-filepath-parse/"><span class="">Spring源码学习-FileSystemXmlApplicationContext路径格式及解析方式</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">了解完了FileSystemXmlApplicationContext构造函数,我们来看看路径解析的问题。 - 支持路径格式的研究。(绝对?相对?通配符?classpath格式又如何? - 路径如何解析? 下面,我们就来一一验证和解答。先放出本次测试用的配置文件(app-context.xml和test.propert...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Spring」筛选博文" href="/tags/Spring/">#<!-- -->Spring</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/springframework-filepath-parse/springsequence-filepath.jpg" alt="Spring源码学习-FileSystemXmlApplicationContext路径格式及解析方式" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Spring</span><span>·</span><time dateTime="2012-06-07">2012-06-07</time><span>·</span><span>20 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/spring-filexml-constructor/"><span class="">
1Spring研究-容器初始化之FileSystemXmlApplicationContext构造函数</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">宅男Coder,没有其他爱好,闲暇之余抱着瞻仰的心态去阅读一下Spring的源码,期许能收获一支半解。要学习Spring的源码,第一步自然是下载和编译Spring的源码,这个我在之前的博文中已经发表过了。具体可参考:&lt;a href=&quot;http://www.coderli.com/springframework-sour...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Spring」筛选博文" href="/tags/Spring/">#<!-- -->Spring</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><div class="my-6 text-center overflow-hidden transition-colors  " style="min-height:90px"><ins class="adsbygoogle block" data-ad-client="ca-pub-7615326632728696" data-ad-slot="9656071817" data-ad-format="fluid" data-full-width-responsive="true"></ins></div><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Hibernate</span><span>·</span><time dateTime="2012-06-06">2012-06-06</time><span>·</span><span>2 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/hibernate-source-compile/"><span class="">Hibernate4.0源码下载和编译教程</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">废话不多说,直接进入主题。首先是下载源码,跟spring一样,hibernate也采用git管理。 - git://github.com/hibernate/hibernate-orm.git 下载后,hiberante同样也是采用了gradle进行编译,所以同样同之前说的spring的编译, 参考阅读: - &lt;a h...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Hibernate」筛选博文" href="/tags/Hibernate/">#<!-- -->Hibernate</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Netty</span><span>·</span><time dateTime="2012-06-05">2012-06-05</time><span>·</span><span>2 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/opensource-netty-intro/"><span class="">开源Java高性能NIO框架推荐 - Netty</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">作为一个Java程序员,多方面的知识储备是相当重要的。面对各种的情况,都有自己的解决方案也是一种能力的体现。Java优秀的开源项目很多,除了传统的SSH,作为一个Java程序员,你应该知道的更多:) Netty简介 Netty 是一个异步的,事件驱动的网络编程框架和工具,使用Netty可以快速开发出可维护的,高性能、高...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Netty」筛选博文" href="/tags/Netty/">#<!-- -->Netty</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Spring</span><span>·</span><time dateTime="2012-06-02">2012-06-02</time><span>·</span><span>3 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/springframework-source-compile/"><span class="">SpringFramework3 源码下载和编译教程</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Spring已经将源码从svn迁移到了git。所以,首先需要安装git环境。我使用的是Windows下的TortoiseGit,带图形界面,比较直观。 SpringFramework的GitHub地址:https://github.com/SpringSource/spring-framework Git clone地...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Spring」筛选博文" href="/tags/Spring/">#<!-- -->Spring</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3">
1<span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Eclipse</span><span>·</span><time dateTime="2012-06-02">2012-06-02</time><span>·</span><span>10 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/eclipse-template-variable/"><span class="">Eclipse使用技巧 - 自定义注释模板变量</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">Eclipse的代码注释模板很丰富,如:user、year、date、time等等,请参考附件。 尽管模板变量如此之多,但是对于复杂多边的实际项目而言,还是不够用,怎么办?自己增加新的呗! Eclipse配置界面都不支持定制自己的注释模板变量,没办法,改Eclipse源码。 具体怎么改,好像无头苍蝇,百度和谷歌了2天,...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Eclipse」筛选博文" href="/tags/Eclipse/">#<!-- -->Eclipse</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Eclipse</span><span>·</span><time dateTime="2012-06-02">2012-06-02</time><span>·</span><span>3 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/eclipse-javadoc-template/"><span class="">Eclipse使用技巧 - 自定义JavaDoc注解和代码模版,提升开发效率和规范性</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">项目中对于注释和代码规范的要求往往是毕比较严格的,如果全靠手动完成效率低,还难以保证保证的规范。幸好Eclipse给我们提供了自定义代码模版的功能。 先说一下Java代码注释模版,它是指这里的配置: 是不是跟你的不一样,多了@author和@date。恩,这是我自定义过的注释模版。效果是在给方法用/注释内容/,注释的时...</span></p><div class="flex flex-wrap items-center gap-2 text-xs">
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Eclipse」筛选博文" href="/tags/Eclipse/">#<!-- -->Eclipse</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Javadoc」筛选博文" href="/tags/Javadoc/">#<!-- -->Javadoc</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><img src="/images/post/eclipse-javadoc/1codetemplate.jpg" alt="Eclipse使用技巧 - 自定义JavaDoc注解和代码模版,提升开发效率和规范性" class="w-full h-full object-cover group-hover:scale-105 transition duration-300" loading="lazy"/></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2012-06-01">2012-06-01</time><span>·</span><span>5 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/to-java-coder/"><span class="">写给同路的Java Coder们</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">写在前面:一年前的某一天,在coder前面加上苦逼二字,聊以自嘲。却不曾想苦逼二字如今与IT如影随形。突觉感慨连连,遂成此杂文,记录心情。 关于我 性格里,不喜表露内心,所以一直以来博客,都是分享技术,从未描绘内心。不爱指点江山,评头论足。深以为自己没资历,没资格评判。粗浅的阅历,更谈不上任何指导意义,避免一切的误导和...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2012-05-31">2012-05-31</time><span>·</span><span>10 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/priority-queue/"><span class="">优先级队列 - Java实现</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">优先级队列,是堆数据结构的典型应用。优先级队列的一个典型应用,就是排队任务的有限调度,当一个任务结束后,优先执行当前优先级最高的任务。队列一个任务是,调用INSERT方法。</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#排序」筛选博文" href="/tags/%E6%8E%92%E5%BA%8F/">#<!-- -->排序</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#算法」筛选博文" href="/tags/%E7%AE%97%E6%B3%95/">#<!-- -->算法</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2012-05-31">2012-05-31</time><span>·</span><span>10 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/merge-sort/"><span class="">合并排序 - Java实现</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a>
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#排序」筛选博文" href="/tags/%E6%8E%92%E5%BA%8F/">#<!-- -->排序</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#算法」筛选博文" href="/tags/%E7%AE%97%E6%B3%95/">#<!-- -->算法</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2012-05-30">2012-05-30</time><span>·</span><span>4 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/select-sort/"><span class="">选择排序 - Java实现</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#排序」筛选博文" href="/tags/%E6%8E%92%E5%BA%8F/">#<!-- -->排序</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#算法」筛选博文" href="/tags/%E7%AE%97%E6%B3%95/">#<!-- -->算法</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2012-05-30">2012-05-30</time><span>·</span><span>3 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/quick-sort/"><span class="">快速排序 - Java实现</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#排序」筛选博文" href="/tags/%E6%8E%92%E5%BA%8F/">#<!-- -->排序</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#算法」筛选博文" href="/tags/%E7%AE%97%E6%B3%95/">#<!-- -->算法</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Log</span><span>·</span><time dateTime="2012-05-30">2012-05-30</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/logback-slf4j/"><span class="">slf4j+logback配置方式和logback.groovy配置文件</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">最近看到slf4j+logback的日志方案,并且介绍说,与log4j出自同一作者且做了不少优化,所以决定从commons-logging+log4j切换过来。 logback官网:(该作者即为log4j的作者)http://logback.qos.ch/ 切换方式非常简单,在原有基础上加入如下jar包即可。 slf4...</sp
1an></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Logback」筛选博文" href="/tags/Logback/">#<!-- -->Logback</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#SLF4J」筛选博文" href="/tags/SLF4J/">#<!-- -->SLF4J</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2012-05-30">2012-05-30</time><span>·</span><span>4 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/insert-sort/"><span class="">插入排序 - Java实现</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#排序」筛选博文" href="/tags/%E6%8E%92%E5%BA%8F/">#<!-- -->排序</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#算法」筛选博文" href="/tags/%E7%AE%97%E6%B3%95/">#<!-- -->算法</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2">
1<span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2012-05-30">2012-05-30</time><span>·</span><span>6 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/heap-sort/"><span class="">堆排序 - Java实现</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#排序」筛选博文" href="/tags/%E6%8E%92%E5%BA%8F/">#<!-- -->排序</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#算法」筛选博文" href="/tags/%E7%AE%97%E6%B3%95/">#<!-- -->算法</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->架构实践</span><span>·</span><time dateTime="2012-05-30">2012-05-30</time><span>·</span><span>7 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/heap-merge-array/"><span class="">利用堆合并数组- Java实现</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#排序」筛选博文" href="/tags/%E6%8E%92%E5%BA%8F/">#<!-- -->排序</a>
1<a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#算法」筛选博文" href="/tags/%E7%AE%97%E6%B3%95/">#<!-- -->算法</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->JDK</span><span>·</span><time dateTime="2012-05-29">2012-05-29</time><span>·</span><span>3 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/win764-jdk/"><span class="">Win7 64位环境下JDK和Eclipse的选择与安装</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">现在无论笔记本还是台式机的内存都已经是白菜价,4G以上的内存配置随处可见。我最近也将笔记本的内存升至8G,自然想更好的支持大容量内存,安装64系统成了必要的选择。就个人的使用情况来看,基本没发现什么常用软件对64位win7有不兼容的情况,使用良好。 回到正题,作为一个coder,开发环境自然必须搭建。64位系统下,最常...</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Eclipse」筛选博文" href="/tags/Eclipse/">#<!-- -->Eclipse</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#JDK」筛选博文" href="/tags/JDK/">#<!-- -->JDK</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Windows」筛选博文" href="/tags/Windows/">#<!-- -->Windows</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><div class="my-6 text-center overflow-hidden transition-colors  " style="min-height:90px">
1<ins class="adsbygoogle block" data-ad-client="ca-pub-7615326632728696" data-ad-slot="9656071817" data-ad-format="fluid" data-full-width-responsive="true"></ins></div><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->JDK</span><span>·</span><time dateTime="2012-05-29">2012-05-29</time><span>·</span><span>11 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/jar-classloader/"><span class="">Java文件读取 jar包内文件读取</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">最近遇到一些Jar包内外配置文件读取的问题。索性自己测试总结一下,与大家分享。 主要是关于ClassLoader.getResource和Class.getResource方法路径区别的问题。</span></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Classloader」筛选博文" href="/tags/Classloader/">#<!-- -->Classloader</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article><article class="group bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800/80 rounded-xl p-5 md:p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-teal-500/50 hover:shadow-md flex flex-col md:flex-row gap-5 items-start md:items-center justify-between"><div class="flex-1 min-w-0"><div class="flex items-center gap-2 text-[13px] text-slate-400 mb-2"><span class="font-semibold text-teal-600 dark:text-teal-400 bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded border border-teal-500/20">Java 架构演进与实战<!-- --> · <!-- -->Spring</span><span>·</span><time dateTime="2012-05-29">2012-05-29</time><span>·</span><span>10 分钟</span></div><h3 class="text-xl md:text-[22px] font-bold text-slate-900 dark:text-slate-100 group-hover:text-teal-600 dark:group-hover:text-teal-400 transition leading-snug mb-2.5"><a class="block" href="/asm-fieldvalue/"><span class="">Java 利用ASM读取变量值(Field value)问题研究</span></a></h3><p class="text-[15px] md:text-base text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-2 mb-3.5"><span class="">最近在学习Spring源码的过程中,遇到了spring-asm工程的重新打包的问题,于是突然就想研究一下asm这个开源字节码操作工具。秉承我的一贯风格,想到啥就立马学啥。 对于开源产品,我的一贯风格就是通过其官方提供的源码版本管理地址(svn/git等),直接下载最新代码,构建Java工程,直接通过工程依赖的方式研究学...</sp
1an></p><div class="flex flex-wrap items-center gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#ASM」筛选博文" href="/tags/ASM/">#<!-- -->ASM</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Spring」筛选博文" href="/tags/Spring/">#<!-- -->Spring</a><a class="px-2.5 py-1 rounded-lg bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 font-mono text-xs hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent transition cursor-pointer" title="按标签「#Java」筛选博文" href="/tags/Java/">#<!-- -->Java</a></div></div><div class="w-full md:w-36 h-28 rounded-lg overflow-hidden border border-slate-200 dark:border-slate-800 bg-slate-100 dark:bg-slate-800/50 flex-shrink-0 flex items-center justify-center relative"><div class="text-center p-3"><span class="text-xl font-mono font-extrabold text-teal-600 dark:text-teal-400 block mb-0.5">{ } Java</span><span class="text-[10px] text-slate-500 dark:text-slate-400 block line-clamp-1">Java 服务端架构</span></div></div></article></div></div></div><aside class="sticky top-20 space-y-6"><div class="bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800 rounded-2xl p-5 shadow-sm"><h4 class="font-bold text-base text-slate-900 dark:text-slate-100 mb-3.5 pb-2.5 border-b border-slate-100 dark:border-slate-800">其他核心专题</h4><div class="space-y-1.5 text-[15px]"><a class="flex items-center justify-between p-2.5 rounded-xl hover:bg-slate-50 dark:hover:bg-slate-800/80 text-slate-700 dark:text-slate-200 transition font-medium" href="/topics/gesp/"><span>🏆<!-- --> <!-- -->GESP 考级真题专栏</span><span class="font-mono text-teal-600 dark:text-teal-400 font-bold text-sm bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded-md border border-teal-500/20">609<!-- --> 篇</span></a><a class="flex items-center justify-between p-2.5 rounded-xl hover:bg-slate-50 dark:hover:bg-slate-800/80 text-slate-700 dark:text-slate-200 transition font-medium" href="/topics/csp/"><span>⌘<!-- --> <!-- -->CSP / NOIP 信奥竞赛</span><span class="font-mono text-teal-600 dark:text-teal-400 font-bold text-sm bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded-md border border-teal-500/20">15<!-- --> 篇</span></a><a class="flex items-center justify-between p-2.5 rounded-xl hover:bg-slate-50 dark:hover:bg-slate-800/80 text-slate-700 dark:text-slate-200 transition font-medium" href="/topics/algo/"><span>🧮<!-- --> <!-- -->算法专题与 LeetCode</span><span class="font-mono text-teal-600 dark:text-teal-400 font-bold text-sm bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded-md border border-teal-500/20">49<!-- --> 篇</span></a><a class="flex items-center justify-between p-2.5 rounded-xl hover:bg-slate-50 dark:hover:bg-slate-800/80 text-slate-700 dark:text-slate-200 transition font-medium" href="/topics/python-data/"><span>🐍<!-- --> <!-- -->Python 与数据工程</span><span class="font-mono text-teal-600 dark:text-teal-400 font-bold text-sm bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded-md border border-teal-500/20">112<!-- --> 篇</span></a></div></div><div class="my-6 text-center overflow-hidden transition-colors  " style="min-height:250px"><ins class="adsbygoogle block" data-ad-client="ca-pub-7615326632728696" data-ad-slot="6734143049" data-ad-format="auto" data-full-width-responsive="true"></ins></div><div class="bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800 rounded-2xl p-5 shadow-sm"><div class="font-bold text-base text-slate-900 dark:text-slate-100 mb-3.5 pb-2.5 border-b border-slate-100 dar
1k:border-slate-800 flex items-center justify-between"><span class="flex items-center gap-1.5"><span>🔥</span><span>热门技术标签</span></span><a class="text-xs text-teal-600 dark:text-teal-400 hover:underline font-medium" href="/tags/">全部 (<!-- -->281<!-- -->) →</a></div><div class="flex flex-wrap gap-2 text-xs"><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#C++」相关的 614 篇博文" href="/tags/C%2B%2B/"><span>#<!-- -->C++</span><span class="text-[10px] text-slate-400 dark:text-slate-500">614</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#GESP」相关的 564 篇博文" href="/tags/GESP/"><span>#<!-- -->GESP</span><span class="text-[10px] text-slate-400 dark:text-slate-500">564</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#基础语句」相关的 139 篇博文" href="/tags/%E5%9F%BA%E7%A1%80%E8%AF%AD%E5%8F%A5/"><span>#<!-- -->基础语句</span><span class="text-[10px] text-slate-400 dark:text-slate-500">139</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#Java」相关的 91 篇博文" href="/tags/Java/"><span>#<!-- -->Java</span><span class="text-[10px] text-slate-400 dark:text-slate-500">91</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#多重循环」相关的 77 篇博文" href="/tags/%E5%A4%9A%E9%87%8D%E5%BE%AA%E7%8E%AF/"><span>#<!-- -->多重循环</span><span class="text-[10px] text-slate-400 dark:text-slate-500">77</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#LeetCode」相关的 73 篇博文" href="/tags/LeetCode/"><span>#<!-- -->LeetCode</span><span class="text-[10px] text-slate-400 dark:text-slate-500">73</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#CSP」相关的 68 篇博文" href="/tags/CSP/"><span>#<!-- -->CSP</span><span class="text-[10px] text-slate-400 dark:text-slate-500">68</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#考试大纲」相关的 66 篇博文" href="/tags/%E8%80%83%E8%AF%95%E5%A4%A7%E7%BA%B2/"><span>#<!-- -->考试大纲</span><span class="text-[10px] text-slate-400 dark:text-slate-500">66</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dar
1k:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#Python」相关的 64 篇博文" href="/tags/Python/"><span>#<!-- -->Python</span><span class="text-[10px] text-slate-400 dark:text-slate-500">64</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#字符串」相关的 51 篇博文" href="/tags/%E5%AD%97%E7%AC%A6%E4%B8%B2/"><span>#<!-- -->字符串</span><span class="text-[10px] text-slate-400 dark:text-slate-500">51</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#一维数组」相关的 45 篇博文" href="/tags/%E4%B8%80%E7%BB%B4%E6%95%B0%E7%BB%84/"><span>#<!-- -->一维数组</span><span class="text-[10px] text-slate-400 dark:text-slate-500">45</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#排序」相关的 34 篇博文" href="/tags/%E6%8E%92%E5%BA%8F/"><span>#<!-- -->排序</span><span class="text-[10px] text-slate-400 dark:text-slate-500">34</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#贪心」相关的 33 篇博文" href="/tags/%E8%B4%AA%E5%BF%83/"><span>#<!-- -->贪心</span><span class="text-[10px] text-slate-400 dark:text-slate-500">33</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#计算机科学基础」相关的 30 篇博文" href="/tags/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A7%91%E5%AD%A6%E5%9F%BA%E7%A1%80/"><span>#<!-- -->计算机科学基础</span><span class="text-[10px] text-slate-400 dark:text-slate-500">30</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#科普」相关的 29 篇博文" href="/tags/%E7%A7%91%E6%99%AE/"><span>#<!-- -->科普</span><span class="text-[10px] text-slate-400 dark:text-slate-500">29</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#CSP-J」相关的 27 篇博文" href="/tags/CSP-J/"><span>#<!-- -->CSP-J</span><span class="text-[10px] text-slate-400 dark:text-slate-500">27</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#真题」相关的 27 篇博文" href="/tags/%E7%9C%9F%E9%A2%98/"><span>#<!-- -->真题</span><span class="text-[10px] text-slate-400 dark:text-slate-500">27</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dar
1k:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#洛谷」相关的 25 篇博文" href="/tags/%E6%B4%9B%E8%B0%B7/"><span>#<!-- -->洛谷</span><span class="text-[10px] text-slate-400 dark:text-slate-500">25</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#NOIP」相关的 24 篇博文" href="/tags/NOIP/"><span>#<!-- -->NOIP</span><span class="text-[10px] text-slate-400 dark:text-slate-500">24</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#Netty」相关的 24 篇博文" href="/tags/Netty/"><span>#<!-- -->Netty</span><span class="text-[10px] text-slate-400 dark:text-slate-500">24</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#MySQL」相关的 24 篇博文" href="/tags/MySQL/"><span>#<!-- -->MySQL</span><span class="text-[10px] text-slate-400 dark:text-slate-500">24</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#动态规划」相关的 22 篇博文" href="/tags/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/"><span>#<!-- -->动态规划</span><span class="text-[10px] text-slate-400 dark:text-slate-500">22</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#一起学Java」相关的 22 篇博文" href="/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/"><span>#<!-- -->一起学Java</span><span class="text-[10px] text-slate-400 dark:text-slate-500">22</span></a><a class="px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent" title="查看「#数学函数」相关的 21 篇博文" href="/tags/%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0/"><span>#<!-- -->数学函数</span><span class="text-[10px] text-slate-400 dark:text-slate-500">21</span></a></div></div></aside></div></div></main><footer class="mt-24 border-t border-slate-200 dark:border-slate-800 bg-white dark:bg-slate-950/60 py-10 transition-colors"><div class="max-w-[var(--container-max-width)] mx-auto px-4 md:px-8 flex flex-col md:flex-row items-center justify-between gap-6 text-sm text-slate-500"><div><p class="font-medium text-slate-800 dark:text-slate-200">© 2012–2026 <strong>OneCoder</strong> · 保持好奇,认真记录。</p></div><div class="flex items-center gap-6 text-xs"><a target="_blank" class="hover:text-teal-600 dark:hover:text-teal-400 transition" href="https://github.com/lihongzheshuai">GitHub ↗</a><a target="_blank" class="hover:text-teal-600 dark:hover:text-teal-400 transition" href="https://twitter.com/wushikezuohehe">Twitter/X ↗</a><a href="https://qm.qq.com/q/fykBPjH8ru" target="_blank" rel="noopener noreferrer" class="hover:text-teal-600 dar
1k:hover:text-teal-400 transition">QQ交流群 ↗</a><a target="_blank" class="hover:text-teal-600 dark:hover:text-teal-400 transition" href="https://wiki.coderli.com/">GESP WIKI ↗</a><button class="px-3 py-1.5 rounded-md border border-slate-200 dark:border-slate-800 hover:border-teal-500 text-slate-600 dark:text-slate-400 transition">回到顶部 ↑</button></div></div></footer><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$--><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$-->
1<script src="/_next/static/chunks/webpack-c13df28283053ad7.js" async=""></script>
1<script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script>
1<script>self.__next_f.push([1,"1:HL[\"/_next/static/css/87dfc6598b12eeb9.css\",\"style\"]\n2:HL[\"/_next/static/css/8be92eda0d914e56.css\",\"style\"]\n"])</script>
1<script>self.__next_f.push([1,"3:I[2517,[],\"\"]\n5:I[6169,[\"767\",\"static/chunks/cdfede43-0eb4616c36bac96e.js\",\"699\",\"static/chunks/699-51981c2e37ffc06e.js\",\"730\",\"static/chunks/app/topics/%5Btopic%5D/page-1b532aedb5b949e3.js\"],\"\"]\n6:I[4514,[\"767\",\"static/chunks/cdfede43-0eb4616c36bac96e.js\",\"699\",\"static/chunks/699-51981c2e37ffc06e.js\",\"730\",\"static/chunks/app/topics/%5Btopic%5D/page-1b532aedb5b949e3.js\"],\"default\"]\n7:I[6339,[\"767\",\"static/chunks/cdfede43-0eb4616c36bac96e.js\",\"699\",\"static/chunks/699-51981c2e37ffc06e.js\",\"730\",\"static/chunks/app/topics/%5Btopic%5D/page-1b532aedb5b949e3.js\"],\"default\"]\n8:I[4630,[],\"\"]\na:I[7778,[],\"\"]\nb:I[3754,[\"767\",\"static/chunks/cdfede43-0eb4616c36bac96e.js\",\"699\",\"static/chunks/699-51981c2e37ffc06e.js\",\"181\",\"static/chunks/181-7005c4c81a18e79a.js\",\"185\",\"static/chunks/app/layout-0bd8d7dd89e7861b.js\"],\"\"]\nc:I[8533,[\"767\",\"static/chunks/cdfede43-0eb4616c36bac96e.js\",\"699\",\"static/chunks/699-51981c2e37ffc06e.js\",\"181\",\"static/chunks/181-7005c4c81a18e79a.js\",\"185\",\"static/chunks/app/layout-0bd8d7dd89e7861b.js\"],\"default\"]\nd:I[5649,[\"767\",\"static/chunks/cdfede43-0eb4616c36bac96e.js\",\"699\",\"static/chunks/699-51981c2e37ffc06e.js\",\"181\",\"static/chunks/181-7005c4c81a18e79a.js\",\"185\",\"static/chunks/app/layout-0bd8d7dd89e7861b.js\"],\"default\"]\ne:I[2583,[\"767\",\"static/chunks/cdfede43-0eb4616c36bac96e.js\",\"699\",\"static/chunks/699-51981c2e37ffc06e.js\",\"181\",\"static/chunks/181-7005c4c81a18e79a.js\",\"185\",\"static/chunks/app/layout-0bd8d7dd89e7861b.js\"],\"default\"]\nf:I[9669,[\"767\",\"static/chunks/cdfede43-0eb4616c36bac96e.js\",\"699\",\"static/chunks/699-51981c2e37ffc06e.js\",\"181\",\"static/chunks/181-7005c4c81a18e79a.js\",\"185\",\"static/chunks/app/layout-0bd8d7dd89e7861b.js\"],\"default\"]\n10:I[6356,[\"767\",\"static/chunks/cdfede43-0eb4616c36bac96e.js\",\"699\",\"static/chunks/699-51981c2e37ffc06e.js\",\"181\",\"static/chunks/181-7005c4c81a18e79a.js\",\"185\",\"static/chunks/app/layout-0bd8d7dd89e7861b.js\"],\"default\"]\n11:I[8321,[\"767\",\"static/chunks/cdfede43-0eb4616c36bac96e.js\",\"699\",\"static/chunks/699-51981c2e37ffc06e.js\",\"181\",\"static/chunks/181-7005c"])</script>
1<script>self.__next_f.push([1,"4c81a18e79a.js\",\"185\",\"static/chunks/app/layout-0bd8d7dd89e7861b.js\"],\"Analytics\"]\n12:I[2775,[\"767\",\"static/chunks/cdfede43-0eb4616c36bac96e.js\",\"699\",\"static/chunks/699-51981c2e37ffc06e.js\",\"181\",\"static/chunks/181-7005c4c81a18e79a.js\",\"185\",\"static/chunks/app/layout-0bd8d7dd89e7861b.js\"],\"SpeedInsights\"]\n14:I[332,[],\"\"]\n9:[\"topic\",\"java\",\"d\"]\n15:[]\n"])</script>
1<script>self.__next_f.push([1,"0:[\"$\",\"$L3\",null,{\"buildId\":\"UzD4D_xtvDCVgqS0KJJn8\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"topics\",\"java\",\"\"],\"initialTree\":[\"\",{\"children\":[\"topics\",{\"children\":[[\"topic\",\"java\",\"d\"],{\"children\":[\"__PAGE__?{\\\"topic\\\":\\\"java\\\"}\",{}]}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"topics\",{\"children\":[[\"topic\",\"java\",\"d\"],{\"children\":[\"__PAGE__\",{},[[\"$L4\",[\"$\",\"div\",null,{\"className\":\"max-w-[var(--container-max-width)] mx-auto px-4 md:px-8 py-8\",\"children\":[[\"$\",\"nav\",null,{\"className\":\"flex items-center gap-2 text-xs text-slate-400 mb-6\",\"children\":[[\"$\",\"$L5\",null,{\"href\":\"/\",\"className\":\"hover:text-teal-500\",\"children\":\"首页\"}],[\"$\",\"span\",null,{\"children\":\"/\"}],[\"$\",\"span\",null,{\"children\":\"专题专栏\"}],[\"$\",\"span\",null,{\"children\":\"/\"}],[\"$\",\"span\",null,{\"className\":\"text-slate-600 dark:text-slate-300 font-medium\",\"children\":\"Java 架构演进与实战\"}]]}],[\"$\",\"div\",null,{\"className\":\"bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800 rounded-2xl p-8 mb-8 shadow-sm\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-3 text-2xl md:text-3xl font-extrabold text-slate-900 dark:text-slate-100 mb-2\",\"children\":[[\"$\",\"span\",null,{\"children\":\"☕\"}],[\"$\",\"h1\",null,{\"children\":\"Java 架构演进与实战\"}],[\"$\",\"span\",null,{\"className\":\"text-xs font-mono font-bold bg-teal-50 dark:bg-teal-950 text-teal-600 dark:text-teal-400 px-2.5 py-1 rounded-full border border-teal-500/20\",\"children\":[187,\" 篇\"]}]]}],[\"$\",\"p\",null,{\"className\":\"text-sm text-slate-600 dark:text-slate-400 max-w-3xl leading-relaxed\",\"children\":\"系统梳理 Java 基础、Log 日志门面演进、Spring 核心、Netty 高性能网络通信与 JVM 字节码研究。\"}]]}],[\"$\",\"div\",null,{\"className\":\"grid grid-cols-1 lg:grid-cols-[minmax(0,1fr)_320px] gap-8 items-start\",\"children\":[[\"$\",\"div\",null,{\"children\":[\"$\",\"$L6\",null,{\"posts\":[{\"id\":\"java-go-22-jdk-string-utf16\",\"slug\":\"java-go-22-jdk-string-utf16\",\"filename\":\"2024-12-22-java-go-22-jdk-string-utf16.md\",\"title\":\"一起学Java(22)-[JDK篇]学习Java中String的字符编码和代理对机制\",\"date\":\"2024-12-22\",\"author\":\"onecoder\",\"categories\":[\"一起学Java系列\",\"(3)JDK篇\"],\"tags\":[\"Java\",\"JDK\",\"一起学Java\"],\"readTime\":\"17 分钟\",\"excerpt\":\"上文《一起学Java(21)-[配置篇]Gradle控制台乱码问题配置和解决》中,我们解决了Gradle控制台字符乱码问题,这个问题实际是在研究Java String的字符编码机制时产生的。本文回归正题,研究下Java中String的字符编码和代理对机制。\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"(3)JDK篇\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-go-21-gradle-idea-console-garbled\",\"slug\":\"java-go-21-gradle-idea-console-garbled\",\"filename\":\"2024-12-17-java-go-21-gradle-idea-console-garbled.md\",\"title\":\"一起学Java(21)-[配置篇]Gradle控制台乱码问题配置和解决\",\"date\":\"2024-12-17\",\"author\":\"onecoder\",\"categories\":[\"一起学Java系列\",\"(5)配置篇\"],\"tags\":[\"Java\",\"Gradle\",\"一起学Java\"],\"readTime\":\"9 分钟\",\"excerpt\":\"在《一起学Java(18)-[配置篇]一个诡异(有趣)的Gradle Wrapper问题》中,我们解决了一个有趣的Gradle Wrapper使用问题,这次我们在研究Java String编码的时候,又遇到了Gradle使用中的控制台乱码问题,遂记录并分享问题的现象和解决的过程。\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"(5)配置篇\",\"previewImg\":\"/images/post/java-go-21/java-build-and-run.png\",\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-go-20-test-jacoco-config\",\"slug\":\"java-go-20-test-jacoco-config\",\"filename\":\"2024-12-02-java-go-20-test-jacoco-config.md\",\"title\":\"一起学Java(20)-[测试篇]教你通过Gradle配置和使用JaCoCo单元测试覆盖率检查工具\",\"date\":\"2024-12-02\",\"author\":\"onecoder\",\"categories\":[\"一起学Java系列\",\"(4)测试篇\"],\"tags\":[\"Java\",\"单元测试\",\"Gradle\",\"JaCoCo\",\"一起学Java\"],\"readTime\":\"10 分钟\",\"excerpt\":\"在《一起学Java(19)-[测试篇]教你通过Gradle配置和使用JUnit5》中,我们引入了JUnit5单元测试框架。在进行单元测试时,我们不仅要关注测试的正确性和完整性,还要关注测试的覆盖率。覆盖率反映了测试用例对代码的覆盖程度,能够帮助我们发现潜在的测试盲区,确保代码的每个部分都得到了适当的验证。 为了更好地分...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"(4)测试篇\",\"previewImg\":\"/images/post/java-go-20/jacoco-report.png\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-go-19-test-junit5-config\",\"slug\":\"java-go-19-test-junit5-config\",\"filename\":\"2024-11-26-java-go-19-test-junit5-config.md\",\"title\":\"一起学Java(19)-[测试篇]教你通过Gradle配置和使用JUnit5\",\"date\":\"2024-11-26\",\"author\":\"onecoder\",\"categories\":[\"一起学Java系列\",\"(4)测试篇\"],\"tags\":[\"Java\",\"单元测试\",\"Gradle\",\"JUni5\",\"一起学Java\"],\"readTime\":\"14 分钟\",\"excerpt\":\"前文已详细介绍了JUnit框架的特点以及JUnit5和JUnit4版本的核心差异(《一起学Java(17)-[测试篇]教你认识Java单元测试框架JUnit,JUnit5和JUnit4区别详解》)。本文将进入应用实战,详细介绍如何在Gradle项目中引入、配置和使用JUnit5测试框架。\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"(4)测试篇\",\"previewImg\":\"/images/post/java-go-19/junit5-report.png\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-go-18-gradle-wrapper-problem\",\"slug\":\"java-go-18-gradle-wrapper-problem\",\"filename\":\"2024-11-04-java-go-18-gradle-wrapper-problem.md\",\"title\":\"一起学Java(18)-[配置篇]一个诡异(有趣)的Gradle Wrapper问题\",\"date\":\"2024-11-04\",\"author\":\"onecoder\",\"categories\":[\"一起学Java系列\",\"(5)配置篇\"],\"tags\":[\"Java\",\"Gradle\",\"一起学Java\"],\"readTime\":\"14 分钟\",\"excerpt\":\"在研究JUnit使用的时候,遇到了一个有趣的Gradle Wrapper使用问题,经过若干天的研究,终于找到并解决了问题,记录分享如下,这也是我们一起学Java过程中遇到的问题。\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"(5)配置篇\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-go-17-test-junit-intro\",\"slug\":\"java-go-17-test-junit-intro\",\"filename\":\"2024-10-28-java-go-17-test-junit-intro.md\",\"title\":\"一起学Java(17)-[测试篇]教你认识Java单元测试框架JUnit,JUnit5和JUnit4区别详解\",\"date\":\"2024-10-28\",\"author\":\"onecoder\",\"categories\":[\"一起学Java系列\",\"(4)测试篇\"],\"tags\":[\"Java\",\"单元测试\",\"一起学Java\"],\"readTime\":\"13 分钟\",\"excerpt\":\"在上一篇文章中(《一起学Java(16)-[测试篇]教你知道什么是单元测试,单元测试的特点以及Java主要的单元测试框架》),我们介绍了什么是单元测试,单元测试的特点以及Java主要的单元测试框架。其中提到,JUnit是Java世界中最广泛使用且最具影响力的单元测试框架。本文将重点介绍JUnit框架,特别是其最新版本J...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"(4)测试篇\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-go-16-test-unittest-intro\",\"slug\":\"java-go-16-test-unittest-intro\",\"filename\":\"2024-10-27-java-go-16-test-unittest-intro.md\",\"title\":\"一起学Java(16)-[测试篇]教你知道什么是单元测试,单元测试的特点以及Java主要的单元测试框架\",\"date\":\"2024-10-27\",\"author\":\"onecoder\",\"categories\":[\"一起学Java系列\",\"(4)测试篇\"],\"tags\":[\"Java\",\"单元测试\",\"一起学Java\"],\"readTime\":\"6 分钟\",\"excerpt\":\"看起来好像学习的主题有些跳跃,因为正在研究Java单元测试覆盖率统计相关问题,所以跳到单测这个领域。为了更好理解这个问题,我从什么是单元测试学起,逐步深入到如何做单元测试、单元测试效果如何检查,最后落到Jacoco单元测试覆盖率工具介绍和使用这个主题。个人感觉这个路径还是比较便于理解的。 本文主要聚焦什么是单元测试,单...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"(4)测试篇\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-go-15-jdk-8-lambda\",\"slug\":\"java-go-15-jdk-8-lambda\",\"filename\":\"2024-10-23-java-go-15-jdk-8-lambda.md\",\"title\":\"一起学Java(15)-[JDK篇]教你了解Java8特性,学习Lambda表达式\",\"date\":\"2024-10-23\",\"author\":\"onecoder\",\"categories\":[\"一起学Java系列\",\"(3)JDK篇\"],\"tags\":[\"Java\",\"JDK\",\"一起学Java\"],\"readTime\":\"10 分钟\",\"excerpt\":\"在文章《2024年主流使用的JDK版本及其核心特性介绍》中,我们详细介绍了Java8、Java11、Java17等主流Java版本主要新增特性。针对其中的一些核心特性,展开研究一二。\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"(3)JDK篇\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-go-14-log-six-log4j2-config\",\"slug\":\"java-go-14-log-six-log4j2-config\",\"filename\":\"2024-09-28-java-go-14-log-six-log4j2-config.md\",\"title\":\"一起学Java(14)-[日志篇]教你用透Log4j2,掌握Log4j2配置原理和实际应用\",\"date\":\"2024-09-28\",\"author\":\"onecoder\",\"categories\":[\"一起学Java系列\",\"(2)引入日志篇\"],\"tags\":[\"Java\",\"Log\",\"一起学Java\"],\"readTime\":\"21 分钟\",\"excerpt\":\"研究完Log4j2与SLF4J集成的原理(一起学Java(13)-[日志篇]教你分析SLF4J和Log4j2源码,掌握SLF4J与Log4j2桥接集成原理),学习如何真正应用Log4j2。\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"(2)引入日志篇\",\"previewImg\":\"/images/post/java-go/log4j2-config.png\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-go-13-import-log-five-log4j2-slf4j2\",\"slug\":\"java-go-13-import-log-five-log4j2-slf4j2\",\"filename\":\"2024-09-14-java-go-13-import-log-five-log4j2-slf4j2.md\",\"title\":\"一起学Java(13)-[日志篇]教你分析SLF4J和Log4j2源码,掌握SLF4J与Log4j2桥接集成原理\",\"date\":\"2024-09-14\",\"author\":\"onecoder\",\"categories\":[\"一起学Java系列\",\"(2)引入日志篇\"],\"tags\":[\"Java\",\"Log\",\"SLF4J\",\"一起学Java\"],\"readTime\":\"15 分钟\",\"excerpt\":\"研究完SLF4J和Logback这种无缝集成的方式(一起学Java(12)-[日志篇]教你分析SLF4J源码,掌握SLF4J如何与Logback无缝集成的原理),继续研究Log4j2和SLF4J这种需要桥接集成的方式。\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"(2)引入日志篇\",\"previewImg\":\"/images/post/java-go-13/log4j2-slf4j2-provider-relation.svg\",\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-go-12-import-log-four-logback\",\"slug\":\"java-go-12-import-log-four-logback\",\"filename\":\"2024-09-02-java-go-12-import-log-four-logback.md\",\"title\":\"一起学Java(12)-[日志篇]教你分析SLF4J源码,掌握SLF4J如何与Logback无缝集成的原理\",\"date\":\"2024-09-02\",\"author\":\"onecoder\",\"categories\":[\"一起学Java系列\",\"(2)引入日志篇\"],\"tags\":[\"Java\",\"Log\",\"SLF4J\",\"Logback\",\"一起学Java\"],\"readTime\":\"9 分钟\",\"excerpt\":\"继续完成上篇(一起学Java(11)-[日志篇]教你分析SLF4J源码,掌握Logger接口实现类加载原理)留给自己的任务,研究Logback是如何和SLF4J无缝集成的。\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"(2)引入日志篇\",\"previewImg\":\"/images/post/java-go-12/logback-provider.png\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-go-11-import-log-three\",\"slug\":\"java-go-11-import-log-three\",\"filename\":\"2024-08-21-java-go-11-import-log-three.md\",\"title\":\"一起学Java(11)-[日志篇]教你分析SLF4J源码,掌握Logger接口实现类加载原理\",\"date\":\"2024-08-21\",\"author\":\"onecoder\",\"categories\":[\"一起学Java系列\",\"(2)引入日志篇\"],\"tags\":[\"Java\",\"Log\",\"SLF4J\",\"一起学Java\"],\"readTime\":\"22 分钟\",\"excerpt\":\"最近各种事情很忙,今天继续。在第十篇(一起学Java(10)-为项目引入Log框架(Log篇二-引入SLF4J接口层框架))中,我们为项目(https://github.com/lihongzheshuai/java-all-in-one)引入了SLF4J和Logback框架,按计划通过阅读源码研究下SLF4J的实现原...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"(2)引入日志篇\",\"previewImg\":\"/images/previews/concrete-bindings.png\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-go-10-import-log-two\",\"slug\":\"java-go-10-import-log-two\",\"filename\":\"2024-08-10-java-go-10-import-log-two.md\",\"title\":\"一起学Java(10)-[日志篇]教你为本项目引入SLF4J接口层框架\",\"date\":\"2024-08-10\",\"author\":\"onecoder\",\"categories\":[\"一起学Java系列\",\"(2)引入日志篇\"],\"tags\":[\"Java\",\"Log\",\"SLF4J\",\"一起学Java\"],\"readTime\":\"6 分钟\",\"excerpt\":\"在上一节一起学Java(9)-为项目引入Log框架(Log篇一-框架演进和设计逻辑中,我们已经理清了Java日志框架的演进过程、设计思想和核心框架。从这节开始,进入实战研究环节。\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"(2)引入日志篇\",\"previewImg\":\"/images/post/java-go-9/java-log-bridge.svg\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-go-9-import-log-one\",\"slug\":\"java-go-9-import-log-one\",\"filename\":\"2024-08-05-java-go-9-import-log-one.md\",\"title\":\"一起学Java(9)-[日志篇]教你掌握Java日志框架的演进和设计逻辑\",\"date\":\"2024-08-05\",\"author\":\"onecoder\",\"categories\":[\"一起学Java系列\",\"(2)引入日志篇\"],\"tags\":[\"Java\",\"Log\",\"一起学Java\"],\"readTime\":\"7 分钟\",\"excerpt\":\"在项目开发中,日志记录(Logging)扮演着至关重要的角色。日志是开发人员调试代码和诊断问题的重要工具。例如:在生产环境中,开发人员通常无法直接调试代码,日志提供了一个详细的执行轨迹,帮助开发人员重现问题。因此,在进入其他框架和代码研究前,我首先想到的就是先完成项目日志框架的引入,进一步夯实基础工作。 要完成Log框...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"(2)引入日志篇\",\"previewImg\":\"/images/previews/concrete-bindings.png\",\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-go-8-first-pr-and-remove-all-ide-files\",\"slug\":\"java-go-8-first-pr-and-remove-all-ide-files\",\"filename\":\"2024-08-04-java-go-8-first-pr-and-remove-all-ide-files.md\",\"title\":\"一起学Java(8)-[起步篇]教你如何进行本项目的PR和将IDE相关文件移除版本控制\",\"date\":\"2024-08-04\",\"author\":\"onecoder\",\"categories\":[\"一起学Java系列\",\"(1)起步搭建篇\"],\"tags\":[\"Java\",\"Git\",\"一起学Java\"],\"readTime\":\"4 分钟\",\"excerpt\":\"我们的java-all-in-one项目的第一个PR比我预想的来的早了很多。感谢来自我的QQ群友(插播广告,欢迎大家加入Java技术交流群982860385)的PR。今天就介绍一下这次PR和项目调整的主要内容。\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"(1)起步搭建篇\",\"previewImg\":\"/images/post/java-go-8/firstpr_2024-08-04_14-48-41.png\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-go-7-write-readme-for-the-project\",\"slug\":\"java-go-7-write-readme-for-the-project\",\"filename\":\"2024-08-01-java-go-7-write-readme-for-the-project.md\",\"title\":\"一起学Java(7)-[起步篇]教你为本开源项目编写README文件\",\"date\":\"2024-08-01\",\"author\":\"onecoder\",\"categories\":[\"一起学Java系列\",\"(1)起步搭建篇\"],\"tags\":[\"Java\",\"Git\",\"一起学Java\"],\"readTime\":\"5 分钟\",\"excerpt\":\"在现代软件开发中,README文件是任何项目中不可或缺的一部分。它不仅为用户提供了项目的基本信息,还指导开发者如何使用、安装和贡献代码。其实,早在2014年的文章《为项目编写Readme.MD文件》中,我就提到过关于README的事情。今天为了我们的项目,旧事重提也为让大家再get一个知识点,我们再来说说这个READM...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"(1)起步搭建篇\",\"previewImg\":\"/images/post/java-go-7/readme-preview_2024-08-01_21-15-25.png\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-go-6-project-config-files-intro-git-idea\",\"slug\":\"java-go-6-project-config-files-intro-git-idea\",\"filename\":\"2024-07-31-java-go-6-project-config-files-intro-git-idea.md\",\"title\":\"一起学Java(6)-[起步篇]教你掌握本协作项目中Git和IDEA相关配置文件\",\"date\":\"2024-07-31\",\"author\":\"onecoder\",\"categories\":[\"一起学Java系列\",\"(1)起步搭建篇\"],\"tags\":[\"Java\",\"Gradle\",\"Git\",\"一起学Java\"],\"readTime\":\"18 分钟\",\"excerpt\":\"前两篇文章(《一起学Java(4)-java-all-in-one协作项目相关文件研究(Gradle篇-上)》和《一起学Java(5)-java-all-in-one协作项目相关文件研究(Gradle篇-下))》)我们已经完成了对项目中Gradle相关文件的研究,按照计划我们继续研究项目的其他配置文件,主要是Git和I...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"(1)起步搭建篇\",\"previewImg\":\"/images/post/java-go-6-idea-files/idea-files.png\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-go-5-project-config-files-intro-gradle-two\",\"slug\":\"java-go-5-project-config-files-intro-gradle-two\",\"filename\":\"2024-07-30-java-go-5-project-config-files-intro-gradle-two.md\",\"title\":\"一起学Java(5)-[起步篇]教你掌握本协作项目中的Gralde相关配置文件(下)\",\"date\":\"2024-07-30\",\"author\":\"onecoder\",\"categories\":[\"一起学Java系列\",\"(1)起步搭建篇\"],\"tags\":[\"Java\",\"Gradle\",\"一起学Java\"],\"readTime\":\"10 分钟\",\"excerpt\":\"接上篇《一起学Java(4)-java-all-in-one协作项目相关文件研究(Gradle篇-上)》,本文继续研究项目中Gradle相关文件。\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"(1)起步搭建篇\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-go-4-project-config-files-intro-gradle-one\",\"slug\":\"java-go-4-project-config-files-intro-gradle-one\",\"filename\":\"2024-07-29-java-go-4-project-config-files-intro-gradle-one.md\",\"title\":\"一起学Java(4)-[起步篇]教你掌握本协作项目中的Gralde相关配置文件(上)\",\"date\":\"2024-07-29\",\"author\":\"onecoder\",\"categories\":[\"一起学Java系列\",\"(1)起步搭建篇\"],\"tags\":[\"Java\",\"Gradle\",\"一起学Java\"],\"readTime\":\"16 分钟\",\"excerpt\":\"将思绪拉回java-all-in-one项目,如果你fork并下载了代码,你会看到在项目中除了HelloWorldMain代码外,还存在很多文件。如果你并不了解他们的作用并有足够的好奇心,那你应该想要知道他们的作用。带着好奇,今天我也来研究一下,先从Gradle相关的开始。\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"(1)起步搭建篇\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-go-3-gradle-vs-maven\",\"slug\":\"java-go-3-gradle-vs-maven\",\"filename\":\"2024-07-23-java-go-3-gradle-vs-maven.md\",\"title\":\"一起学Java(3)-[起步篇]教你详细掌握Java构建工具Gradle和Maven定位和优缺点对比\",\"date\":\"2024-07-23\",\"author\":\"onecoder\",\"categories\":[\"一起学Java系列\",\"(1)起步搭建篇\"],\"tags\":[\"Java\",\"Gradle\",\"Maven\",\"一起学Java\"],\"readTime\":\"9 分钟\",\"excerpt\":\"在第一步创建的项目(java-all-in-one)项目里,我们提到了使用Gradle作为项目构建工具。看到这里,不知道你是否有疑惑,什么是项目构建工具。Java项目常用构建工具有哪些?都有什么特点? 带着疑惑,本文对Java的构建工具进行一些梳理,以同步理解。从而使大家对我们项目中使用到的技术栈和技术工具都有个基本的...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"(1)起步搭建篇\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-go-2-how-to-work-on-github\",\"slug\":\"java-go-2-how-to-work-on-github\",\"filename\":\"2024-07-22-java-go-2-how-to-work-on-github.md\",\"title\":\"一起学Java(2)-[起步篇]教你如何利用Github fork一起进行开源项目协作\",\"date\":\"2024-07-22\",\"author\":\"onecoder\",\"categories\":[\"一起学Java系列\",\"(1)起步搭建篇\"],\"tags\":[\"Java\",\"Git\",\"一起学Java\"],\"readTime\":\"5 分钟\",\"excerpt\":\"在第一步中(一起学Java(1)-新建一个Gradle管理的Java项目)我们已经完成了项目的创建并托管到了Github上。现在自然要首先解决同学们如何下载代码和进行代码同步更新和联系的问题。这就涉及到Git的fork理念和协作模式的问题。具体介绍如下。\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"(1)起步搭建篇\",\"previewImg\":\"/images/post/java-go-2-work-on-github/fork.png\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-go-1-new-gradle-project\",\"slug\":\"java-go-1-new-gradle-project\",\"filename\":\"2024-07-21-java-go-1-new-gradle-project.md\",\"title\":\"一起学Java(1)-[起步篇]教你如何创建一个Gradle管理的Java开源项目(java-all-in-one)\",\"date\":\"2024-07-21\",\"author\":\"onecoder\",\"categories\":[\"一起学Java系列\",\"(1)起步搭建篇\"],\"tags\":[\"Java\",\"Gradle\",\"一起学Java\"],\"readTime\":\"14 分钟\",\"excerpt\":\"一时
1兴起,也为了便于跟大家同步学习进展和分享样例代码,遂决定创建一个全新的Java项目,并通过Github与大家分享。本文就是记录该项目的创建过程以及其中的一些知识要点(如Gradle等)。为了紧跟技术潮流和提高操作效率,本项目通过IDEA直接创建,用Gradle进行配置管理和用Git进行版本管理,并托管到Github...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"(1)起步搭建篇\",\"previewImg\":\"/images/post/java-go-1-new-gradle-project/new_gradle-proj_2024-07-21_15-15-50.png\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"string-compare-equals\",\"slug\":\"string-compare-equals\",\"filename\":\"2024-07-20-string-compare-equals.md\",\"title\":\"字节码分析-Java中String用==判断值相等一定是错的么\",\"date\":\"2024-07-20\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"JDK\"],\"tags\":[\"Java\",\"String\"],\"readTime\":\"27 分钟\",\"excerpt\":\"经常听到有同学讨论,在Java中String判断值相等应该用equals()而不能用==,并且分析的信誓旦旦。那么真相真的是这样么?==就完全不能用么?Java内部的原理究竟是如何呢?这需要理解它们背后的原理。下面是详细的原理分析:\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"JDK\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"configuration-of-java-env-variables\",\"slug\":\"configuration-of-java-env-variables\",\"filename\":\"2024-07-12-configuration-of-java-env-variables.md\",\"title\":\"给Java初学者-Java环境变量的本质和配置方法(Windows、Linux)\",\"date\":\"2024-07-12\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Java\",\"Windows\",\"Linux\",\"Mac\"],\"readTime\":\"8 分钟\",\"excerpt\":\"经常遇到初学者问到关于Java环境变量配置的问题,基本围绕在集中情况:(1)环境变量要配哪些;(2)2024年了还需不需要配;(3)为啥我这个没配、那个没配也好用。会不会有什么影响。今天我就展开讲讲关于Java环境变量的定位和本质。 在配置 Java 环境变量时,主要涉及两个重要的变量:JAVAHOME 、 PATH和...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"feature-of-popular-jdk-version\",\"slug\":\"feature-of-popular-jdk-version\",\"filename\":\"2024-07-07-feature-of-popular-jdk-version.md\",\"title\":\"2024年主流使用的JDK版本及其核心特性介绍\",\"date\":\"2024-07-07\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"JDK\",\"Java\"],\"readTime\":\"24 分钟\",\"excerpt\":\"在群里交流的时候,经常遇到不同同学使用的JDK版本五花八门,并且很多不知道其使用版本的特点。作为Java开发者,理解不同JDK版本的核心特性和优势不仅能提高我们的开发效率,还能帮助我们更好地选择适合自己项目的版本。\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"suggestions-for-new-java-beginners\",\"slug\":\"suggestions-for-new-java-beginners\",\"filename\":\"2024-07-06-suggestions-for-new-java-beginners.md\",\"title\":\"给Java初学者-Java程序员必备知识体系和成长路径建议\",\"date\":\"2024-07-06\",\"author\":\"onecoder\",\"categories\":[\"随笔\"],\"tags\":[\"Java\"],\"readTime\":\"17 分钟\",\"excerpt\":\"经常遇到各种新人在学习Java过程中遇到迷茫、学习路线不清、发展路径不明的情况,最长听到的一个问题就是,我学完了基础语法我该学什么呢?下面我就结合我的一些粗浅经验给新手一些基本的建议。 新手开始学习Java,建议的学习路线应包括以下几个阶段,每个阶段都有相应的学习目标和推荐资源(尽
1量中文)。这种循序渐进的路径可以帮助你...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"jdk-installer-exe-msi\",\"slug\":\"jdk-installer-exe-msi\",\"filename\":\"2024-07-03-jdk-installer-exe-msi.md\",\"title\":\"JDK安装包.exe和.msi差异\",\"date\":\"2024-07-03\",\"author\":\"onecoder\",\"categories\":[\"知识扩展\"],\"tags\":[\"Java\",\"JDK\"],\"readTime\":\"3 分钟\",\"excerpt\":\"在Oracle官网下载Java Development Kit (JDK)安装包时,针对 Windows 操作系统,除zip压缩包外,安装包通常有两种格式:.exe 和 .msi。 这两种安装包在使用体验和功能上有一些区别。下面详细解释它们的区别:\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":\"/images/post/jdk-installer/jdk-installer.png\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty4-3-netty-server-client-demo\",\"slug\":\"netty4-3-netty-server-client-demo\",\"filename\":\"2018-08-13-netty4-3-netty-server-client-demo.md\",\"title\":\"Netty4自学笔记 (3) - Netty NIO Server和Client 样例说明\",\"date\":\"2018-08-13\",\"author\":\"onecode\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Netty\"],\"readTime\":\"14 分钟\",\"excerpt\":\"更新节奏缓慢,因为每晚学习注意力不够集中,学习进展缓慢。本还给自己找了一大堆其他理由,但摸着良心问自己,似乎只有这个理由说的通。 想搞懂的太多,却始终没搞明白。先看一个用Netty编写的NIO Server的样例。 \u003c!--break-- ServerHanler代码 上述代码改自Netty官方手册。NettyNioS...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty4-java-nio\",\"slug\":\"netty4-java-nio\",\"filename\":\"2018-07-24-netty4-java-nio.md\",\"title\":\"Netty4自学笔记 (2) - Java NIO\",\"date\":\"2018-07-24\",\"author\":\"onecode\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Netty\"],\"readTime\":\"12 分钟\",\"excerpt\":\"距离上一篇博文已经过去了半个多月。这期间有一周多的时间用在了准备单位举办的英语竞赛上。余下的时间沉迷于陪孩子玩耍和睡觉,日复一日。 当然,我也抽空学习了Java NIO(None-Blocking / New IO) 一些知识,现总结如下。 Java的非阻塞IO的原理是采用了操作系统的多路复用器机制,即在一个通道(ch...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty4-java-bio\",\"slug\":\"netty4-java-bio\",\"filename\":\"2018-07-06-netty4-java-bio.md\",\"title\":\"Netty4自学笔记 (1) - Java BIO\",\"date\":\"2018-07-06\",\"author\":\"onecode\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Netty\"],\"readTime\":\"6 分钟\",\"excerpt\":\"2012年,由于项目的需要我第一次接触到了Netty,当时Netty还处于3.x版本。我用十几篇博文记录了自己自学Netty的过程,虽然内容浅薄,但没想到被各处转载,我想主要是因为当时Netty的资料确实较少的缘故。 五六年过去了,Netty早已发展到了4.x系列,好奇也好,求知也罢,我打算重学Netty,虽然严格来说...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-convert-sorted-array-to-binary-search-tree\",\"slug\":\"leetcode-convert-sorted-array-to-binary-search-tree\",\"filename\":\"2017-11-23-leetcode-convert-sorted-array-to-binary-search-tree.md\",\"title\":\"LeetCode Convert Sorted Array to Binary Search Tree\",\"date\":\"2017-11-23\",\"author\":\"onecode\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"6 分钟\",\"excerpt\":\"Problem Given an array where elements are sorted in ascending order, convert it to a height balanced BST. \u003c!--break-- Java 实现 分析 二叉树的处理,首先想到递归。剩下就好处理了。\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-balanced-binary-tree\",\"slug\":\"leetcode-balanced-binary-tree\",\"filename\":\"2017-11-23-leetcode-balanced-binary-tree.md\",\"title\":\"LeetCode  Balanced Binary Tree\",\"date\":\"2017-11-23\",\"author\":\"onecode\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"6 分钟\",\"excerpt\":\"Problem Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary tree is defined as a binary tree in which the depth...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-binary-tree-level-order-traversal-ii\",\"slug\":\"leetcode-binary-tree-level-order-traversal-ii\",\"filename\":\"2017-11-16-leetcode-binary-tree-level-order-traversal-ii.md\",\"title\":\"LeetCode Binary Tree Level Order Traversal II\",\"date\":\"2017-11-16\",\"author\":\"onecode\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"10 分钟\",\"excerpt\":\"Problem Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root). For ex...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-maximum-depth-of-binary-tree\",\"slug\":\"leetcode-maximum-depth-of-binary-tree\",\"filename\":\"2017-11-15-leetcode-maximum-depth-of-binary-tree.md\",\"title\":\"LeetCode  Maximum Depth of Binary Tree\",\"date\":\"2017-11-15\",\"author\":\"onecode\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"5 分钟\",\"excerpt\":\"Problem Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the longest path from the root node down to the farthest lea...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-symmetric-tree\",\"slug\":\"leetcode-symmetric-tree\",\"filename\":\"2017-11-14-leetcode-symmetric-tree.md\",\"title\":\"LeetCode Symmetric Tree\",\"date\":\"2017-11-14\",\"author\":\"onecode\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"9 分钟\",\"excerpt\":\"Problem Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For example, this binary tree [1,2,2,3,4,4,3] is symmetri...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-same-tree\",\"slug\":\"leetcode-same-tree\",\"filename\":\"2017-11-11-leetcode-same-tree.md\",\"title\":\"LeetCode  Same Tree\",\"date\":\"2017-11-11\",\"author\":\"onecode\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"6 分钟\",\"excerpt\":\"Problem Given two binary trees, write a function to check if they are the same or not. Two binary trees are considered the same if they are structurally identic...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-remove-duplicates-from-sorted-list\",\"slug\":\"leetcode-remove-duplicates-from-sorted-list\",\"filename\":\"2017-11-09-leetcode-remove-duplicates-from-sorted-list.md\",\"title\":\"LeetCode Remove Duplicates from Sorted List\",\"date\":\"2017-11-09\",\"author\":\"onecode\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"5 分钟\",\"excerpt\":\"Problem Given a sorted linked list, delete all duplicates such that each element appear only once. For example, Given 1-1-2, return 1-2. Given 1-1-2-3-3, return...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-merge-sorted-array\",\"slug\":\"leetcode-merge-sorted-array\",\"filename\":\"2017-11-09-leetcode-merge-sorted-array.md\",\"title\":\"LeetCode  Merge Sorted Array\",\"date\":\"2017-11-09\",\"author\":\"onecode\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"4 分钟\",\"excerpt\":\"Problem Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: You may assume that nums1 has enough space (size that...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-climbing-stairs\",\"slug\":\"leetcode-climbing-stairs\",\"filename\":\"2017-11-09-leetcode-climbing-stairs.md\",\"title\":\"LeetCode Climbing Stairs\",\"date\":\"2017-11-09\",\"author\":\"onecode\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"6 分钟\",\"excerpt\":\"Problem You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you clim...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-sqrtx\",\"slug\":\"leetcode-sqrtx\",\"filename\":\"2017-11-08-leetcode-sqrtx.md\",\"title\":\"LeetCode Sqrt X\",\"date\":\"2017-11-08\",\"author\":\"onecode\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"5 分钟\",\"excerpt\":\"Problem Implement int sqrt(int x). Compute and return the square root of x. x is guaranteed to be a non-negative integer. Example 1: Input: 4 Output: 2 Example...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-plus-one\",\"slug\":\"leetcode-plus-one\",\"filename\":\"2017-11-07-leetcode-plus-one.md\",\"title\":\"LeetCode Plus One\",\"date\":\"2017-11-07\",\"author\":\"onecode\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"5 分钟\",\"excerpt\":\"Problem Given a non-negative integer represented as a non-empty array of digits, plus one to the integer. You may assume the integer do not contain any leading...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-length-of-last-word\",\"slug\":\"leetcode-length-of-last-word\",\"filename\":\"2017-11-07-leetcode-length-of-last-word.md\",\"title\":\"LeetCode Length of Last Word\",\"date\":\"2017-11-07\",\"author\":\"onecode\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"4 分钟\",\"excerpt\":\"Problem Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the length of last word in the string. If the last word d...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-add-binary\",\"slug\":\"leetcode-add-binary\",\"filename\":\"2017-11-07-leetcode-add-binary.md\",\"title\":\"LeetCode  Add Binary\",\"date\":\"2017-11-07\",\"author\":\"onecode\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"5 分钟\",\"excerpt\":\"Problem Given two binary strings, return their sum (also a binary string). For example, a = \\\"11\\\" b = \\\"1\\\" Return \\\"100\\\". 题目的意思就是按二进制的方式计算两个数相加。 \u003c!--break-- Java 实...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-maximum-subarray\",\"slug\":\"leetcode-maximum-subarray\",\"filename\":\"2017-11-06-leetcode-maximum-subarray.md\",\"title\":\"LeetCode Maximum Subarray\",\"date\":\"2017-11-06\",\"author\":\"onecoder\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"9 分钟\",\"excerpt\":\"Problem Find the contiguous subarray within an array (containing at least one number) which has the largest sum. For example, given the array [-2,1,-3,4,-1,2,1,...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-count-and-say\",\"slug\":\"leetcode-count-and-say\",\"filename\":\"2017-10-31-leetcode-count-and-say.md\",\"title\":\"LeetCode Count And Say\",\"date\":\"2017-10-31\",\"author\":\"onecoder\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"6 分钟\",\"excerpt\":\"Problem The count-and-say sequence is the sequence of integers with the first five terms as following: 1. 1 2. 11 3. 21 4. 1211 5. 111221 1 is read off as \\\"one...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-implement-strstr\",\"slug\":\"leetcode-implement-strstr\",\"filename\":\"2017-10-29-leetcode-implement-strstr.md\",\"title\":\"LeetCode  Implement strStr()\",\"date\":\"2017-10-29\",\"author\":\"onecoder\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"7 分钟\",\"excerpt\":\"Problem Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack. 题目其实就是实现Java中String的indexO...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-remove-element\",\"slug\":\"leetcode-remove-element\",\"filename\":\"2017-10-26-leetcode-remove-element.md\",\"title\":\"LeetCode Remove Element\",\"date\":\"2017-10-26\",\"author\":\"onecoder\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"6 分钟\",\"excerpt\":\"Problem Given an array and a value, remove all instances of that value in place and return the new length. Do not allocate extra space for another array, you mu...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-remove-duplicates-from-sorted-array\",\"slug\":\"leetcode-remove-duplicates-from-sorted-array\",\"filename\":\"2017-10-22-leetcode-remove-duplicates-from-sorted-array.md\",\"title\":\"LeetCode  Remove Duplicates from Sorted Array\",\"date\":\"2017-10-22\",\"author\":\"onecoder\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"6 分钟\",\"excerpt\":\"Problem Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space for...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-merge-two-sorted-list\",\"slug\":\"leetcode-merge-two-sorted-list\",\"filename\":\"2017-10-19-leetcode-merge-two-sorted-list.md\",\"title\":\"LeetCode Merge Two Sorted Lists\",\"date\":\"2017-10-19\",\"author\":\"onecoder\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"8 分钟\",\"excerpt\":\"Problem Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. 即合并两个已经排好序...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-valid-parentheses\",\"slug\":\"leetcode-valid-parentheses\",\"filename\":\"2017-10-18-leetcode-valid-parentheses.md\",\"title\":\"LeetCode Valid Parentheses\",\"date\":\"2017-10-18\",\"author\":\"onecoder\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"6 分钟\",\"excerpt\":\"Problem Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid. The brackets must close in the co...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-longest-common-prefix\",\"slug\":\"leetcode-longest-common-prefix\",\"filename\":\"2017-10-17-leetcode-longest-common-prefix.md\",\"title\":\"LeetCode Longest Common Prefix\",\"date\":\"2017-10-17\",\"author\":\"onecoder\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"8 分钟\",\"excerpt\":\"Problem Write a function to find the longest common prefix string amongst an array of strings. 就是找出一个字符串数组中元素,最长的通用前缀。例如:{\\\"ab\\\",\\\"abc\\\",\\\"abd\\\"},答案是 \\\"ab\\\"。 \u003c!--break-...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-integer-to-roman\",\"slug\":\"leetcode-integer-to-roman\",\"filename\":\"2017-10-16-leetcode-integer-to-roman.md\",\"title\":\"LeetCode  Integer To Roman\",\"date\":\"2017-10-16\",\"author\":\"onecoder\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"11 分钟\",\"excerpt\":\"Problem Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. 跟[Roman To Integer][1]是对应问题。即将整数转换成对应的罗马数字。罗...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-roman-to-integer\",\"slug\":\"leetcode-roman-to-integer\",\"filename\":\"2017-10-13-leetcode-roman-to-integer.md\",\"title\":\"LeetCode Roman to Integer\",\"date\":\"2017-10-13\",\"author\":\"onecoder\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"6 分钟\",\"excerpt\":\"Problem Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. 即将罗马数字1-3999转换成对应的整数。罗马数字规则见wiki:[罗马数字规则][1]...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-reverse-integer\",\"slug\":\"leetcode-reverse-integer\",\"filename\":\"2017-10-12-leetcode-reverse-integer.md\",\"title\":\"LeetCode  Reverse Integer\",\"date\":\"2017-10-12\",\"author\":\"onecoder\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"4 分钟\",\"excerpt\":\"Problem Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 Note: The input is assumed to be a 32-bit signed integer. Yo...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"leetcode-palindrome-number\",\"slug\":\"leetcode-palindrome-number\",\"filename\":\"2017-10-12-leetcode-palindrome-number.md\",\"title\":\"LeetCode  Palindrome Number\",\"date\":\"2017-10-12\",\"author\":\"onecoder\",\"categories\":[\"算法学习\"],\"tags\":[\"LeetCode\",\"Java\"],\"readTime\":\"4 分钟\",\"excerpt\":\"Problem Determine whether an integer is a palindrome. Do this without extra space. 即返回一个数是否是回数。例如:1,1221,12321是回数,负数不是回数。题目特别提醒,不要使用额外的空间,即不要考虑转换成String来处理。 \u003c!-...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"httpclient-connection-release-analysis\",\"slug\":\"httpclient-connection-release-analysis\",\"filename\":\"2017-10-11-httpclient-connection-release-analysis.md\",\"title\":\"Httpcomponents-client 连接释放逻辑源码研究\",\"date\":\"2017-10-11\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"HttpClient\",\"Java\"],\"readTime\":\"8 分钟\",\"excerpt\":\"研究背景 上篇(Httpcomponents-core 从池中获取连接代码解析)研究中,我们知道,Httpcomponents-client底层维护了一个socket连接池,对于同一个地址,默认只可以建立2个连接。如果连接不及时释放,就会造成连接池中无可用的连接获取,从而导致请求等待(阻塞)。因此,我们需要关注连接池释...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"httpclient-core-get-pool-entry-blocking-analysis\",\"slug\":\"httpclient-core-get-pool-entry-blocking-analysis\",\"filename\":\"2017-09-27-httpclient-core-get-pool-entry-blocking-analysis.md\",\"title\":\"Httpcomponents-core 从池中获取连接代码解析\",\"date\":\"2017-09-27\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"HttpClient\",\"Java\"],\"readTime\":\"14 分钟\",\"excerpt\":\"最近使用Httpcomponents-client过程中遇到一个线程
1阻塞的问题。通过jstack dump线程发现,是block在AbstractConnPool的getPoolEntryBlocking中,于是决定研究一下Httpcomponents-client的源码。 \u003c!--break-- 问题背景 邮件发送线...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":\"/images/post/httpcomponents-core-get-pool-entry/jstack-dump.png\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java9-collections-factory-method\",\"slug\":\"java9-collections-factory-method\",\"filename\":\"2017-09-24-java9-collections-factory-method.md\",\"title\":\"Java9 Collections工厂函数特性说明\",\"date\":\"2017-09-24\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Java\"],\"readTime\":\"9 分钟\",\"excerpt\":\"刚发布的Java9中,有一个特性是新增了快速构造不可变集合的工厂函数。官方说明如下: JEP 269: Convenience Factory Methods for Collections Makes it easier to create instances of collections and maps with...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"lombok-issue-with-java9\",\"slug\":\"lombok-issue-with-java9\",\"filename\":\"2017-09-23-lombok-issue-with-java9.md\",\"title\":\"Lombok与Java9兼容性问题\",\"date\":\"2017-09-23\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Java\",\"Lombok\"],\"readTime\":\"4 分钟\",\"excerpt\":\"很久没更新博客,本想写篇关于Java9 集合工厂函数的博客,却没想到阴差阳错先遇到Lombok与Java9的兼容性问题。 \u003c!--break-- 我在一个试验用的工程里,想做一些关于Java9新特性的试验,该工程原本是依赖lombok的。结果,编译时,原有的使用@Slf4j注解的的类报编译错误。 Error:(18,...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"springxd-deploy-lanuch-analysis\",\"slug\":\"springxd-deploy-lanuch-analysis\",\"filename\":\"2017-06-27-springxd-deploy-lanuch-analysis.md\",\"title\":\"SpringXD 任务、启动消息通信代码流程分析\",\"date\":\"2017-06-27\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Spring\"],\"readTime\":\"2 分钟\",\"excerpt\":\"通信流程概括 任务部署时,xd-admin和container之间通过zookeeper的节点监听通信。container监听zk deployment节点,执行部署。同事绑定kafka message consumer和reactor subscriber。 任务启动时,xd-admin和container通过kaf...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":\"/images/post/xd-deploy-launch/job-deploy-launch.png\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"encrypt-decrypt-spring-properties\",\"slug\":\"encrypt-decrypt-spring-properties\",\"filename\":\"2017-04-10-encrypt-decrypt-spring-properties.md\",\"title\":\"Spring .properties配置文件加密\",\"date\":\"2017-04-10\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Spring\"],\"readTime\":\"6 分钟\",\"excerpt\":\"对于保存在.properties文件中的敏感信息,支持采用加密的方式保存。然后在程序中解密使用。 \u003c!--break-- 实现方案 采用自定义PropertySourceLoader的方式,在.properties配置文件加载期,遍历值,遇到指定格式的值,则执行解密操作。具体代ç 
1å¦‚下: CodecUtil即加解密工具类...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"spring-hadoop-yarn-ha\",\"slug\":\"spring-hadoop-yarn-ha\",\"filename\":\"2017-03-24-spring-hadoop-yarn-ha.md\",\"title\":\"Spring Hadoop Yarn HA问题调研\",\"date\":\"2017-03-24\",\"author\":\"onecoder\",\"categories\":[\"大数据\"],\"tags\":[\"Hadoop\"],\"readTime\":\"38 分钟\",\"excerpt\":\"Spring XD on Yarn在使用过程中发现不论是YarnClient还是AppMaster对Yarn HA的支持都不好。在Yarn的RM重启或切换的情况下,YarnClient必须修改配置文件中的RM地址才可以继续使用,即使在配置文件中配置了Yarn HA的相关配置也不生效。而AppMaster同样会因为长时间...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"using-container-group-in-springxd-on-yarn\",\"slug\":\"using-container-group-in-springxd-on-yarn\",\"filename\":\"2016-12-01-using-container-group-in-springxd-on-yarn.md\",\"title\":\"SpringXD on yarn 使用Container工作组\",\"date\":\"2016-12-01\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Spring\"],\"readTime\":\"6 分钟\",\"excerpt\":\"SpringXD on Yarn支持Container分组。可以更好的控制admin和container分配。 控制组内成员 以组单位整体控制生命周期 动态创建组 重启失败的容器 \u003c!--break-- 实际上,XD on Yarn有内置分组admin和container。结合例子使用: 查看分组列表: 创建新的分组...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":\"/images/post/xd-on-yarn-groups/yarn-rm-containers-8.png\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"flo-for-springxd-on-yarn\",\"slug\":\"flo-for-springxd-on-yarn\",\"filename\":\"2016-11-10-flo-for-springxd-on-yarn.md\",\"title\":\"On Yarn模式下 Spring Flo for SpringXD UI部署\",\"date\":\"2016-11-10\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Spring\"],\"readTime\":\"2 分钟\",\"excerpt\":\"配置Spring Flo可在SpringXD的admin-ui页面提供拖拽式的组合job的定义。 从Pivotal官方下载Flo for XD 1.0.1版本 https://network.pivotal.io/products/p-spring-flo \u003c!--break-- 解压flo-spring-xd-adm...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":\"/images/post/flo-for-springxd-on-yarn/flo-for-xd.png\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"develop-springxd-custom-module\",\"slug\":\"develop-springxd-custom-module\",\"filename\":\"2016-11-07-develop-springxd-custom-module.md\",\"title\":\"SpringXD 自定义Job模块开发\",\"date\":\"2016-11-07\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Spring\"],\"readTime\":\"18 分钟\",\"excerpt\":\"SpringXD中的Job实际即为Spring Batch中的Job,因此我们先按照Spring Batch的规范开发一个简单的Job。 \u003c!--break-- 项目依赖: 实际这里无需配置spring-batch的依赖,因为会在springxd的parent pom中声明。而springxd的parent一般我们都会...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"springxd-on-yarn-setup\",\"slug\":\"springxd-on-yarn-setup\",\"filename\":\"2016-11-01-springxd-on-yarn-setup.md\",\"title\":\"SpirngXD on YARN模式部署说明\",\"date\":\"2016-11-01\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Spring\"],\"readTime\":\"6 分钟\",\"excerpt\":\"Spring XD可以on yarn运行。 下载on yarn运行包并解压 部署本地Hadoop环境 要on yarn运行需要依赖本地的Hadoop环境。下载Hadoop安装包并解压。笔者试验环境中已经提供了针对Hadoop的自动化配置脚本,这里不再赘述。 xd on yarn配置 修改servers.yml配置文件,...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"springxd-distributed-mode-setup\",\"slug\":\"springxd-distributed-mode-setup\",\"filename\":\"2016-10-21-springxd-distributed-mode-setup.md\",\"title\":\"SpringXD分布式模式部署\",\"date\":\"2016-10-21\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Spring\"],\"readTime\":\"7 分钟\",\"excerpt\":\"Spring XD有两种运行模式:单机和分布式模式。这里关注分布式模式的部署和运行时特点。 \u003c!--break-- 分布式集群组件 Spring XD分布式环境包含以下组件: - Admin 管理节点。管理Stream和Job的配置和发布,提供REST接口等。 - Container 运行流式任何和批量任务的节点,部署...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"mybatis-pagehelper-reentrantlock-bug\",\"slug\":\"mybatis-pagehelper-reentrantlock-bug\",\"filename\":\"2016-04-12-mybatis-pagehelper-reentrantlock-bug.md\",\"title\":\"Mybatis-PageHelper Reentrantlock锁使用问题\",\"date\":\"2016-04-12\",\"author\":\"OneCoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Mybatis\"],\"readTime\":\"7 分钟\",\"excerpt\":\"\u003ca href=\\\"https://github.com/pagehelper/Mybatis-PageHelper\\\" target=\\\"blank\\\"Mybatis-PageHelper\u003c/a应该是目前使用比较广泛的一个Mybatis分页插件。我在几个项目里都引入了该插件。今天偶然阅读其源码,却发现了一个不小的问题。 注:...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":\"/images/post/mybatis-pagehelper-bug/pull-request.png\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"package-executable-jar-with-gradle\",\"slug\":\"package-executable-jar-with-gradle\",\"filename\":\"2016-03-03-package-executable-jar-with-gradle.md\",\"title\":\"Gradle打包可执行Jar\",\"date\":\"2016-03-03\",\"author\":\"OneCoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Gradle\"],\"readTime\":\"3 分钟\",\"excerpt\":\"为自己快速写博客开发的yami程序初稿基本完成了。需要打成jar通过命令行快速调用。具体可看Readme。 项目地址:[https://github.com/lihongzheshuai/yami ](https://github.com/lihongzheshuai/yami ) 搜了一下Gradle 打包execu...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"design-mode-proxy\",\"slug\":\"design-mode-proxy\",\"filename\":\"2014-11-24-design-mode-proxy.md\",\"title\":\"乱学设计模式——代理模式\",\"date\":\"2014-11-24\",\"author\":\"onecoder\",\"categories\":[\"设计模式\"],\"tags\":[\"Java\",\"设计模式\"],\"readTime\":\"6 分钟\",\"excerpt\":\"在乱学装饰模式的时候给出了一篇参考文章,是对比装饰模式和代理模式的。自然,这就是OneCoder现在需要理解的问题。 先复习一下设计模式6大原则: 设计模式的六大原则(引自:http://zz563143188.iteye.com/blog/1847029) \u003cblockquote 1. 开闭原则(Open Close...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"design-mode-decorator\",\"slug\":\"design-mode-decorator\",\"filename\":\"2014-11-12-design-mode-decorator.md\",\"title\":\"乱学设计模式——装饰模式\",\"date\":\"2014-11-12\",\"author\":\"onecoder\",\"categories\":[\"设计模式\"],\"tags\":[\"Java\",\"设计模式\"],\"readTime\":\"8 分钟\",\"excerpt\":\"码农写码3,4年,设计模式用了不少,但又有一种在乱用的感觉。要么叫不出名字,要么感觉摸不到其精髓。其实所谓Java中的23种设计模式,OneCoder之前也乱乱的看过几遍,但是至今感觉也没有什么深刻的领悟。 之前,看到每种设计模式总会有一种“理所应当”的感觉,心里就好像在说本来就应该这么做啊,我也是这么写的啊。但是后头...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"supercsv-csv-tsv\",\"slug\":\"supercsv-csv-tsv\",\"filename\":\"2014-11-06-supercsv-csv-tsv.md\",\"title\":\"利用supercsv读写CSV、TSV文件\",\"date\":\"2014-11-06\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Java\"],\"readTime\":\"11 分钟\",\"excerpt\":\"先简单介绍下CSV和TSV文件的区别: \u003cblockquoteTSV ,Tab-separated values的缩写,即制表符分隔值。关于TSV标准,参考:\u003ca href=\\\"http://en.wikipedia.org/wiki/Tab-separatedvalues\\\"http://en.wikipedia.org...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"ip-range-filter\",\"slug\":\"ip-range-filter\",\"filename\":\"2014-10-24-ip-range-filter.md\",\"title\":\"IP范围过滤实现\",\"date\":\"2014-10-24\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Java\"],\"readTime\":\"10 分钟\",\"excerpt\":\"项目里要求实现在项目上线前社内测试团地可以正常访问ç
1³»ç»Ÿï¼Œè€Œå¤–部访问用户看到的是系统尚未开放的页面。 OneCoder的第一反映就是实现一个filter,配置可访问的IP规则,通过正则进行匹配。通过的正常进入系统,不通过的redirect到指定欢迎页面。 整个代码没什么难度,核心就是一个IP规则的检验功能。考虑到配置的简...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"spring-batch-intro-sample\",\"slug\":\"spring-batch-intro-sample\",\"filename\":\"2014-09-28-spring-batch-intro-sample.md\",\"title\":\"Spring Batch 初探、使用样例\",\"date\":\"2014-09-28\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Spring\"],\"readTime\":\"24 分钟\",\"excerpt\":\"\u003cp 工作里用到了Spring Batch项目,以前我也是做并行计算的,听说过Spring Batch不过并没有去具体了解过。今天抽空看看官方文档进行下初步的了解。\u003c/p \u003cp 官方文档地址:\u003ca href=\\\"http://docs.spring.io/spring-batch/trunk/reference/html...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"big-file-download-shallowetagheaderfilter-outofmemory\",\"slug\":\"big-file-download-shallowetagheaderfilter-outofmemory\",\"filename\":\"2014-09-14-big-file-download-shallowetagheaderfilter-outofmemory.md\",\"title\":\"关于ShallowEtagHeaderFilter 大文件下载Out of memory问题解决\",\"date\":\"2014-09-14\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Java\"],\"readTime\":\"12 分钟\",\"excerpt\":\"\u003cp 最近解决大文件下载的问题,遇到一个\u0026quot;Out of memory\u0026quot;的exception。建厂controller层的代码,发现是用BufferdOutputStream写入Response中的,缓冲区也只有8m,按理说不应该出现内存溢出的。\u003c/p \u003cp 仔细观察异常堆栈,发现堆栈中出现了\u0026ldq...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-lombok-try\",\"slug\":\"java-lombok-try\",\"filename\":\"2014-09-04-java-lombok-try.md\",\"title\":\"点滴积累 Lombok  实用且有想法的jar\",\"date\":\"2014-09-04\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Lombok\"],\"readTime\":\"4 分钟\",\"excerpt\":\"\u003cp 官网:\u003ca href=\\\"http://projectlombok.org/\\\"http://projectlombok.org/\u003c/a\u003c/p \u003cp 通过官网的视频,可以看到Lombok可以帮助我们节约很多机械而繁琐的代码。例如在写Pojo类或者Log的时候。写段代码体会一下:\u003c/p \u003cp Gradle依赖配置:\u003c/...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"five-type-singleton-java\",\"slug\":\"five-type-singleton-java\",\"filename\":\"2014-08-12-five-type-singleton-java.md\",\"title\":\"Java面试题 实现单例模式\",\"date\":\"2014-08-12\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Java\"],\"readTime\":\"9 分钟\",\"excerpt\":\"\u003cp 好久没有更新博客了,\u003ca href=\\\"http://www.coderli.com\\\"OneCoder\u003c/a没挂,只是儿子出生,忙了一个多月。生活节奏有点小乱。这期间也抽空换了份工作,坚持技术路线不动摇。So,抓紧调整一下状态,继续读书,写码。\u003c/p \u003cp 面试题系列,是\u003ca href=\\\"http://www.co...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"spring-hibernate-hbm2dll-config\",\"slug\":\"spring-hibernate-hbm2dll-config\",\"filename\":\"2014-05-09-spring-hibernate-hbm2dll-config.md\",\"title\":\"Spring集成Hibernate注解配置 无hibernate.cfg.xml文件,自动生成表配置\",\"date\":\"2014-05-09\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Spring\",\"Hibernate\"],\"readTime\":\"2 分钟\",\"excerpt\":\"\u003cp 本以为一个无足挂齿的小问题,没想到还折腾了一下。遂记录一下。主要搜索出的结果排名靠前的大多是在hibernate.cfg.xml中的配置方式。与我的环境不符。正确配置方式如下。已测试。\u003c/p \u003cp 注:注释掉的配置value配置方式和prop配置方式,均有效。\u003cbr / \u0026nbsp;\u003c/p\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"log4j-mdc-classloader-problem\",\"slug\":\"log4j-mdc-classloader-problem\",\"filename\":\"2014-05-06-log4j-mdc-classloader-problem.md\",\"title\":\"log4j 同一线程隔离classloader下MDC信息不同问题解决 ThreadLocal问题分析\",\"date\":\"2014-05-06\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Log4j\"],\"readTime\":\"10 分钟\",\"excerpt\":\"\u003cp 最近遇到日志文件记录错误的问题。一个任务的日志信息会被莫名的拆分到两个不同目录中。且有一个目录还是曾经执行过的任务的目录。经过分析,首先怀疑的是MDC没有清理的问题,这也是最直观的问题。因为任务是在线程池(fixedThreadPool)中运行的。由于线程会被重用,而MDC是绑定在Threadlocal上的,所以...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty-5-new-and-noteworthy\",\"slug\":\"netty-5-new-and-noteworthy\",\"filename\":\"2014-02-26-netty-5-new-and-noteworthy.md\",\"title\":\"Netty5.x中新增和值得注意的点\",\"date\":\"2014-02-26\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Netty\"],\"readTime\":\"12 分钟\",\"excerpt\":\"\u003cdiv 最近事情多,OneCoder折腾了好几天,总算翻译完成了。\u003c/div \u003cdiv 翻译自官方文档:\u003ca href=\\\"http://netty.io/wiki/new-and-noteworthy-in-5.x.html\\\"http://netty.io/wiki/new-and-noteworthy-in-5.x...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"zeromq-jzmq-enviroment-config\",\"slug\":\"zeromq-jzmq-enviroment-config\",\"filename\":\"2014-01-24-zeromq-jzmq-enviroment-config.md\",\"title\":\"JZMQ环境变量配置说明 ZeroMQ Java Binding\",\"date\":\"2014-01-24\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"ZeroMQ\"],\"readTime\":\"2 分钟\",\"excerpt\":\"\u003cp 在考虑使用ZeroMQ时,灵活夸平台使用的问题。除了要在编译不同平台的版本,还需要在不同的平台下,进行相应的环境变量的配置。简要说明一下:\u003cbr / 首先,对于JNI调用来说,不论什么平台都需要指定本地动态链接库的位置,指向包含动态链接库的文件夹:\u003c/p \u003cp 不过光这样是不够的,因为底层C/C++ 库之间也需要...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"zeromq-jzmq-mdp-java-demo\",\"slug\":\"zeromq-jzmq-mdp-java-demo\",\"filename\":\"2014-01-18-zeromq-jzmq-mdp-java-demo.md\",\"title\":\"ZeroMQ研究 Majordomo Protocol, Java样例实现\",\"date\":\"2014-01-18\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"ZeroMQ\"],\"readTime\":\"51 分钟\",\"excerpt\":\"\u003cdiv 最近研究利用zeromq实现多对多的双向自由收发。在官方上发现了MDP协议,经过验证貌似可行。正在开发中,将验证代码分享如下。\u003c/div \u003cdiv \u0026nbsp;\u003c/div \u003cdiv style=\\\"text-align: center;\\\" \u003cimg alt=\\\"\\\" src=\\\"/images/oldposts/Gd...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"zeromq-jzmq-javabind-demo\",\"slug\":\"zeromq-jzmq-javabind-demo\",\"filename\":\"2014-01-15-zeromq-jzmq-javabind-demo.md\",\"title\":\"ZeroMQ 初学 Java Binding验证代码\",\"date\":\"2014-01-15\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"ZeroMQ\"],\"readTime\":\"23 分钟\",\"excerpt\":\"\u003cdiv 学习ZeroMQ使用,根据官方文档介绍,写了如下Java验证代码。仅供参考。需要依赖jzmq的jar包和本地库。\u003c/div \u003cdiv \u0026nbsp;\u003c/div \u003cdiv 1、请求-响应模式\u003c/div \u003cdiv style=\\\"text-align: center;\\\" \u003cimg alt=\\\"\\\" src=\\\"/image...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"windows64-zeromq-jzmq-compile\",\"slug\":\"windows64-zeromq-jzmq-compile\",\"filename\":\"2014-01-13-windows64-zeromq-jzmq-compile.md\",\"title\":\"Windows7 x64下编译ZeroMQ和JZMQ  Java Binding\",\"date\":\"2014-01-13\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"ZeroMQ\"],\"readTime\":\"3 分钟\",\"excerpt\":\"\u003cp 首先,先说明的是,OneCoder采用的是使用vs2010的编译方式,zeromq的版本是3.2.4。\u003c/p \u003cp 先编译zeromq3.2.4的源码。双击builds/msvc/ 目录下的msvc.sln导入到VS2010。选择x64位编译器,生成解决方案。\u003c/p \u003cp style=\\\"text-align: c...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"macos-zeromq-jzmq-compile\",\"slug\":\"macos-zeromq-jzmq-compile\",\"filename\":\"2014-01-10-macos-zeromq-jzmq-compile.md\",\"title\":\"MacOS10.9 下 ZeroMQ4.0.3和Java Binding安装部署\",\"date\":\"2014-01-10\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"ZeroMQ\"],\"readTime\":\"4 分钟\",\"excerpt\":\"\u003cp ZeroMQ是什么可以自己去官网了解。\u003cbr / \u003ca href=\\\"http://zeromq.org/\\\"http://zeromq.org/\u003c/a\u003c/p \u003cp Mac下,对于安装了brew的朋友,很简单了。\u003cbr / 首先安装zeromq\u003c/p \u003cpre class=\\\"brush:shell;first-lin...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"restlet-client-socket-timeout\",\"slug\":\"restlet-client-socket-timeout\",\"filename\":\"2013-12-16-restlet-client-socket-timeout.md\",\"title\":\"Restlet 客户端连接超时问题解决\",\"date\":\"2013-12-16\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Re
1stlet\"],\"readTime\":\"2 分钟\",\"excerpt\":\"\u003cp 使用Restlet进行同步请求,有时可能处理的时间会很长所以需要客户端进行较长时间的等待。从API中查得客户端的设置方式如下:\u003c/p \u003c!--break-- 不过,设置后,OneCoder经测试却发现无效。无论socketTimeout设置为多少。均会在1分钟左右超时。 这好像是由于Restlet默认使用的是一个...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"restlet-bug-fix-objectrepresentation\",\"slug\":\"restlet-bug-fix-objectrepresentation\",\"filename\":\"2013-12-16-restlet-bug-fix-objectrepresentation.md\",\"title\":\"Restlet2.1.6发布,修正ObjectRepresentation的构造函数问题\",\"date\":\"2013-12-16\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Restlet\"],\"readTime\":\"4 分钟\",\"excerpt\":\"\u003cp \u003ca href=\\\"http://www.coderli.com\\\\\\\"OneCoder\u003c/a在Restlet 2.1.4中 匪夷所思的ObjectRepresentation的构造函数中,提到过在使用2.1.4的时候遇到的异常\u003c/p \u003cblockquote \u003cp Exception in thread \u0026quot;m...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"migrating-from-earlier-versions-of-the-spring-framework4\",\"slug\":\"migrating-from-earlier-versions-of-the-spring-framework4\",\"filename\":\"2013-12-14-migrating-from-earlier-versions-of-the-spring-framework4.md\",\"title\":\"Spring Framework 4.0 迁移指南 (官方文档翻译)\",\"date\":\"2013-12-14\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Spring\",\"翻译\"],\"readTime\":\"8 分钟\",\"excerpt\":\"看到Spring Framework4.0发布的消息,看了下new future,\u003ca href=\\\"http://www.coderli.com\\\"OneCoder\u003c/a很喜欢spring这种追\u0026ldquo;时髦\u0026rdquo;的风格,groovy脚本配置和Java8都支持了。顺便就翻译了一下官方的迁移指南。对一般使用来说...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"differents-log4j2-log4j\",\"slug\":\"differents-log4j2-log4j\",\"filename\":\"2013-12-08-differents-log4j2-log4j.md\",\"title\":\"log4j2 与 log4j使用时的几点小区别 - log4j2上手说明\",\"date\":\"2013-12-08\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Log4j\"],\"readTime\":\"5 分钟\",\"excerpt\":\"\u003cp 虽然log4j2 目前还是beta版,不过\u003ca href=\\\"http://www.coderli.com\\\"OneCoder\u003c/a已经忍不住要尝试一下。跟使用log4j 比起来,上手上主要的区别有。\u003cbr / 1、依赖的jar包。使用slf4j+log4j2 时,依赖的jar包如下:(gradle配置,Maven对...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"restlet-inputrepresentation-file-read\",\"slug\":\"restlet-inputrepresentation-file-read\",\"filename\":\"2013-12-04-restlet-inputrepresentation-file-read.md\",\"title\":\"Restlet流式读取远端文件内容 InputRepresentation\",\"date\":\"2013-12-04\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Restlet\"],\"readTime\":\"6 分钟\",\"excerpt\":\"\u003cp \u003ca href=\\\"http://www.coderli.com\\\"OneCoder\u003c/a验证用Restlet做服务,读取远端文件内容功能,编写验证代码。目前测试通过,主要是利用restlet内部提供的InputRepresentation对象,通过ReadableByteChannel,按字节流的方式读取文件内容。...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"restlet-2-1-4-objectrepresentation-bug\",\"slug\":\"restlet-2-1-4-objectrepresentation-bug\",\"filename\":\"2013-12-03-restlet-2-1-4-objectrepresentation-bug.md\",\"title\":\"Restlet 2.1.4中 匪夷所思的ObjectRepresentation的构造函数\",\"date\":\"2013-12-03\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Restlet\"],\"readTime\":\"12 分钟\",\"excerpt\":\"\u003ca href=\\\"http://www.coderli.com\\\"OneCoder\u003c/a使用Restlet最新版2.1.4开发样例,却一直抛出异常: Exception in thread \\\"main\\\" java.lang.IllegalArgumentException : The serialized represe...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"log4j-slf4j-logger-linenumber\",\"slug\":\"log4j-slf4j-logger-linenumber\",\"filename\":\"2013-11-27-log4j-slf4j-logger-linenumber.md\",\"title\":\"log4j日志封装说明—slf4j对于log4j的日志封装-正确获取调用堆栈\",\"date\":\"2013-11-27\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Log4j\",\"SLF4J\"],\"readTime\":\"18 分钟\",\"excerpt\":\"\u003cp 日志是项目中必用的东西,日志产品里最普及应该就是log4j了。(logback这里暂不讨论。) 先看一下常用的log4j的用法,一般来说log4j都会配合slf4j或者common-logging使用,这里已slf4j为例。添加gradle依赖:\u003c/p \u003cp 最直接的用法就是在每个需要记录日志的类里,构造一个属于...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"日志篇\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"log4j-permgen-space-leak\",\"slug\":\"log4j-permgen-space-leak\",\"filename\":\"2013-11-24-log4j-permgen-space-leak.md\",\"title\":\"log4j 和 java.lang.OutOfMemoryError PermGen space\",\"date\":\"2013-11-24\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Log4j\"],\"readTime\":\"19 分钟\",\"excerpt\":\"\u003cp 还是\u003ca href=\\\"http://www.coderli.com\\\"OneCoder\u003c/a在项目中沙箱的问题,用classloader隔离做的沙箱,反复运行用户的任务,出现永生区内存溢出:\u003cbr / java.lang.OutOfMemoryError: PermGen space\u003c/p \u003cp 这个问题在tomc...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"log4j-thread-context-classloader\",\"slug\":\"log4j-thread-context-classloader\",\"filename\":\"2013-11-21-log4j-thread-context-classloader.md\",\"title\":\"log4j 多classloader重复加载配置问题解决\",\"date\":\"2013-11-21\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Log4j\"],\"readTime\":\"4 分钟\",\"excerpt\":\"\u003cp 最近\u003ca href=\\\"http://www.coderli.com\\\"OneCoder\u003c/a在开发隔离任务运行的沙箱,用于隔离用户不同任务间以及任务和框架本身运行代码的隔离和解决潜在的jar包冲突问题。\u003cbr / \u003c!--break-- 运行发现,隔离的任务正常运行,但是却没有任何日志记录。从控制台可看到如下错误信...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"log4j-mdc-clear\",\"slug\":\"log4j-mdc-clear\",\"filename\":\"2013-11-20-log4j-mdc-clear.md\",\"title\":\"log4j 清除MDC上下文 MDC分类日志\",\"date\":\"2013-11-20\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Log4j\"],\"readTime\":\"2 分钟\",\"excerpt\":\"在项目里需要分类收集处理日志信息,使用log4j的MDC在线程中添加分类信息。不过最近却出现日志信息记录错误的情况,具体来说,就是会出现本来是属于下一个分类的一部分信息莫名的记录到上一个分类的日志文件中了。这很显然是MDC信息错误造成的。其实,最开始暴露给我们的现象是,在日志清空后,第一次运行任务,会出现两条日志。显然...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"日志篇\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"windows64-java-jni-dll\",\"slug\":\"windows64-java-jni-dll\",\"filename\":\"2013-11-19-windows64-java-jni-dll.md\",\"title\":\"Java JNI Windows64位系统下 使用32位的dll\",\"date\":\"2013-11-19\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Java\"],\"readTime\":\"3 分钟\",\"excerpt\":\"\u003cp 今天遇到在处理一个多classloader调用本地native方法报错的问题的时候,想要通过调用本地的一个dll进行测试。该dll是在32位环境下编译的。而\u003ca href=\\\"http://www.coderli.com\\\"OneCoder\u003c/a的调试机器是64位的win7。自然调用会报如下错误:\u003c/p \u003cblock...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty4-hello-world\",\"slug\":\"netty4-hello-world\",\"filename\":\"2013-11-17-netty4-hello-world.md\",\"title\":\"Java NIO框架Netty教程(十七) - Netty4 Hello world\",\"date\":\"2013-11-17\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Netty\"],\"readTime\":\"9 分钟\",\"excerpt\":\"最近很多人问我有没有Netty4的Hello World样例,很早之前知道Netty要出4,当时只知道4的包名完全边了,因为Netty从JBoss中独立出来了,并采用了新的netty.io的域名,但是没想到代码也有这么大的调整。 \u003c!--break-- 既然答应了别人,就抽时间看一下Netty4,也顺便补充一下自己的知...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"slf4j-log4j-failed\",\"slug\":\"slf4j-log4j-failed\",\"filename\":\"2013-10-17-slf4j-log4j-failed.md\",\"title\":\"slf4j+log4j2 控制台输出错误解决\",\"date\":\"2013-10-17\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Log4j\",\"SLF4J\"],\"readTime\":\"2 分钟\",\"excerpt\":\"\u003cblockquote \u003cp SLF4J: Failed to load class \\\"org.slf4j.impl.StaticLoggerBinder\\\". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See \u003cuhttp:...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"acm-poj-1001\",\"slug\":\"acm-poj-1001\",\"filename\":\"2013-10-16-acm-poj-1001.md\",\"title\":\"Poj1001 求高精度幂\",\"date\":\"2013-10-16\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Java\"],\"readTime\":\"4 分钟\",\"excerpt\":\"实话说,不是正规解法,只是因为用的Java,利用里里面的API而已。仅供一笑了。 PS:代码是AC过的。\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"log4j-appender-ignoresthrowables\",\"slug\":\"log4j-appender-ignoresthrowables\",\"filename\":\"2013-10-12-log4j-appender-ignoresthrowables.md\",\"title\":\"log4j自定义appender实现,处理异常堆栈\",\"date\":\"2013-10-12\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Log4j\"],\"readTime\":\"2 分钟\",\"excerpt\":\"在项目中需要自定义实现一个log4j的appender。根据log中MDC里的信息,构造日志存储的目录结构。自定义实现log4j appender的方法已经介绍过了。主要是覆盖AppenderSkeleton中的appender方法。 日志内容的获取和格式处理,通过Layout进行格式化 这里有个问题,一般情况下,我们...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"gradle-maven-local-repositories\",\"slug\":\"gradle-maven-local-repositories\",\"filename\":\"2013-10-08-gradle-maven-local-repositories.md\",\"title\":\"Gradle 使用Maven本地缓存库\",\"date\":\"2013-10-08\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Gradle\"],\"readTime\":\"2 分钟\",\"excerpt\":\"从Maven切换到Gradle,原有的几G的本地缓存库当然想继续使用。在用户手册中找到了答案。在50.6.3章节。 如果想使用Maven本地缓存,需要定义: Gradle使用与Maven相同的策略去定位本地Maven缓存的位置。如果在settings.xml中定义了本地Maven仓库的地址,则使用该地址。在USERHO...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"translate-gradle-userguide-multi-projectjavabuild\",\"slug\":\"translate-gradle-userguide-multi-projectjavabuild\",\"filename\":\"2013-09-24-translate-gradle-userguide-multi-projectjavabuild.md\",\"title\":\"《Gradle user guide》翻译 — 7.3 多工程Java构建\",\"date\":\"2013-09-24\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Gradle\",\"翻译\"],\"readTime\":\"4 分钟\",\"excerpt\":\"现在我们来看一个典型的多项目构建的例子。下面是工程的布局: 样例7.10 多项目构建 - 分层布局 构建结构 注意:本样例的代码可以在Gradle完整安装包的samples/java/multiproject目录下找到 这里我们有三个工程。api工程生成用于Java客户端访问XML webservice服务的JAR包。...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"translate-gradle-userguide-a-basic-java-project\",\"slug\":\"translate-gradle-userguide-a-basic-java-project\",\"filename\":\"2013-09-23-translate-gradle-userguide-a-basic-java-project.md\",\"title\":\"《Gradle user guide》翻译 — 7.2 一个基本的Java项目\",\"date\":\"2013-09-23\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Gradle\",\"翻译\"],\"readTime\":\"9 分钟\",\"excerpt\":\"7.2 一个基本的Java项目 我们来看一个简单的例子。把下面的代码加入你的构建文件,以使用Java插件: 例子 7.1 使用Java插件 注意:该样例的代码可在Gradle的安装包中的samples/java/quickstart路径下找到。 这就是你定义一个Java项目所需要做的一切。这就会在你项目里使用Java插...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"translate-gradle-userguide-6\",\"slug\":\"translate-gradle-userguide-6\",\"filename\":\"2013-09-21-translate-gradle-userguide-6.md\",\"title\":\"《Gradle user guide》原创翻译 — 第六章 构建脚本基础\",\"date\":\"2013-09-21\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Gradle\",\"翻译\"],\"readTime\":\"4 分钟\",\"excerpt\":\"译者注:从第六章开始翻译,为了个人学习需要,先省略了前面已经了解和不太相关部分。见谅。\u003cbr / \u003cbr / 6.1 项目和任务\u003cbr / \u003cbr / Gradle里的一切都基于两个基本概念:项目和任务。(projects and tasks)。\u003cbr / \u003cbr / 每个Gradle构建都是由一个或多个项目组成的。项...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"gradle-userguide-javaplugin\",\"slug\":\"gradle-userguide-javaplugin\",\"filename\":\"2013-09-21-gradle-userguide-javaplugin.md\",\"title\":\"《Gradle user guide》翻译 — 第七章 Java快速开始\",\"date\":\"2013-09-21\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\"],\"tags\":[\"Gradle\"],\"readTime\":\"2 分钟\",\"excerpt\":\"7.1 Java插件 \u003cp 如我们所了解的,Gradle是一个通用的构建工具。它可以通过你的构建脚本实现几乎任何你想做的事情。不过,作为开箱即用的产品,它不会做任何构建脚本不包含的任务。\u003c/p 大多数的Java项目都跟基础情况很相似:你需要编译你的Java源文件,执行单元测试,并且创建一个包含你的类的JAR包。如果你不...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"log4j-custom-appender\",\"slug\":\"log4j-custom-appender\",\"filename\":\"2013-09-17-log4j-custom-appender.md\",\"title\":\"自定义实现log4j的appender\",\"date\":\"2013-09-17\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Log\"],\"tags\":[\"Log4j\"],\"readTime\":\"3 分钟\",\"excerpt\":\"log4j,应用最广泛的日志框架。其作者后来推出logback,也是好选择。不多说废话。 log4j组件介绍 Log4j主要有三个组件: Logger:负责供客户端代码调用,执行debug(Object msg)、info(Object msg)、warn(Object msg)、error(Object msg)等方...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Log\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-countsort\",\"slug\":\"java-countsort\",\"filename\":\"2013-09-12-java-countsort.md\",\"title\":\"计数排序Java实现\",\"date\":\"2013-09-12\",\"author\":\"onecoder\",\"categories\":[\"算法学习\"],\"tags\":[\"Java\",\"排序\",\"算法\"],\"readTime\":\"3 分钟\",\"excerpt\":\"计数排序\u0026mdash;\u0026mdash;线性排序算法《算法导论》8.2\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"jppf-remote-log\",\"slug\":\"jppf-remote-log\",\"filename\":\"2013-07-17-jppf-remote-log.md\",\"title\":\"JPPF-log4j远程日志管理\",\"date\":\"2013-07-17\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"JPPF\"],\"tags\":[\"JPPF\"],\"readTime\":\"6 分钟\",\"excerpt\":\"\u003cp 利用JPPF进行并行计算,计算任务运行在远端节点上,那么如何收集运行在远端的任务日志,用于跟踪和分析呢?\u003c/p \u003cp JPPF框架对此也有封装,主要的实现思路是,通过自定义实现一个log4j的appender,对外提供JMX服务。客户端(监控端)实现一个监听器,监听远端日志,这样即可把远端日志采集到本地进行统一的...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"JPPF\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"jppf-classloader\",\"slug\":\"jppf-classloader\",\"filename\":\"2013-07-12-jppf-classloader.md\",\"title\":\"JPPF并行计算框架类加载机制研究\",\"date\":\"2013-07-12\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"JPPF\"],\"tags\":[\"JPPF\"],\"readTime\":\"10 分钟\",\"excerpt\":\"\u003cp 不算什么深入的研究,主要是了解下JPPF中类的加载和隔离机制。\u003c/p \u003cp JPPF中类的加载采用的是分布式类加载技术。这样既可在Node节点运行在node上并不存在的类。也就是类可以仅在用户的Client端存在。\u003c/p \u003cp style=\\\"text-align: center;\\\" \u003cimg alt=\\\"\\\" src...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"JPPF\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"jppf-3-first-use\",\"slug\":\"jppf-3-first-use\",\"filename\":\"2013-07-10-jppf-3-first-use.md\",\"title\":\"并行计算框架JPPF3.3.4试用\",\"date\":\"2013-07-10\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"JPPF\"],\"tags\":[\"JPPF\"],\"readTime\":\"7 分钟\",\"excerpt\":\"\u003cp 先说一个挺有意思的事情,就在OneCoder准备记录试用过程的时候,给大家截图下载页面的时候,发现最新版本变成3.3.4了。于是,我也只好重新下载了:)\u003c/p \u003cp 关于JPPF的介绍,可访问其官网:\u003ca href=\\\"http://www.jppf.org\\\"http://www.jppf.org\u003c/a\u003cbr /...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"JPPF\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"hessian-spring-fileupload\",\"slug\":\"hessian-spring-fileupload\",\"filename\":\"2013-07-04-hessian-spring-fileupload.md\",\"title\":\"Hessian4.0.7+Spring3.2.2文件上传\",\"date\":\"2013-07-04\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Spring\"],\"tags\":[\"Spring\"],\"readTime\":\"8 分钟\",\"excerpt\":\"\u003cp 最近用Hessian4.0.7做文件上传,先给出自己做试验的样例代码,写在tomcat7下,采用servlet3.0,配置代码如下:\u003c/p \u003cp 定义接口,并在服务端实现,Hessian4.0开始支持流作为参数传递,以前则采用byte[]方式传递:\u003c/p \u003cp class=\\\"p1\\\" 客户端调用:\u003c/p \u003cp 很简...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Spring\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"gradle-eclipse\",\"slug\":\"gradle-eclipse\",\"filename\":\"2013-03-19-gradle-eclipse.md\",\"title\":\"Gradle初试\",\"date\":\"2013-03-19\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Gradle\"],\"tags\":[\"Gradle\"],\"readTime\":\"6 分钟\",\"excerpt\":\"\u003cp Gradle是什么就不多说了,跟Maven是同类型的工具。Spring和Hibernate都早已经迁移了过来。官网地址:\u003ca href=\\\"http://www.gradle.org\\\"http://www.gradle.org\u003c/a。最新稳定版为1.4\u003c/p \u003cp Gradle Eclipse Plugin是spr...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Gradle\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"macos-jdk-eclipse-config\",\"slug\":\"macos-jdk-eclipse-config\",\"filename\":\"2013-01-12-macos-jdk-eclipse-config.md\",\"title\":\"Mac OS 下 Java开发环境搭建\",\"date\":\"2013-01-12\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Eclipse\"],\"tags\":[\"Java\"],\"readTime\":\"2 分钟\",\"excerpt\":\"\u003ca href=\\\"http://www.coderli.com\\\"OneCoder\u003c/a最近入手一台Mac Pro。其实这个话题本来没什么可写的。但是考虑确实自己开始是不知道的,哪怕是一丁点的收获,也应该记录下来。 其实Java开发环境无非就是安装JDK,安装IDE,配置环境变量。JDK自然从官网下载Mac版的,IDE,...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Eclipse\",\"previewImg\":\"/images/oldposts/11JWWn.jpg\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"maven-export-jar-file\",\"slug\":\"maven-export-jar-file\",\"filename\":\"2012-11-22-maven-export-jar-file.md\",\"title\":\"导出Maven工程依赖的Jar包\",\"date\":\"2012-11-22\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Maven\"],\"tags\":[\"Maven\"],\"readTime\":\"2 分钟\",\"excerpt\":\"其实这个本来没什么可写的,只是\u003ca href=\\\"http://www.coderli.com\\\"OneCoder\u003c/a恰巧用到又不会,在网上查了一下找到了答案,所以记录一下,也做分享。 很简单,一句话,执行: 会将依赖的包拷贝到工程的lib目录下。\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Maven\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"translate-java-collections-bigdata-mapdb\",\"slug\":\"translate-java-collections-bigdata-mapdb\",\"filename\":\"2012-11-12-translate-java-collections-bigdata-mapdb.md\",\"title\":\"用16G内存在Java Map中处理30亿对象\",\"date\":\"2012-11-12\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"JDK\"],\"tags\":[\"Java\"],\"readTime\":\"8 分钟\",\"excerpt\":\"在一个下雨的夜晚,我在思考Java中内存管理的问题,以及Java集合对内存使用的效率情况。我做了一个简单的实验,测试在16G内存条件下,Java的Map可以插入多少对象。 这个试验的目的是为了得出集合的内部上限。所以,我决定使用很小的key和value。所有的测试,都是在64w位linux环境下进行的,操作系统是ubu...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"JDK\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"junit-spring-test-applicationcontext\",\"slug\":\"junit-spring-test-applicationcontext\",\"filename\":\"2012-10-22-junit-spring-test-applicationcontext.md\",\"title\":\"SpringTest框架JUnit单元测试用例获取ApplicationContext实例的方法\",\"date\":\"2012-10-22\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Spring\"],\"tags\":[\"JUnit\"],\"readTime\":\"3 分钟\",\"excerpt\":\"JUnit单元测试用例中使用Spring框架,之前我的使用方式很直接。 在测试的过程中,有人提到,想要获取ApplicationContext实例。于是,添加了对ApplicationContext的注入。 其实,Spring中早已直接提供了更加方便使用的基类:AbstractJUnit4SpringContextTe...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Spring\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"spring-configuration-autowire-failed\",\"slug\":\"spring-configuration-autowire-failed\",\"filename\":\"2012-10-19-spring-configuration-autowire-failed.md\",\"title\":\"Spring3.1完全基于注解配置@Configuration类中@Autowire无法注入问题解决\",\"date\":\"2012-10-19\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Spring\"],\"tags\":[\"Spring\"],\"readTime\":\"18 分钟\",\"excerpt\":\"在上回介绍Spring3.1+Hibernate4.1.7基于注解配置的时候(\u003ca href=\\\"http://www.coderli.com/spring-hibernate-base-annotation\\\"《SpringMVC3.1+Hibernate4.1.7完全基于注解配置(零配置文件)》\u003c/a)说过,在修改配置...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Spring\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"spring-hibernate-base-annotation\",\"slug\":\"spring-hibernate-base-annotation\",\"filename\":\"2012-10-18-spring-hibernate-base-annotation.md\",\"title\":\"SpringMVC3.1+Hibernate4.1.7完全基于注解配置(零配置文件)\",\"date\":\"2012-10-18\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Spring\"],\"tags\":[\"Spring\",\"Hibernate\"],\"readTime\":\"8 分钟\",\"excerpt\":\"其实这篇文章应该是上篇\u003ca href=\\\"http://www.coderli.com/springmvc-servlet3-code-bases-configuration\\\"《Servlet3.0下基于注解的SpringMVC3.1配置-完全零配置文件》\u003c/a的续篇,因为上篇只介绍到web工程和Spring(包括MVC...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Spring\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"springmvc-servlet3-code-bases-configuration\",\"slug\":\"springmvc-servlet3-code-bases-configuration\",\"filename\":\"2012-10-15-springmvc-servlet3-code-bases-configuration.md\",\"title\":\"Servlet3.0下基于注解的SpringMVC3.1配置-完全零配置文件\",\"date\":\"2012-10-15\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Spring\"],\"tags\":[\"Spring\"],\"readTime\":\"7 分钟\",\"excerpt\":\"\u003cp Spring3.1.x系列的一个新特性就是支持了Servlet3.0规范,基于注解的方式配置SpringMVC框架。官方文档描述如下:\u003c/p \u003cblockquote \u003cdiv \u003cdiv \u003cdiv \u003ch3 3.1.10\u0026nbsp;Support for Servlet 3 code-based configurat...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Spring\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"timertask-period-test\",\"slug\":\"timertask-period-test\",\"filename\":\"2012-10-10-timertask-period-test.md\",\"title\":\"Java Timer任务执行消耗事件大于执行周期问题验证\",\"date\":\"2012-10-10\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"JDK\"],\"tags\":[\"Java\"],\"readTime\":\"3 分钟\",\"excerpt\":\"\u003cp 其实是一个不值得一提的小问题,不过既然验证了,就拿出来分享一下吧。\u003c/p \u003cdiv \u003ca href=\\\"http://www.coderli.com\\\"OneCoder\u003c/a在要做一个周期性的任务,Timer即可实现,不过考虑到有可能在一个周期内,任务可能没有结束,不知道Timer的处理方式,是直接启动下一个,还是等...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"JDK\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"translate-java-parsing-csv-files\",\"slug\":\"translate-java-parsing-csv-files\",\"filename\":\"2012-10-08-translate-java-parsing-csv-files.md\",\"title\":\"Java 解析CSV文件\",\"date\":\"2012-10-08\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"JDK\"],\"tags\":[\"Java\"],\"readTime\":\"4 分钟\",\"excerpt\":\"\u003cp 十一匆匆的就过去了,OneCoder过的也是有点恍惚。不知道都做了什么,心却有点散。做一篇翻译,权当收收心,找找感觉吧。\u003c/p \u003cdiv 原文地址:\u003ca href=\\\"http://www.markhneedham.com/blog/2012/09/23/java-parsing-csv-files/\\\"http:/...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"JDK\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"eclipse-tomcat-maven-logback-servlet-web\",\"slug\":\"eclipse-tomcat-maven-logback-servlet-web\",\"filename\":\"2012-09-29-eclipse-tomcat-maven-logback-servlet-web.md\",\"title\":\"Eclipse4.2+Tomcat7+Maven3+Servlet3.0 J2EE工程配置说明\",\"date\":\"2012-09-29\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Eclipse\"],\"tags\":[\"Java\"],\"readTime\":\"10 分钟\",\"excerpt\":\"\u003ca href=\\\"http://www.coderli.com\\\"OneCoder\u003c/a准备自己慢慢写点东西,把离散的知识点汇总一下。给出的版本没什么特别的含义,只是\u003ca href=\\\"http://www.coderli.com\\\"OneCoder\u003c/a目前使用的环境而已。 \u003cul \u003cli IDE:Eclipse4.2 J...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Eclipse\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"translate-callable-vs-runnable-brawl\",\"slug\":\"translate-callable-vs-runnable-brawl\",\"filename\":\"2012-09-25-translate-callable-vs-runnable-brawl.md\",\"title\":\"Callable vs Runnable - Runners间的“争论”\",\"date\":\"2012-09-25\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"JDK\"],\"tags\":[\"翻译\"],\"readTime\":\"3 分钟\",\"excerpt\":\"\u003cp 看到一篇通过模拟Runnable和Callable对话的方式,形象的讲述Java中Runnable和Callable区别的文章,遂决定ç
1¿»è¯‘过来加深印象与大家分享。\u003c/p \u003cp 英文原文地址:\u003ca href=\\\"http://java.dzone.com/articles/callable-vs-runnable-b...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"JDK\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty-server-bootstrap-nio-source-analysis\",\"slug\":\"netty-server-bootstrap-nio-source-analysis\",\"filename\":\"2012-09-25-netty-server-bootstrap-nio-source-analysis.md\",\"title\":\"Java NIO框架Netty教程(十六)-ServerBootStrap启动流程源码分析\",\"date\":\"2012-09-25\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Netty\"],\"tags\":[\"Netty\"],\"readTime\":\"8 分钟\",\"excerpt\":\"有一段事件没有更新文章了,各种原因都有吧。搬家的琐事,搬家后的安逸呵呵。不过,\u003ca href=\\\"http://www.coderli.com\\\"OneCoder\u003c/a明白,绝不能放松。对于Netty的学习,也该稍微深入一点了。 所以,这次\u003ca href=\\\"http://www.coderli.com\\\"OneCoder\u003c/...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Netty\",\"previewImg\":\"/images/oldposts/aGtVD.jpg\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"restlet-404-client-protocol\",\"slug\":\"restlet-404-client-protocol\",\"filename\":\"2012-09-17-restlet-404-client-protocol.md\",\"title\":\"Restlet一个由Client的Protocol引发的404的问题\",\"date\":\"2012-09-17\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Restlet\"],\"tags\":[\"Restlet\"],\"readTime\":\"2 分钟\",\"excerpt\":\"今天\u003ca href=\\\"http://www.coderli.com\\\"OneCoder\u003c/a遇到一个不大不小的问题。用Restlet开启了一个rest服务,并且在这个服务内部还会访问其他的rest服务,结果遇到404的错误。但是通过浏览器直接访问却可以访问,通过测试用例直接访问也可以,只有在间接通过restlet访问的时...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Restlet\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty-file-transfer\",\"slug\":\"netty-file-transfer\",\"filename\":\"2012-09-13-netty-file-transfer.md\",\"title\":\"Java NIO框架Netty教程(十五)-利用Netty进行文件传输\",\"date\":\"2012-09-13\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Netty\"],\"tags\":[\"Netty\"],\"readTime\":\"7 分钟\",\"excerpt\":\"如果您持续关注\u003ca href=\\\"http://www.coderli.com\\\"OneCoder\u003c/a,您可能会问,在\u003ca href=\\\"http://www.coderli.com/netty-oio-nio\\\"《Java NIO框架Netty教程(十四)- Netty中OIO模型(对比NIO)》\u003c/a中不是说下节介绍的是...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Netty\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty-oio-nio\",\"slug\":\"netty-oio-nio\",\"filename\":\"2012-09-06-netty-oio-nio.md\",\"title\":\"Java NIO框架Netty教程(十四)-Netty中OIO模型(对比NIO)\",\"date\":\"2012-09-06\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Netty\"],\"tags\":[\"Netty\"],\"readTime\":\"5 分钟\",\"excerpt\":\"\u003ca href=\\\"http://www.coderli.com\\\"OneCoder\u003c/a这个周末搬家,并且新家目前还没有网络,本周的翻译的任务尚未完成,下周一起补上,先上一篇OIO和NIO对比的小研究。 Netty中不光支持了Java中NIO模型,同时也提供了对OIO模型的支持。(Ne
1w IO vs Old IO)。 首...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Netty\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"maven-appassembler-plugin-bat\",\"slug\":\"maven-appassembler-plugin-bat\",\"filename\":\"2012-09-04-maven-appassembler-plugin-bat.md\",\"title\":\"利用Maven插件打包产生可运行bat文件\",\"date\":\"2012-09-04\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Maven\"],\"tags\":[\"Maven\"],\"readTime\":\"5 分钟\",\"excerpt\":\"其实是一个很简单的技巧,就是利用Maven的appassembler-maven-plugin插件,就可以实现自动打包可运行的脚本,还可以跨平台。(Windows/linux) 首先在pom.xml文件的build节点下配置插件: 然后选择你要编译的工程,右键-maven build... 命令如下图: 然后Run一下...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Maven\",\"previewImg\":\"/images/oldposts/ogPHi.jpg\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty-concurrency-problem-test-end\",\"slug\":\"netty-concurrency-problem-test-end\",\"filename\":\"2012-08-30-netty-concurrency-problem-test-end.md\",\"title\":\"Java NIO框架Netty教程(十三)-并发访问测试(下)\",\"date\":\"2012-08-30\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Netty\"],\"tags\":[\"Netty\"],\"readTime\":\"8 分钟\",\"excerpt\":\"在上节(\u003ca href=\\\"http://www.coderli.com/netty-concurrency-problem-test-two\\\" target=\\\"\\\\blank\\\"《Java NIO框架Netty教程(十二)-并发访问测试(中)》\u003c/a),我们从各个角度对Netty并发的场景进行了测试。这节,我们将重点关注上...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Netty\",\"previewImg\":\"/images/oldposts/4hFcy.jpg\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"translate-organize-imports-eclipse\",\"slug\":\"translate-organize-imports-eclipse\",\"filename\":\"2012-08-28-translate-organize-imports-eclipse.md\",\"title\":\"在Eclipse中管理Java类引用的技巧\",\"date\":\"2012-08-28\",\"author\":\"onecoder\",\"categories\":[\"翻译\",\"知识扩展\"],\"tags\":[\"Eclipse\"],\"readTime\":\"2 分钟\",\"excerpt\":\"今天,我学到了一个在Eclipse中管理引用的小技巧。当然,你可以在单个文件中用Ctrl+shift+O去移除未使用的引用。但是,如果你想移除很多类的无用的引用你该如何åŽ
1»åšï¼Œæ¯”如移除整个包下的类? 很简单,在包浏览(Package Exporler)视图下,右击你想要修改的包,然后依次选择source -\u0026gt; Or...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"知识扩展\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-study-resolve-problem-by-itself\",\"slug\":\"java-study-resolve-problem-by-itself\",\"filename\":\"2012-08-21-java-study-resolve-problem-by-itself.md\",\"title\":\"OneCoder愚见 Java初学者如何自学和自己定位解决问题\",\"date\":\"2012-08-21\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"随笔\"],\"tags\":[\"Java\"],\"readTime\":\"9 分钟\",\"excerpt\":\"今天群里(Java爱好者群:982860385)的朋友,问我该如何看帮助文档,或者说在遇到问题的时候如何解决。希望我能介绍一下我的方法。 这个\u003ca href=\\\"http://www.coderli.com\\\"OneCoder\u003c/a其实没有资格高谈阔论,只能说说个人的习惯和方式。自学和自我解决问题确实是一项非常非常重要的能...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"随笔\",\"previewImg\":\"/images/oldposts/hcrs8.jpg\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty-concurrency-problem-test-two\",\"slug\":\"netty-concurrency-problem-test-two\",\"filename\":\"2012-08-20-netty-concurrency-problem-test-two.md\",\"title\":\"Java NIO框架Netty教程(十二)-并发访问测试(中)\",\"date\":\"2012-08-20\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Netty\"],\"tags\":[\"Netty\"],\"readTime\":\"11 分钟\",\"excerpt\":\"写在前面:对Netty并发问题的测试和解决完全超出了我的预期,想说的东西越来越多。所以才出现这个中篇,也就是说,一定会有下篇。至于问题点的发现,\u003ca href=\\\"http://www.coderli.com\\\"OneCoder\u003c/a也在努力验证中。 继续并发的问题。在\u003ca href=\\\"http://www.coderli...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Netty\",\"previewImg\":\"/images/oldposts/7FrMP.jpg\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty-concurrency-problem-one\",\"slug\":\"netty-concurrency-problem-one\",\"filename\":\"2012-08-11-netty-concurrency-problem-one.md\",\"title\":\"Java NIO框架Netty教程(十一)-并发访问测试(上)\",\"date\":\"2012-08-11\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Netty\"],\"tags\":[\"Netty\"],\"readTime\":\"4 分钟\",\"excerpt\":\"之前更新了几篇关于JVM研究的文章,其实也是在做本篇文章验证的时候,跑的有点远,呵呵。回归Netty教程,这次要讲的其实是针对一个问题的研究和验证结论。另外,最近工作比较忙,所以可能会分文章更新一些阶段性的成果,而不是全部汇总更新,以免间隔过久。 起因是一个朋友,通过微博私信给我一个问题,大意是说他在用Netty做并发...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Netty\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"jvm-heap-code-overflow\",\"slug\":\"jvm-heap-code-overflow\",\"filename\":\"2012-08-06-jvm-heap-code-overflow.md\",\"title\":\"JVM运行时数据区详解-Heap堆(优化配置、代码样例)\",\"date\":\"2012-08-06\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"JVM\"],\"tags\":[\"JVM\"],\"readTime\":\"6 分钟\",\"excerpt\":\"在Java虚拟机中,堆(Heap)是可供各条线程共享的运行时内存区域,也是供所有类实例和数组对象分配内存的区域。 Java堆在虚拟机启动的时候就被创建,它存储了被自动内存管理系统(Automatic Storage Management System,也即是常说的\\\"Garbage Collector(垃圾收集器)\\\")所...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"JVM\",\"previewImg\":\"/images/post/jvm-heap/heap.png\",\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"windows-libvirt-api-three\",\"slug\":\"windows-libvirt-api-three\",\"filename\":\"2012-08-04-windows-libvirt-api-three.md\",\"title\":\"Windows下Libvirt Java API使用教程(三)- TLS认证访问和动态连接文件依赖\",\"date\":\"2012-08-04\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Libvirt\"],\"tags\":[\"Libvirt\"],\"readTime\":\"15 分钟\",\"excerpt\":\"突兀的出来一个libvirt的教程三,您可能会觉得奇怪,其实这是OneCoder以前写的一个小系列教程,原来发在51cto的博客上,前两篇已经发了过来,考虑到完整性,就把第三篇也发过来。前两篇地址: - 《\u003ca href=\\\"http://www.coderli.com/windows-libvirt-one/\\\" tar...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Libvirt\",\"previewImg\":\"/images/oldposts/GyTui.jpg\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"jvm-stack-code-overflow\",\"slug\":\"jvm-stack-code-overflow\",\"filename\":\"2012-08-03-jvm-stack-code-overflow.md\",\"title\":\"JVM运行时数据区详解-Stack栈(优化配置、代码样例)\",\"date\":\"2012-08-03\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"JVM\"],\"tags\":[\"JVM\"],\"readTime\":\"9 分钟\",\"excerpt\":\"最近有段时间没有更新Netty的教程了,却发了一些其他的东西。可能有的朋友会问,难道这就完事了?不会的。两方面原因。第一、笔者也是需要工作的人,自然要完成好工作中的任务,这里面也有很多东西需要学习和研究,这也是我分享的方向和源泉。第二、想要掌握好Netty,周边的知识也不能少,这也是笔者在恶补的东西。所以,你完全可以把...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"JVM\",\"previewImg\":\"/images/oldposts/sXecH.jpg\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty-object-continuous-readwrite\",\"slug\":\"netty-object-continuous-readwrite\",\"filename\":\"2012-07-27-netty-object-continuous-readwrite.md\",\"title\":\"Java NIO框架Netty教程(十)-Object对象的连续收发解析分析\",\"date\":\"2012-07-27\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Netty\"],\"tags\":[\"Netty\"],\"readTime\":\"32 分钟\",\"excerpt\":\"如果您一直关注OneCoder,我们之前有两篇文章介绍关于Netty消息连续收发的问题。( \u003ca href=\\\"http://www.coderli.com/netty-message-receive-count-mismatch/\\\" target=\\\"\\\\blank\\\"《Java NIO框架Netty教程(五)- 消息收发次...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Netty\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"story-future-java\",\"slug\":\"story-future-java\",\"filename\":\"2012-07-26-story-future-java.md\",\"title\":\"Java小故事 我许你一个未来 Future\",\"date\":\"2012-07-26\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"JDK\"],\"tags\":[\"Java\"],\"readTime\":\"3 分钟\",\"excerpt\":\"还是梳理代码,频频到Future这个字眼,很自然的让我想到了未来。 还是那对男孩和女孩,女孩问男孩,你会娶我吗?男孩说,一定会,等我为你盖好一栋美丽的房子……\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"JDK\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"story-boygirl-observer\",\"slug\":\"story-boygirl-observer\",\"filename\":\"2012-07-25-story-boygirl-observer.md\",\"title\":\"Java小故事 不舍得叫醒女孩的男孩 观察者模式\",\"date\":\"2012-07-25\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"JDK\"],\"tags\":[\"Java\"],\"readTime\":\"3 分钟\",\"excerpt\":\"今天在梳理项目里一些老的代码逻辑和结构的时候,发现了一段观察者的代码。脑海里同时浮现出这样一个故事…… 有一个女孩和一个男孩,他们在山里迷路了。晚上,他们都精疲力尽。男孩对女孩说,你睡会吧,我看着,有动静我叫你,然而……\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"JDK\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty-custom-object-codec\",\"slug\":\"netty-custom-object-codec\",\"filename\":\"2012-07-24-netty-custom-object-codec.md\",\"title\":\"Java NIO框架Netty教程(九)-Object对象编/解码\",\"date\":\"2012-07-24\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Netty\"],\"tags\":[\"Netty\"],\"readTime\":\"8 分钟\",\"excerpt\":\"看到题目,有的同学可能会想,上回不是说过\u003ca href=\\\"http://www.coderli.com/netty-object-transmit/\\\" target=\\\"\\\\blank\\\"对象传递\u003c/a了吗?是的,只是在\u003ca href=\\\"http://www.coderli.com/netty-object-transmit...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Netty\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"proxifile-eclipse-ipv6\",\"slug\":\"proxifile-eclipse-ipv6\",\"filename\":\"2012-07-23-proxifile-eclipse-ipv6.md\",\"title\":\"Eclipse javaw 通过Proxifile代理ipv6协议问题解决\",\"date\":\"2012-07-23\",\"author\":\"onecoder\",\"categories\":[\"知识扩展\"],\"tags\":[\"Eclipse\"],\"readTime\":\"2 分钟\",\"excerpt\":\"这是一个在比较特殊情况下才会发生的问题。不过却在笔者的身上发生了,既然如此,那就记录一下,也许还有其他朋友也会碰到。 问题描述:笔者办公环境使用Proxifile全局代码上网,不过对于一些不想走代理的程序和地址进行了过滤。然后笔者发现,Eclipse更新不好用了。查看Proxifile记录,发现Eclipse访问网址,...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":\"/images/oldposts/11FR3Q.jpg\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty-object-transmit\",\"slug\":\"netty-object-transmit\",\"filename\":\"2012-07-23-netty-object-transmit.md\",\"title\":\"Java NIO框架Netty教程(八)-Object对象传递\",\"date\":\"2012-07-23\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Netty\"],\"tags\":[\"Netty\"],\"readTime\":\"8 分钟\",\"excerpt\":\"说了这么多废话,才提到对象的传输,不知道您是不是已经不耐烦了。一个系统内部的消息传递,没有对象传递是不太现实的。下面就来说说,怎么传递对象。 如果,您看过前面的介绍,如果您善于专注本质,勤于思考。您应该也会想到,我们说过,Netty的消息传递都是基于流,通过ChannelBuffer传递的,那么自然,Object也需要...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Netty\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty-message-receive-count-mismatch-two\",\"slug\":\"netty-message-receive-count-mismatch-two\",\"filename\":\"2012-07-22-netty-message-receive-count-mismatch-two.md\",\"title\":\"Java NIO框架Netty教程(七)-再谈收发信息次数问题\",\"date\":\"2012-07-22\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Netty\"],\"tags\":[\"Netty\"],\"readTime\":\"4 分钟\",\"excerpt\":\"在\u003ca href=\\\"http://www.coderli.com/netty-message-receive-count-mismatch/\\\" target=\\\"\\\\blank\\\"《Java NIO框架Netty教程(五)- 消息收发次数不匹配的问题》\u003c/a里我们试图分析一个消息收发次数不匹配的问题。当时笔者还是心存疑惑的。...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Netty\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty-nio-selector\",\"slug\":\"netty-nio-selector\",\"filename\":\"2012-07-18-netty-nio-selector.md\",\"title\":\"Java NIO框架Netty教程(六)-Java NIO Selector模式\",\"date\":\"2012-07-18\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Netty\"],\"tags\":[\"Netty\"],\"readTime\":\"6 分钟\",\"excerpt\":\"看到标题,您可能觉得,这跟Netty有什么关系呢?确实,如果你完全是使用Netty的,那么可能你可以完全不需要了解Selector。但是,不得不提的是,Netty底层关于NIO的实现也是基于Java的Selector的,是对Selector的封装。所以,我个人认为理解好Selector对于使用和理解Netty都是很多有...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Netty\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty-message-receive-count-mismatch\",\"slug\":\"netty-message-receive-count-mismatch\",\"filename\":\"2012-07-16-netty-message-receive-count-mismatch.md\",\"title\":\"Java NIO框架Netty教程(五)- 消息收发次数不匹配的问题\",\"date\":\"2012-07-16\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Netty\"],\"tags\":[\"Netty\"],\"readTime\":\"18 分钟\",\"excerpt\":\"周末是最好的学习时间,不过这周末收房子,可想而知事情自然也不会少。这段时间的周末,可能很少有时间学习了。见缝插针吧。 不说废话了,好好学习。\u003ca href=\\\"http://www.coderli.com/netty-channel-stream/\\\" target=\\\"\\\\blank\\\"上回\u003c/a通过代码理解了Netty底层信...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Netty\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty-navi\",\"slug\":\"netty-navi\",\"filename\":\"2012-07-13-netty-navi.md\",\"title\":\"Netty学习专题系列导航\",\"date\":\"2012-07-13\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Netty\"],\"tags\":[\"Netty\"],\"readTime\":\"6 分钟\",\"excerpt\":\"OneCoder原创系列 - \u003ca href=\\\"http://www.coderli.com/netty-course-hello-world/\\\" target=\\\"\\\\blank\\\"Java NIO框架Netty教程(一) - Hello Netty\u003c/a - \u003ca href=\\\"http://www.coderli.com...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Netty\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty-channel-stream\",\"slug\":\"netty-channel-stream\",\"filename\":\"2012-07-13-netty-channel-stream.md\",\"title\":\"Java NIO框架Netty教程(四)- ChannelBuffer\",\"date\":\"2012-07-13\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Netty\"],\"tags\":[\"Netty\"],\"readTime\":\"9 分钟\",\"excerpt\":\"在\u003ca href=\\\"http://www.coderli.com/netty-string-channelbuffer/\\\" target=\\\"\\\\blank\\\"字符串消息收发\u003c/a中提到。ChannelBuffer是Netty中非常重要的概念。所有消息的收发都依赖于这个Buffer。我们通过Netty的官方的文档来了解一下,...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Netty\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"java-i-jvm\",\"slug\":\"java-i-jvm\",\"filename\":\"2012-07-13-java-i-jvm.md\",\"title\":\"Java i=i++值的问题的解答 反编译\",\"date\":\"2012-07-13\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"JDK\"],\"tags\":[\"Java\"],\"readTime\":\"2 分钟\",\"excerpt\":\"昨晚有朋友问我这样的一个问题。 打印的结果为什么是 0。 其实我一下也说不清楚,第一反应就是看看编译后的class文件。 这就好解释了: 至此完成i = i++,所以最后i的值为0 iinc 指令是直接对局部变量区进行操作,操作数栈不发生任何变化,这是由JVM规范定义的。\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"JDK\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty-string-channelbuffer\",\"slug\":\"netty-string-channelbuffer\",\"filename\":\"2012-07-12-netty-string-channelbuffer.md\",\"title\":\"Java NIO框架Netty教程(三)- 字符串消息收发\",\"date\":\"2012-07-12\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Netty\"],\"tags\":[\"Netty\"],\"readTime\":\"9 分钟\",\"excerpt\":\"了解了Netty的\u003ca href=\\\"http://www.coderli.com/netty-two-concepts/\\\" target=\\\"\\\\blank\\\"基本概念\u003c/a,开发起来应该会顺手很多。在\u003ca href=\\\"http://www.coderli.com/netty-course-hello-world/\\\" tar...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Netty\",\"previewImg\":\"/images/oldposts/CT0dH.jpg\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty-two-concepts\",\"slug\":\"netty-two-concepts\",\"filename\":\"2012-07-11-netty-two-concepts.md\",\"title\":\"Java NIO框架Netty教程(二) - 白话概念\",\"date\":\"2012-07-11\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Netty\"],\"tags\":[\"Netty\"],\"readTime\":\"4 分钟\",\"excerpt\":\"\u003ca href=\\\"http://www.coderli.com/netty-course-hello-world/\\\" target=\\\"\\\\blank\\\" \\\"Hello World\\\"\u003c/a的代码固然简单,不过其中的几个重要概念(类)和 Netty的工作原理还是需要简单明确一下,至少知道其是负责什。方便自己以后更灵活的使用和扩...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Netty\",\"previewImg\":\"/images/oldposts/FjuwT.jpg\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty-course-hello-world\",\"slug\":\"netty-course-hello-world\",\"filename\":\"2012-07-11-netty-course-hello-world.md\",\"title\":\"Java NIO框架Netty教程(一) - Hello Netty\",\"date\":\"2012-07-11\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Netty\"],\"tags\":[\"Netty\"],\"readTime\":\"7 分钟\",\"excerpt\":\"先啰嗦两句,如果你还不知道Netty是做什么的能做什么。那可以先简单的搜索了解一下。我只能说Netty是一个NIO的框架,可以用于开发分布式的Java程序。具体能做什么,各位可以尽量发挥想象。技术,是服务于人而不是局限住人的。 Netty的简介和下载可参考:开源Java高性能NIO框架推荐。注意,此时的最新版已经为3....\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Netty\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"log4j-console-file-garbled\",\"slug\":\"log4j-console-file-garbled\",\"filename\":\"2012-07-05-log4j-console-file-garbled.md\",\"title\":\"Log4J 控制台和文件输出乱码问题解决\",\"date\":\"2012-07-05\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Log\"],\"tags\":[\"Log\"],\"readTime\":\"3 分钟\",\"excerpt\":\"一个小问题,却让我感觉到,现在真正动脑的人很少。。我来说说吧。 今天遇到一个小问题,log4j输出到文件乱码,控制台正常。显然是编码问题导致。Google一搜,几乎一水的说: 项目中log4j在英文版linux下输出中文日志为乱码。由于log4j配置文件中没有设置编码格式(encoding),所以log4j就使用系统默...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Log\",\"previewImg\":\"/images/post/log4j-console/console-config.png\",\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"unexpected-java-nullpointexception\",\"slug\":\"unexpected-java-nullpointexception\",\"filename\":\"2012-07-04-unexpected-java-nullpointexception.md\",\"title\":\"一个容易忽略的Java空指针问题\",\"date\":\"2012-07-04\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"JDK\"],\"tags\":[\"Java\"],\"readTime\":\"2 分钟\",\"excerpt\":\"今天有人提出了代码中一个的NullPointException问题。这类问题,很好解决,找到所在行,一看便知。 但是这次,有点意外。抛异常的行,只是一个简单的Pojo的get、set方法。出错的行在 很自然的想到b会为null。但是前面的代码已经用过b了,也就是说,如果b是null。早就抛出空指针了。a是新new的。不...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"JDK\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"netty-object-readwrite\",\"slug\":\"netty-object-readwrite\",\"filename\":\"2012-07-04-netty-object-readwrite.md\",\"title\":\"Netty Object传输问题解决\",\"date\":\"2012-07-04\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Netty\"],\"tags\":[\"Netty\"],\"readTime\":\"14 分钟\",\"excerpt\":\"使用Netty开发分布式框架,对象的传输是基本的需求。但是,在开发中却总遇到服务端接受不到客户端的对象发送数据。遂动手解决。 如果看到最后,你可能会发现,笔者的问题是那么的二,不适合你。。所以,你可以决定不看,或者只看样例代码。笔者记录的是,个人的解决过程。 先看一下官方提供的,对象传输的样例代码:(核心部分) 代码很...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Netty\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"try-finally-plain-java\",\"slug\":\"try-finally-plain-java\",\"filename\":\"2012-06-29-try-finally-plain-java.md\",\"title\":\"白话Java - try-finally块\",\"date\":\"2012-06-29\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"JDK\"],\"tags\":[\"Java\"],\"readTime\":\"3 分钟\",\"excerpt\":\"本文讲述的是Java中try finally代码块执行顺序,和当其存在于循环中的时候的跳出和执行问题。白话,也要简化,一段代码,来说明问题。 执行结果: 如果还没看明白,那我再啰嗦两句:finally就是最后的,跟try和catch是兄弟,就好像正常人走try分支,走着走着你不正常了,就开始走catch分支,但是不管你...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"JDK\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"maven-jar-version-conflict\",\"slug\":\"maven-jar-version-conflict\",\"filename\":\"2012-06-29-maven-jar-version-conflict.md\",\"title\":\"Maven 解决Jar包版本冲突\",\"date\":\"2012-06-29\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Maven\"],\"tags\":[\"Maven\"],\"readTime\":\"2 分钟\",\"excerpt\":\"今天遇到一个小问题。在使用apache-commons-codec包进行编码/解码的时候,用到了Base64类的decodeBase64(String base64String)方法,这个方法在1.4版中才提供。而我们的工程中对codec存在两个间接的依赖,一个依赖1.2版本,一个依赖1.4版本,打包后,只有1.2版本...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Maven\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"double-nan-plain-java\",\"slug\":\"double-nan-plain-java\",\"filename\":\"2012-06-28-double-nan-plain-java.md\",\"title\":\"白话Java - Double.NaN\",\"date\":\"2012-06-28\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"JDK\"],\"tags\":[\"Java\"],\"readTime\":\"3 分钟\",\"excerpt\":\"今天处理一个关于Double.NaN的异常。 Unknown column 'NaN' in 'field list' NaN = Not a Number。就是不是数字。我们用0/0.0打印出来的结果就是NaN。 JDK的Double类里,提供的NaN的实现是: 如果是非零的数除以0.0,得出的是:Infinity。...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"JDK\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"maven-install-jar-tools\",\"slug\":\"maven-install-jar-tools\",\"filename\":\"2012-06-27-maven-install-jar-tools.md\",\"title\":\"Maven批量安装本地Jar文件小工具\",\"date\":\"2012-06-27\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Maven\"],\"tags\":[\"Maven\"],\"readTime\":\"13 分钟\",\"excerpt\":\"Maven 批量安装本地 Jar文件到本地Maven库小程序。根据自己的需求临时开发完成。 使用方式: - 在config.properties中,配置待安装jar文件的存放路径。 - 安装时groupId,artifactId,version等信息,根据jar文件的文件名获得。采用分割\\\"-\\\"的方式,解析出来。所以,推...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Maven\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"maven-lastupdated-delete\",\"slug\":\"maven-lastupdated-delete\",\"filename\":\"2012-06-26-maven-lastupdated-delete.md\",\"title\":\"Maven库中.lastUpdated文件自动清除工具\",\"date\":\"2012-06-26\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Maven\"],\"tags\":[\"Maven\"],\"readTime\":\"5 分钟\",\"excerpt\":\"最近开发过程中,在更新maven库时,如果网络问不定或者是一些自己手动安装到本地maven库的jar包,在中心库找不到对应的jar,会生成一些.lastUpdated文件,会导致m2e工具无法找到依赖的jar包,从而提示编译错误。 对于该问题,我也没有找到很好的解决方案,只能手动删除一下lastUpdated文件。文件...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Maven\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"daemon-thread-plain-words\",\"slug\":\"daemon-thread-plain-words\",\"filename\":\"2012-06-25-daemon-thread-plain-words.md\",\"title\":\"白话Java - 守护线程\",\"date\":\"2012-06-25\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"JDK\"],\"tags\":[\"Java\"],\"readTime\":\"7 分钟\",\"excerpt\":\"关于\\\"白话\\\", 偶然想到的词。目的就是用简洁,明快的语言来告诉您,我所知道的一切。 Java中的线程分两类,用户线程和守护线程。 这样就是用户线程。 这样就是守护线程。 起了\\\"守护\\\"线程这么动听的名字,自然要起到\\\"守护\\\"的作用。就好比男人要守护妹子。守护线程的作用,按照网上的说法是: 守护线程则是用来服务用户线程的,如...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"JDK\",\"previewImg\":\"/images/post/daemon-thread/debug-all-live.png\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"windows-libvirt-api-two\",\"slug\":\"windows-libvirt-api-two\",\"filename\":\"2012-06-21-windows-libvirt-api-two.md\",\"title\":\"Windows下Libvirt Java API使用教程(二)- 接口使用说æ
1˜Ž\",\"date\":\"2012-06-21\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Libvirt\"],\"tags\":[\"Libvirt\"],\"readTime\":\"39 分钟\",\"excerpt\":\"介绍完\u003ca href=\\\"http://www.coderli.com/windows-libvirt-one\\\" target=\\\"/blank\\\"libvirt Java API的部署工作\u003c/a,接下来我们就介绍一下接口的使用和代码样例。 libvirt的管理单位是单个主机,所以探测和监控接口所能获取的信息的最大范围也是主...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Libvirt\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"windows-libvirt-one\",\"slug\":\"windows-libvirt-one\",\"filename\":\"2012-06-19-windows-libvirt-one.md\",\"title\":\"Windows下Libvirt Java API使用教程 - 开发环境部署\",\"date\":\"2012-06-19\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Libvirt\"],\"tags\":[\"Libvirt\"],\"readTime\":\"11 分钟\",\"excerpt\":\"\u003ca href=\\\"http://libvirt.org/\\\" target=\\\"\\\\blank\\\"Libvirt\u003c/a是一个优秀的虚拟化环境管理的工具包。核心用c实现,不过提供了不同语言的调用API。官网的简介如下: libvirt is: - A toolkit to interact with the virtualiza...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Libvirt\",\"previewImg\":\"/images/post/windows-libvirt/libvirt-cmd.jpg\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"runnablejar-to-exe\",\"slug\":\"runnablejar-to-exe\",\"filename\":\"2012-06-16-runnablejar-to-exe.md\",\"title\":\"教你打包Java程序,jar转exe随处可跑\",\"date\":\"2012-06-16\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Jar\"],\"tags\":[\"Java\"],\"readTime\":\"6 分钟\",\"excerpt\":\"发现很多人问如何把Jar转成exe程序。可能是想双击运行和随处运行。其实这个并不难,我就简单总结几种方法,供大家参考,关键还是要知其所以然。 Java程序的运行不可能脱离JRE,不管你是Jar包还是exe程序。这点你必须了解。那么在没有JRE的机器上你的程序怎么跑?很简单,在你程序里带一份JRE就行了。 先介绍集中打包...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Jar\",\"previewImg\":\"/images/post/jar-to-exe/export.jpg\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"null-string\",\"slug\":\"null-string\",\"filename\":\"2012-06-14-null-string.md\",\"title\":\"未初始化的String相 \\\"+\\\" 为什么会打印出“nullnull\\\"\",\"date\":\"2012-06-14\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"JDK\"],\"tags\":[\"Java\"],\"readTime\":\"6 分钟\",\"excerpt\":\"今天在我的一个qq群里有人问了这样一个问题。 输出是nullnull。问为什么是这样。 其实问题并不复杂,很多同学也觉得自己知道原因,遂不予关注。但是我相信还是有初学Java的同学在这里是存在误会的。很典型的误会就是如一个群里的朋友说的String类型的变量如果没有显示初始化,默认的值就是\\\"null\\\"。支持的理由就是...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"JDK\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"logback-pattern-caller\",\"slug\":\"logback-pattern-caller\",\"filename\":\"2012-06-14-logback-pattern-caller.md\",\"title\":\"Logback控制台输出类名行号带链接的Pattern配置\",\"date\":\"2012-06-14\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Log\"],\"tags\":[\"Logback\"],\"readTime\":\"2 分钟\",\"excerpt\":\"从log4j切换到logback会发现,原æ
1¥åœ¨log4j使用的日志格式 %l 的功能不见了。Eclipse控制台的输出,不再带有可快速进入的链接了。 在logback里,需要使用%c%L才能打印出完整的类路径和行号。但是却没有链接。查阅了一下,发现了caller这个Pattern。配置好caller:%caller{1...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Log\",\"previewImg\":\"/images/post/logback-console-link/console.jpg\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"multi-thread-junit-grobountils\",\"slug\":\"multi-thread-junit-grobountils\",\"filename\":\"2012-06-13-multi-thread-junit-grobountils.md\",\"title\":\"教你快速写出多线程Junit单元测试用例 - GroboUtils\",\"date\":\"2012-06-13\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"JUnit\"],\"tags\":[\"Groboutils\",\"JUnit\"],\"readTime\":\"6 分钟\",\"excerpt\":\"写过Junit单元测试的同学应该会有感觉,Junit本身是不支持普通的多线程测试的,这是因为Junit的底层实现上,是用System.exit退出用例执行的。JVM都终止了,在测试线程启动的其他线程自然也无法执行。JunitCore代码如下 RealSystem: 所以要想编写多线程Junit测试用例,就必须让主线程等...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"JUnit\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"maven-compile-wildcode-resolve\",\"slug\":\"maven-compile-wildcode-resolve\",\"filename\":\"2012-06-11-maven-compile-wildcode-resolve.md\",\"title\":\"Maven编译报错乱码问题和编译问题解决\",\"date\":\"2012-06-11\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Maven\"],\"tags\":[\"Maven\"],\"readTime\":\"3 分钟\",\"excerpt\":\"最近需要用Maven打包工程,却不想遇到乱码问题。在Eclipse中通过Maven Plugin执行install 命令报错如下: [ERROR] Failure executing javac, but could not parse the error:\\\"一串乱码\\\" 错误信息都是乱码,问题解决起来就头疼了。所以决定...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Maven\",\"previewImg\":\"/images/post/maven-compile-encode/language-setting.jpg\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"spring-wildpath-parse\",\"slug\":\"spring-wildpath-parse\",\"filename\":\"2012-06-10-spring-wildpath-parse.md\",\"title\":\"Spring源码学习-含有通配符路径解析(上)\",\"date\":\"2012-06-10\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Spring\"],\"tags\":[\"Spring\"],\"readTime\":\"38 分钟\",\"excerpt\":\"继续前文\u003ca href=\\\"http://www.coderli.com/spring-filesystem-filepath-parse/\\\" target=\\\"blank\\\"《[原创] Spring源码学习-FileSystemXmlApplicationContext路径格式及解析方式》\u003c/a的问题。 先测试分析包含通配...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Spring\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"spring-filesystem-filepath-parse\",\"slug\":\"spring-filesystem-filepath-parse\",\"filename\":\"2012-06-09-spring-filesystem-filepath-parse.md\",\"title\":\"Spring源码学习-FileSystemXmlApplicationContext路径格式及解析方式\",\"date\":\"2012-06-09\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Spring\"],\"tags\":[\"Spring\"],\"readTime\":\"19 分钟\",\"excerpt\":\"了解完了FileSystemXmlApplicationContext构造函数,我们来看看路径解析的问题。 - 支持路径格式的研究。(绝对?相对?通配符?class
1path格式又如何? - 路径如何解析? 下面,我们就来一一验证和解答。先放出本次测试用的配置文件(app-context.xml和test.propert...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Spring\",\"previewImg\":\"/images/post/springframework-filepath-parse/springsequence-filepath.jpg\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"spring-filexml-constructor\",\"slug\":\"spring-filexml-constructor\",\"filename\":\"2012-06-07-spring-filexml-constructor.md\",\"title\":\"Spring研究-容器初始化之FileSystemXmlApplicationContext构造函数\",\"date\":\"2012-06-07\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Spring\"],\"tags\":[\"Spring\"],\"readTime\":\"20 分钟\",\"excerpt\":\"宅男Coder,没有其他爱好,闲暇之余抱着瞻仰的心态去阅读一下Spring的源码,期许能收获一支半解。要学习Spring的源码,第一步自然是下载和编译Spring的源码,这个我在之前的博文中已经发表过了。具体可参考:\u003ca href=\\\"http://www.coderli.com/springframework-sour...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Spring\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"hibernate-source-compile\",\"slug\":\"hibernate-source-compile\",\"filename\":\"2012-06-06-hibernate-source-compile.md\",\"title\":\"Hibernate4.0源码下载和编译教程\",\"date\":\"2012-06-06\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Hibernate\"],\"tags\":[\"Hibernate\"],\"readTime\":\"2 分钟\",\"excerpt\":\"废话不多说,直接进入主题。首先是下载源码,跟spring一样,hibernate也采用git管理。 - git://github.com/hibernate/hibernate-orm.git 下载后,hiberante同样也是采用了gradle进行编译,所以同样同之前说的spring的编译, 参考阅读: - \u003ca h...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Hibernate\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"opensource-netty-intro\",\"slug\":\"opensource-netty-intro\",\"filename\":\"2012-06-05-opensource-netty-intro.md\",\"title\":\"开源Java高性能NIO框架推荐 - Netty\",\"date\":\"2012-06-05\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Netty\"],\"tags\":[\"Netty\"],\"readTime\":\"2 分钟\",\"excerpt\":\"作为一个Java程序员,多方面的知识储备是相当重要的。面对各种的情况,都有自己的解决方案也是一种能力的体现。Java优秀的开源项目很多,除了传统的SSH,作为一个Java程序员,你应该知道的更多:) Netty简介 Netty 是一个异步的,事件驱动的网络编程框架和工具,使用Netty可以快速开发出可维护的,高性能、高...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Netty\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"springframework-source-compile\",\"slug\":\"springframework-source-compile\",\"filename\":\"2012-06-02-springframework-source-compile.md\",\"title\":\"SpringFramework3 源码下载和编译教程\",\"date\":\"2012-06-02\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Spring\"],\"tags\":[\"Spring\"],\"readTime\":\"3 分钟\",\"excerpt\":\"Spring已经将源码从svn迁移到了git。所以,首先需要安装git环境。我使用的是Windows下的TortoiseGit,带图形界面,比较直观。 SpringFramework的GitHub地址:https://github.com/SpringSource/spring-framework Git clone地...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Spring\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"eclipse-template-variable\",\"slug\":\"eclipse-template-variable\",\"filename\":\"2012-06-02-eclipse-template-variable.md\",\"title\":\"Eclipse使用技巧 - 自定义注释模板变量\",\"date\":\"2012-06-02\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Eclipse\"],\"tags\":[\"Eclipse\"],\"readTime\":\"10 分钟\",\"excerpt\":\"Eclipse的代码注释模板很丰富,如:user、year、date、time等等,请参考附件。 尽管模板变量如此之多,但是对于复杂多边的实际项目而言,还是不够用,怎么办?自己增加新的呗! Eclipse配置界面都不支持定制自己的注释模板变量,没办法,改Eclipse源码。 具体怎么改,好像无头苍蝇,百度和谷歌了2天,...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Eclipse\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"eclipse-javadoc-template\",\"slug\":\"eclipse-javadoc-template\",\"filename\":\"2012-06-02-eclipse-javadoc-template.md\",\"title\":\"Eclipse使用技巧 - 自定义JavaDoc注解和代码模版,提升开发效率和规范性\",\"date\":\"2012-06-02\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Eclipse\"],\"tags\":[\"Eclipse\",\"Javadoc\",\"Java\"],\"readTime\":\"3 分钟\",\"excerpt\":\"项目中对于注释和代码规范的要求往往是毕比较严格的,如果全靠手动完成效率低,还难以保证保证的规范。幸好Eclipse给我们提供了自定义代码模版的功能。 先说一下Java代码注释模版,它是指这里的配置: 是不是跟你的不一样,多了@author和@date。恩,这是我自定义过的注释模版。效果是在给方法用/注释内容/,注释的时...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Eclipse\",\"previewImg\":\"/images/post/eclipse-javadoc/1codetemplate.jpg\",\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"to-java-coder\",\"slug\":\"to-java-coder\",\"filename\":\"2012-06-01-to-java-coder.md\",\"title\":\"写给同路的Java Coder们\",\"date\":\"2012-06-01\",\"author\":\"onecoder\",\"categories\":[\"随笔\"],\"tags\":[\"Java\"],\"readTime\":\"5 分钟\",\"excerpt\":\"写在前面:一年前的某一天,在coder前面加上苦逼二字,聊以自嘲。却不曾想苦逼二字如今与IT如影随形。突觉感慨连连,遂成此杂文,记录心情。 关于我 性格里,不喜表露内心,所以一直以来博客,都是分享技术,从未描绘内心。不爱指点江山,评头论足。深以为自己没资历,没资格评判。粗浅的阅历,更谈不上任何指导意义,避免一切的误导和...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"priority-queue\",\"slug\":\"priority-queue\",\"filename\":\"2012-05-31-priority-queue.md\",\"title\":\"优先级队列 - Java实现\",\"date\":\"2012-05-31\",\"author\":\"onecoder\",\"categories\":[\"算法学习\"],\"tags\":[\"Java\",\"排序\",\"算法\"],\"readTime\":\"10 分钟\",\"excerpt\":\"优先级队列,是堆数据结构的典型应用。优先级队列的一个典型应用,就是排队任务的有限调度,当一个任务结束后,优先执行当前优先级最高的任务。队列一个任务是,调用INSERT方法。\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"merge-sort\",\"slug\":\"merge-sort\",\"filename\":\"2012-05-31-merge-sort.md\",\"title\":\"合并排序 - Java实现\",\"date\":\"2012-05-31\",\"author\":\"onecoder\",\"categories\":[\"算法学习\"],\"tags\":[\"Java\",\"排序\",\"算法\"],\"readTime\":\"10 分钟\",\"excerpt\":\"\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"select-sort\",\"slug\":\"select-sort\",\"filename\":\"2012-05-30-select-sort.md\",\"title\":\"选择排序 - Java实现\",\"date\":\"2012-05-30\",\"author\":\"onecoder\",\"categories\":[\"算法学习\"],\"tags\":[\"Java\",\"排序\",\"算法\"],\"readTime\":\"4 分钟\",\"excerpt\":\"\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"quick-sort\",\"slug\":\"quick-sort\",\"filename\":\"2012-05-30-quick-sort.md\",\"title\":\"快速排序 - Java实现\",\"date\":\"2012-05-30\",\"author\":\"onecoder\",\"categories\":[\"算法学习\"],\"tags\":[\"Java\",\"排序\",\"算法\"],\"readTime\":\"3 分钟\",\"excerpt\":\"\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"logback-slf4j\",\"slug\":\"logback-slf4j\",\"filename\":\"2012-05-30-logback-slf4j.md\",\"title\":\"slf4j+logback配置方式和logback.groovy配置文件\",\"date\":\"2012-05-30\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Log\"],\"tags\":[\"Logback\",\"SLF4J\"],\"readTime\":\"6 分钟\",\"excerpt\":\"最近看到slf4j+logback的日志方案,并且介绍说,与log4j出自同一作者且做了不少优化,所以决定从commons-logging+log4j切换过来。 logback官网:(该作者即为log4j的作者)http://logback.qos.ch/ 切换方式非常简单,在原有基础上加入如下jar包即可。 slf4...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Log\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"insert-sort\",\"slug\":\"insert-sort\",\"filename\":\"2012-05-30-insert-sort.md\",\"title\":\"插入排序 - Java实现\",\"date\":\"2012-05-30\",\"author\":\"onecoder\",\"categories\":[\"算法学习\"],\"tags\":[\"Java\",\"排序\",\"算法\"],\"readTime\":\"4 分钟\",\"excerpt\":\"\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"heap-sort\",\"slug\":\"heap-sort\",\"filename\":\"2012-05-30-heap-sort.md\",\"title\":\"堆排序 - Java实现\",\"date\":\"2012-05-30\",\"author\":\"onecoder\",\"categories\":[\"算法学习\"],\"tags\":[\"Java\",\"排序\",\"算法\"],\"readTime\":\"6 分钟\",\"excerpt\":\"\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"heap-merge-array\",\"slug\":\"heap-merge-array\",\"filename\":\"2012-05-30-heap-merge-array.md\",\"title\":\"利用堆合并数组- Java实现\",\"date\":\"2012-05-30\",\"author\":\"onecoder\",\"categories\":[\"算法学习\"],\"tags\":[\"Java\",\"排序\",\"算法\"],\"readTime\":\"7 分钟\",\"excerpt\":\"\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"架构实践\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ }
1 Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"win764-jdk\",\"slug\":\"win764-jdk\",\"filename\":\"2012-05-29-win764-jdk.md\",\"title\":\"Win7 64位环境下JDK和Eclipse的选择与安装\",\"date\":\"2012-05-29\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"JDK\"],\"tags\":[\"Eclipse\",\"JDK\",\"Windows\"],\"readTime\":\"3 分钟\",\"excerpt\":\"现在无论笔记本还是台式机的内存都已经是白菜价,4G以上的内存配置随处可见。我最近也将笔记本的内存升至8G,自然想更好的支持大容量内存,安装64系统成了必要的选择。就个人的使用情况来看,基本没发现什么常用软件对64位win7有不兼容的情况,使用良好。 回到正题,作为一个coder,开发环境自然必须搭建。64位系统下,最常...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"JDK\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"jar-classloader\",\"slug\":\"jar-classloader\",\"filename\":\"2012-05-29-jar-classloader.md\",\"title\":\"Java文件读取 jar包内文件读取\",\"date\":\"2012-05-29\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"JDK\"],\"tags\":[\"Classloader\",\"Java\"],\"readTime\":\"11 分钟\",\"excerpt\":\"最近遇到一些Jar包内外配置文件读取的问题。索性自己测试总结一下,与大家分享。 主要是关于ClassLoader.getResource和Class.getResource方法路径区别的问题。\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"JDK\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0},{\"id\":\"asm-fieldvalue\",\"slug\":\"asm-fieldvalue\",\"filename\":\"2012-05-29-asm-fieldvalue.md\",\"title\":\"Java 利用ASM读取变量值(Field value)问题研究\",\"date\":\"2012-05-29\",\"author\":\"onecoder\",\"categories\":[\"Java技术研究\",\"Spring\"],\"tags\":[\"ASM\",\"Spring\",\"Java\"],\"readTime\":\"10 分钟\",\"excerpt\":\"最近在学习Spring源码的过程中,遇到了spring-asm工程的重新打包的问题,于是突然就想研究一下asm这个开源字节码操作工具。秉承我的一贯风格,想到啥就立马学啥。 对于开源产品,我的一贯风格就是通过其官方提供的源码版本管理地址(svn/git等),直接下载最新代码,构建Java工程,直接通过工程依赖的方式研究学...\",\"topic\":\"java\",\"topicName\":\"Java 架构演进与实战\",\"subtopic\":\"Spring\",\"previewImg\":null,\"previewGraphic\":{\"symbol\":\"{ } Java\",\"title\":\"Java 服务端架构\",\"desc\":\"Spring、Netty、日志框架与工程化实战\"},\"hasMath\":false,\"pinned\":false,\"pinOrder\":0}],\"subtopics\":[\"(3)JDK篇\",\"(5)配置篇\",\"(4)测试篇\",\"(2)引入日志篇\",\"(1)起步搭建篇\",\"JDK\",\"架构实践\",\"日志篇\",\"Log\",\"JPPF\",\"Spring\",\"Gradle\",\"Eclipse\",\"Maven\",\"Netty\",\"Restlet\",\"知识扩展\",\"随笔\",\"JVM\",\"Libvirt\",\"Jar\",\"JUnit\",\"Hibernate\"]}]}],[\"$\",\"aside\",null,{\"className\":\"sticky top-20 space-y-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800 rounded-2xl p-5 shadow-sm\",\"children\":[[\"$\",\"h4\",null,{\"className\":\"font-bold text-base text-slate-900 dark:text-slate-100 mb-3.5 pb-2.5 border-b border-slate-100 dark:border-slate-800\",\"children\":\"其他核心专题\"}],[\"$\",\"div\",null,{\"className\":\"space-y-1.5 text-[15px]\",\"children\":[[\"$\",\"$L5\",\"gesp\",{\"href\":\"/topics/gesp/\",\"className\":\"flex items-center justify-between p-2.5 rounded-xl hover:bg-slate-50 dark:hover:bg-slate-800/80 text-slate-700 dark:text-slate-200 transition font-medium\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"🏆\",\" \",\"GESP 考级真题专栏\"]}],[\"$\",\"span\",null,{\"className\":\"font-mono text-teal-600 dar
1k:text-teal-400 font-bold text-sm bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded-md border border-teal-500/20\",\"children\":[609,\" 篇\"]}]]}],null,[\"$\",\"$L5\",\"csp\",{\"href\":\"/topics/csp/\",\"className\":\"flex items-center justify-between p-2.5 rounded-xl hover:bg-slate-50 dark:hover:bg-slate-800/80 text-slate-700 dark:text-slate-200 transition font-medium\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"⌘\",\" \",\"CSP / NOIP 信奥竞赛\"]}],[\"$\",\"span\",null,{\"className\":\"font-mono text-teal-600 dark:text-teal-400 font-bold text-sm bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded-md border border-teal-500/20\",\"children\":[15,\" 篇\"]}]]}],[\"$\",\"$L5\",\"algo\",{\"href\":\"/topics/algo/\",\"className\":\"flex items-center justify-between p-2.5 rounded-xl hover:bg-slate-50 dark:hover:bg-slate-800/80 text-slate-700 dark:text-slate-200 transition font-medium\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"🧮\",\" \",\"算法专题与 LeetCode\"]}],[\"$\",\"span\",null,{\"className\":\"font-mono text-teal-600 dark:text-teal-400 font-bold text-sm bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded-md border border-teal-500/20\",\"children\":[49,\" 篇\"]}]]}],[\"$\",\"$L5\",\"python-data\",{\"href\":\"/topics/python-data/\",\"className\":\"flex items-center justify-between p-2.5 rounded-xl hover:bg-slate-50 dark:hover:bg-slate-800/80 text-slate-700 dark:text-slate-200 transition font-medium\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"🐍\",\" \",\"Python 与数据工程\"]}],[\"$\",\"span\",null,{\"className\":\"font-mono text-teal-600 dark:text-teal-400 font-bold text-sm bg-teal-50 dark:bg-teal-950/60 px-2.5 py-0.5 rounded-md border border-teal-500/20\",\"children\":[112,\" 篇\"]}]]}]]}]]}],[\"$\",\"$L7\",null,{\"slot\":\"6734143049\",\"minHeight\":250,\"label\":\"广告位 4 · 侧边栏吸顶\"}],[\"$\",\"div\",null,{\"className\":\"bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800 rounded-2xl p-5 shadow-sm\",\"children\":[[\"$\",\"div\",null,{\"className\":\"font-bold text-base text-slate-900 dark:text-slate-100 mb-3.5 pb-2.5 border-b border-slate-100 dark:border-slate-800 flex items-center justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex items-center gap-1.5\",\"children\":[[\"$\",\"span\",null,{\"children\":\"🔥\"}],[\"$\",\"span\",null,{\"children\":\"热门技术标签\"}]]}],[\"$\",\"$L5\",null,{\"href\":\"/tags/\",\"className\":\"text-xs text-teal-600 dark:text-teal-400 hover:underline font-medium\",\"children\":[\"全部 (\",281,\") →\"]}]]}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap gap-2 text-xs\",\"children\":[[\"$\",\"$L5\",\"C++\",{\"href\":\"/tags/C%2B%2B/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#C++」相关的 614 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"C++\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":614}]]}],[\"$\",\"$L5\",\"GESP\",{\"href\":\"/tags/GESP/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#GESP」相关的 564 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"GESP\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":564}]]}],[\"$\",\"$L5\",\"基础语句\",{\"href\":\"/tags/%E5%9F%BA%E7%A1%80%E8%AF%AD%E5%8F%A5/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dar
1k:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#基础语句」相关的 139 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"基础语句\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":139}]]}],[\"$\",\"$L5\",\"Java\",{\"href\":\"/tags/Java/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#Java」相关的 91 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"Java\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":91}]]}],[\"$\",\"$L5\",\"多重循环\",{\"href\":\"/tags/%E5%A4%9A%E9%87%8D%E5%BE%AA%E7%8E%AF/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#多重循环」相关的 77 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"多重循环\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":77}]]}],[\"$\",\"$L5\",\"LeetCode\",{\"href\":\"/tags/LeetCode/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#LeetCode」相关的 73 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"LeetCode\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":73}]]}],[\"$\",\"$L5\",\"CSP\",{\"href\":\"/tags/CSP/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#CSP」相关的 68 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"CSP\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":68}]]}],[\"$\",\"$L5\",\"考试大纲\",{\"href\":\"/tags/%E8%80%83%E8%AF%95%E5%A4%A7%E7%BA%B2/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#考试大纲」相关的 66 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"考试大纲\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":66}]]}],[\"$\",\"$L5\",\"Python\",{\"href\":\"/tags/Python/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#Python」相关的 64 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"Python\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":64}]]}],[\"$\",\"$L5\",\"字符串\",{\"href\":\"/tags/%E5%AD%97%E7%AC%A6%E4%B8%B2/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dar
1k:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#字符串」相关的 51 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"字符串\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":51}]]}],[\"$\",\"$L5\",\"一维数组\",{\"href\":\"/tags/%E4%B8%80%E7%BB%B4%E6%95%B0%E7%BB%84/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#一维数组」相关的 45 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"一维数组\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":45}]]}],[\"$\",\"$L5\",\"排序\",{\"href\":\"/tags/%E6%8E%92%E5%BA%8F/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#排序」相关的 34 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"排序\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":34}]]}],[\"$\",\"$L5\",\"贪心\",{\"href\":\"/tags/%E8%B4%AA%E5%BF%83/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#贪心」相关的 33 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"贪心\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":33}]]}],[\"$\",\"$L5\",\"计算机科学基础\",{\"href\":\"/tags/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A7%91%E5%AD%A6%E5%9F%BA%E7%A1%80/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#计算机科学基础」相关的 30 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"计算机科学基础\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":30}]]}],[\"$\",\"$L5\",\"科普\",{\"href\":\"/tags/%E7%A7%91%E6%99%AE/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#科普」相关的 29 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"科普\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":29}]]}],[\"$\",\"$L5\",\"CSP-J\",{\"href\":\"/tags/CSP-J/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#CSP-J」相关的 27 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"CSP-J\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":27}]]}],[\"$\",\"$L5\",\"真题\",{\"href\":\"/tags/%E7%9C%9F%E9%A2%98/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dar
1k:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#真题」相关的 27 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"真题\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":27}]]}],[\"$\",\"$L5\",\"洛谷\",{\"href\":\"/tags/%E6%B4%9B%E8%B0%B7/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#洛谷」相关的 25 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"洛谷\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":25}]]}],[\"$\",\"$L5\",\"NOIP\",{\"href\":\"/tags/NOIP/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#NOIP」相关的 24 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"NOIP\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":24}]]}],[\"$\",\"$L5\",\"Netty\",{\"href\":\"/tags/Netty/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#Netty」相关的 24 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"Netty\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":24}]]}],[\"$\",\"$L5\",\"MySQL\",{\"href\":\"/tags/MySQL/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#MySQL」相关的 24 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"MySQL\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":24}]]}],[\"$\",\"$L5\",\"动态规划\",{\"href\":\"/tags/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#动态规划」相关的 22 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"动态规划\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":22}]]}],[\"$\",\"$L5\",\"一起学Java\",{\"href\":\"/tags/%E4%B8%80%E8%B5%B7%E5%AD%A6Java/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dark:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#一起学Java」相关的 22 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"一起学Java\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":22}]]}],[\"$\",\"$L5\",\"数学函数\",{\"href\":\"/tags/%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0/\",\"className\":\"px-2.5 py-1 rounded-lg transition font-mono flex items-center gap-1 bg-slate-100 dar
1k:bg-slate-800/80 text-slate-600 dark:text-slate-300 hover:bg-teal-50 dark:hover:bg-teal-950/60 hover:text-teal-600 dark:hover:text-teal-400 hover:border-teal-500/30 border border-transparent\",\"title\":\"查看「#数学函数」相关的 21 篇博文\",\"children\":[[\"$\",\"span\",null,{\"children\":[\"#\",\"数学函数\"]}],[\"$\",\"span\",null,{\"className\":\"text-[10px] text-slate-400 dark:text-slate-500\",\"children\":21}]]}]]}]]}]]}]]}]]}],null],null],null]},[null,[\"$\",\"$L8\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"topics\",\"children\",\"$9\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$La\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[null,[\"$\",\"$L8\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"topics\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$La\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/87dfc6598b12eeb9.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/8be92eda0d914e56.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"zh-CN\",\"className\":\"scroll-smooth\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){try{if(localStorage.getItem('theme')==='dark'){document.documentElement.classList.add('dark');}}catch(e){}})();\"}}],[\"$\",\"script\",null,{\"async\":true,\"src\":\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7615326632728696\",\"crossOrigin\":\"anonymous\"}],[\"$\",\"meta\",null,{\"name\":\"google-site-verification\",\"content\":\"EQxpnRQ0t7ULCtknIN_oBRlo8FXtZsL-OaiUcI50_wU\"}],[\"$\",\"$Lb\",null,{\"strategy\":\"afterInteractive\",\"src\":\"https://www.googletagmanager.com/gtag/js?id=G-5L9P03RR0R\"}],[\"$\",\"$Lb\",null,{\"id\":\"google-analytics\",\"strategy\":\"afterInteractive\",\"dangerouslySetInnerHTML\":{\"__html\":\"\\n              window.dataLayer = window.dataLayer || [];\\n              function gtag(){dataLayer.push(arguments);}\\n              gtag('js', new Date());\\n              gtag('config', 'G-5L9P03RR0R');\\n            \"}}],[\"$\",\"$Lb\",null,{\"id\":\"baidu-tongji\",\"strategy\":\"afterInteractive\",\"dangerouslySetInnerHTML\":{\"__html\":\"\\n              var _hmt = _hmt || [];\\n              (function() {\\n                var hm = document.createElement(\\\"script\\\");\\n                hm.src = \\\"https://hm.baidu.com/hm.js?c38895d905174718ae7d95e42ce528c7\\\";\\n                var s = document.getElementsByTagName(\\\"script\\\")[0]; \\n                s.parentNode.insertBefore(hm, s);\\n              })();\\n            \"}}]]}],[\"$\",\"body\",null,{\"className\":\"min-h-screen flex flex-col font-sans selection:bg-teal-500 selection:text-white\",\"children\":[[\"$\",\"$Lc\",null,{}],[\"$\",\"$Ld\",null,{\"postCount\":972}],[\"$\",\"main\",null,{\"className\":\"flex-1\",\"children\":[\"$\",\"$L8\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$La\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\"
1:\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}],[\"$\",\"$Le\",null,{}],[\"$\",\"$Lf\",null,{}],[\"$\",\"$L10\",null,{}],[\"$\",\"$L11\",null,{}],[\"$\",\"$L12\",null,{}]]}]]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[null,\"$L13\"],\"globalErrorComponent\":\"$14\",\"missingSlots\":\"$W15\"}]\n"])</script>
1<script>self.__next_f.push([1,"13:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"Java 架构演进与实战 · OneCoder\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"系统梳理 Java 基础、Log 日志门面演进、Spring 核心、Netty 高性能网络通信与 JVM 字节码研究。\"}],[\"$\",\"link\",\"4\",{\"rel\":\"author\",\"href\":\"https://www.coderli.com\"}],[\"$\",\"meta\",\"5\",{\"name\":\"author\",\"content\":\"OneCoder\"}],[\"$\",\"meta\",\"6\",{\"name\":\"keywords\",\"content\":\"C++,GESP,NOI,Java,Python,算法,架构,Spring,Netty,PostgreSQL\"}],[\"$\",\"link\",\"7\",{\"rel\":\"shortcut icon\",\"href\":\"/favicon.svg\"}],[\"$\",\"link\",\"8\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"link\",\"9\",{\"rel\":\"icon\",\"href\":\"/icon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"link\",\"10\",{\"rel\":\"apple-touch-icon\",\"href\":\"/icon.svg\"}]]\n4:null\n"])</script>
1<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"1e6a0a1875d3472ca14aa76bc5b82fad","r":1,"spa":2}' crossorigin="anonymous"></script>
1
2</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.