[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-config":3,"primary-menu":6,"category-netty":85,"first-post-netty":99,"posts-netty":208},{"config":4,"socialLinks":5},null,[],{"metadata":7,"spec":10,"menuItems":20},{"name":8,"creationTimestamp":9},"primary","2026-09-12T06:13:55.024154Z",{"displayName":11,"menuItems":12},"主菜单",[13,14,15,16,17,18,19],"88c3f10b-321c-4092-86a8-70db00251b74","menu-item-izrtmxer","c4c814d1-0c2c-456b-8c96-4864965fee94","menu-item-column","menu-item-tools","menu-item-zsxq","menu-item-ocrxlczu",[21,30,40,49,58,67,76],{"displayName":22,"metadata":23,"spec":25,"status":28,"children":29},"首页",{"name":13,"creationTimestamp":24},"2026-09-12T06:13:54.422830Z",{"displayName":22,"href":26,"priority":27,"menuName":8},"\u002F",0,{"displayName":22,"href":26},[],{"displayName":31,"metadata":32,"spec":34,"status":38,"children":39},"Java面试八股",{"name":14,"creationTimestamp":33},"2026-09-13T09:42:02.854891Z",{"displayName":31,"href":35,"target":36,"priority":37,"menuName":8},"\u002Fjava-interview","_self",1,{"displayName":31,"href":35},[],{"displayName":41,"metadata":42,"spec":44,"status":47,"children":48},"文章",{"name":15,"creationTimestamp":43},"2026-09-12T06:13:54.457307Z",{"displayName":41,"href":45,"priority":46,"menuName":8},"\u002Farchives",2,{"displayName":41,"href":45},[],{"displayName":50,"metadata":51,"spec":53,"status":56,"children":57},"项目实战",{"name":16,"creationTimestamp":52},"2026-09-14T00:35:08.138170Z",{"displayName":50,"href":54,"target":36,"priority":55,"menuName":8},"\u002Fcolumn",3,{"displayName":50,"href":54},[],{"displayName":59,"metadata":60,"spec":62,"status":65,"children":66},"在线工具",{"name":17,"creationTimestamp":61},"2026-09-14T00:35:08.171474Z",{"displayName":59,"href":63,"target":36,"priority":64,"menuName":8},"\u002Ftools",4,{"displayName":59,"href":63},[],{"displayName":68,"metadata":69,"spec":71,"status":74,"children":75},"知识星球",{"name":18,"creationTimestamp":70},"2026-09-14T00:35:08.199145Z",{"displayName":68,"href":72,"target":36,"priority":73,"menuName":8},"\u002Fzsxq",5,{"displayName":68,"href":72},[],{"displayName":77,"metadata":78,"spec":80,"status":83,"children":84},"特价云服务器",{"name":19,"creationTimestamp":79},"2026-09-25T15:30:59.201614Z",{"displayName":77,"href":81,"target":36,"priority":82,"menuName":8},"\u002Fserver",6,{"displayName":77,"href":81},[],{"metadata":86,"spec":91,"status":97,"postCount":73},{"name":87,"creationTimestamp":88,"labels":89},"netty","2026-09-13T09:13:25.996566Z",{"haloweb.section":90},"interview",{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},"Netty 面试题","","Netty 面试题：Reactor 线程模型、ByteBuf、零拷贝、编解码与常见内存泄漏排查。",19,false,{"permalink":98,"postCount":73,"visiblePostCount":73},"\u002Fcategories\u002Fnetty",[100,124,145,166,187],{"metadata":101,"spec":104,"status":113,"categories":118},{"name":102,"creationTimestamp":103},"post-netty-reactor-452c619b","2026-09-13T10:01:11.735905Z",{"title":105,"slug":106,"cover":93,"excerpt":107,"publishTime":109,"categories":110,"tags":111,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},"Netty 的 Reactor 线程模型？","netty-reactor",{"raw":93,"autoGenerate":108},true,"2026-09-13T10:01:11.908097Z",[87],[],"PUBLIC",{"permalink":114,"excerpt":115,"lastModifyTime":116,"phase":117},"\u002Farchives\u002Fnetty-reactor","一、Reactor 模式 基于事件驱动，I\u002FO 多路复用监听多个连接，事件就绪后分发给处理器。 二、Netty 三种模型 单线程 Reactor：一个线程处理所有连接的 accept 和 I\u002FO，简单但不适合高并发。 多线程 Reactor：一个 Acceptor 线程接收连接，I\u002FO 由线程池处理","2026-09-16T09:15:45.558022Z","PUBLISHED",[119],{"metadata":120,"spec":122,"status":123,"postCount":73},{"name":87,"creationTimestamp":88,"labels":121},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":125,"spec":128,"status":135,"categories":139},{"name":126,"creationTimestamp":127},"post-netty-pipeline-7fcc13c5","2026-09-13T10:01:12.057563Z",{"title":129,"slug":130,"cover":93,"excerpt":131,"publishTime":132,"categories":133,"tags":134,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},"Netty 的 ChannelPipeline 机制？","netty-pipeline",{"raw":93,"autoGenerate":108},"2026-09-13T10:01:12.104621Z",[87],[],{"permalink":136,"excerpt":137,"lastModifyTime":138,"phase":117},"\u002Farchives\u002Fnetty-pipeline","一、定义 每个 Channel 有一个 Pipeline，由多个 ChannelHandler 组成，形成责任链。入站和出站事件在 Pipeline 中传播。 二、入站和出站 InboundHandler：处理入站事件（读、连接建立等），从 head 向 tail 传播。 OutboundHandl","2026-09-16T09:16:10.087911Z",[140],{"metadata":141,"spec":143,"status":144,"postCount":73},{"name":87,"creationTimestamp":88,"labels":142},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":146,"spec":149,"status":156,"categories":160},{"name":147,"creationTimestamp":148},"post-netty-bytebuf-9e659725","2026-09-13T10:01:12.219331Z",{"title":150,"slug":151,"cover":93,"excerpt":152,"publishTime":153,"categories":154,"tags":155,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},"Netty 的 ByteBuf 设计？","netty-bytebuf",{"raw":93,"autoGenerate":108},"2026-09-13T10:01:12.269412Z",[87],[],{"permalink":157,"excerpt":158,"lastModifyTime":159,"phase":117},"\u002Farchives\u002Fnetty-bytebuf","一、与 ByteBuffer 对比 JDK ByteBuffer 只有一个 position，读写切换需 flip()，易出错。 ByteBuf 有 readerIndex 和 writerIndex 两个指针，读写分离，无需 flip。 二、核心方法 readXxx() \u002F writeXxx()：","2026-09-16T09:15:44.072779Z",[161],{"metadata":162,"spec":164,"status":165,"postCount":73},{"name":87,"creationTimestamp":88,"labels":163},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":167,"spec":170,"status":177,"categories":181},{"name":168,"creationTimestamp":169},"post-netty-sticky-packet-db78caff","2026-09-13T10:01:12.394145Z",{"title":171,"slug":172,"cover":93,"excerpt":173,"publishTime":174,"categories":175,"tags":176,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},"Netty 如何解决粘包拆包？","netty-sticky-packet",{"raw":93,"autoGenerate":108},"2026-09-13T10:01:12.445874Z",[87],[],{"permalink":178,"excerpt":179,"lastModifyTime":180,"phase":117},"\u002Farchives\u002Fnetty-sticky-packet","一、问题 TCP 是字节流，没有消息边界，多个请求可能粘在一起（粘包），一个请求可能被拆分（拆包）。 二、解决方案 固定长度：FixedLengthFrameDecoder，每条消息固定长度。 特殊分隔符：DelimiterBasedFrameDecoder，按换行符等分隔。 长度字段：Length","2026-09-16T09:16:10.566524Z",[182],{"metadata":183,"spec":185,"status":186,"postCount":73},{"name":87,"creationTimestamp":88,"labels":184},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":188,"spec":191,"status":198,"categories":202},{"name":189,"creationTimestamp":190},"post-netty-heartbeat-12b221d2","2026-09-13T10:01:12.589477Z",{"title":192,"slug":193,"cover":93,"excerpt":194,"publishTime":195,"categories":196,"tags":197,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},"Netty 如何实现心跳检测？","netty-heartbeat",{"raw":93,"autoGenerate":108},"2026-09-13T10:01:12.638155Z",[87],[],{"permalink":199,"excerpt":200,"lastModifyTime":201,"phase":117},"\u002Farchives\u002Fnetty-heartbeat","一、IdleStateHandler Netty 提供 IdleStateHandler 检测空闲状态。 ch.pipeline().addLast(new IdleStateHandler(5, 0, 0, TimeUnit.SECONDS));\n 三个参数：读空闲时间、写空闲时间、所有空闲时间。","2026-09-16T09:16:11.001714Z",[203],{"metadata":204,"spec":206,"status":207,"postCount":73},{"name":87,"creationTimestamp":88,"labels":205},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"page":37,"size":209,"total":73,"items":210,"first":108,"last":108,"hasNext":96,"hasPrevious":96,"totalPages":37},100,[211,224,237,250,263],{"metadata":212,"spec":213,"status":217,"categories":218},{"name":189,"creationTimestamp":190},{"title":192,"slug":193,"cover":93,"excerpt":214,"publishTime":195,"categories":215,"tags":216,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},{"raw":93,"autoGenerate":108},[87],[],{"permalink":199,"excerpt":200,"lastModifyTime":201,"phase":117},[219],{"metadata":220,"spec":222,"status":223,"postCount":73},{"name":87,"creationTimestamp":88,"labels":221},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":225,"spec":226,"status":230,"categories":231},{"name":168,"creationTimestamp":169},{"title":171,"slug":172,"cover":93,"excerpt":227,"publishTime":174,"categories":228,"tags":229,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},{"raw":93,"autoGenerate":108},[87],[],{"permalink":178,"excerpt":179,"lastModifyTime":180,"phase":117},[232],{"metadata":233,"spec":235,"status":236,"postCount":73},{"name":87,"creationTimestamp":88,"labels":234},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":238,"spec":239,"status":243,"categories":244},{"name":147,"creationTimestamp":148},{"title":150,"slug":151,"cover":93,"excerpt":240,"publishTime":153,"categories":241,"tags":242,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},{"raw":93,"autoGenerate":108},[87],[],{"permalink":157,"excerpt":158,"lastModifyTime":159,"phase":117},[245],{"metadata":246,"spec":248,"status":249,"postCount":73},{"name":87,"creationTimestamp":88,"labels":247},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":251,"spec":252,"status":256,"categories":257},{"name":126,"creationTimestamp":127},{"title":129,"slug":130,"cover":93,"excerpt":253,"publishTime":132,"categories":254,"tags":255,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},{"raw":93,"autoGenerate":108},[87],[],{"permalink":136,"excerpt":137,"lastModifyTime":138,"phase":117},[258],{"metadata":259,"spec":261,"status":262,"postCount":73},{"name":87,"creationTimestamp":88,"labels":260},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":264,"spec":265,"status":269,"categories":270},{"name":102,"creationTimestamp":103},{"title":105,"slug":106,"cover":93,"excerpt":266,"publishTime":109,"categories":267,"tags":268,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},{"raw":93,"autoGenerate":108},[87],[],{"permalink":114,"excerpt":115,"lastModifyTime":116,"phase":117},[271],{"metadata":272,"spec":274,"status":275,"postCount":73},{"name":87,"creationTimestamp":88,"labels":273},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73}]