[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-config":3,"primary-menu":20,"tags-cloud":109,"tagposts-interview-3":293},{"config":4,"socialLinks":19},{"title":5,"subtitle":6,"logoUrl":7,"faviconUrl":8,"footerText":9,"beianIcp":10,"beianPublicSecurity":9,"seoDescription":11,"seoKeywords":12,"homepageTitle":13,"homepageSubtitle":14,"analyticsHeadCode":15,"planetQrcodeUrl":16,"planetIntroHtml":9,"planetCtaText":17,"updatedAt":18},"编码世界","用编码改变世界","https:\u002F\u002Fcdn.mashangan.com\u002Fupload\u002F2026\u002F09\u002F2f277021172f43f6bb34e1c115760b7f.png","https:\u002F\u002Fcdn.mashangan.com\u002Fupload\u002F2026\u002F09\u002Fdcbad022e68c4a729a5dc4997a9bba8a.png","","苏ICP备2026073884号","编码世界（mashangan.com）是面向 Java 后端与 Go 语言的系统化编程教程站：提供\nMyBatis Plus、Lombok、Java 8、IDEA、Docker 等原创图文教程，以及 JVM、并发、\nSpring、MySQL、Redis、消息队列、计算机网络等大厂面试八股题库，另有可落地的\n项目实战系列，帮你从入门到精通。","编码世界,Java教程,Go语言教程,Docker教程,MyBatis Plus教程,Lombok教程, Java 8新特性,IDEA教程,Java面试题,八股文,JVM面试题,Java并发面试题, MySQL面试题,Redis面试题,Spring面试题,消息队列面试题,高并发,分库分表, Netty面试题,计算机网络面试题,AI Agent,RAG,程序员学习路线","Java全栈系统化编程教程","覆盖 MyBatis Plus、Lombok、Java 8、IDEA、Go、Docker 等原创图文教程，配套大厂面试八股题库，从入门到精通，持续更新","\u003Cscript>\nvar _hmt = _hmt || [];\n(function() {\n  var hm = document.createElement(\"script\");\n  hm.src = \"https:\u002F\u002Fhm.baidu.com\u002Fhm.js?f00af7e56d956c02e11efed4131379b0\";\n  var s = document.getElementsByTagName(\"script\")[0]; \n  s.parentNode.insertBefore(hm, s);\n})();\n\u003C\u002Fscript>\n","https:\u002F\u002Fcdn.mashangan.com\u002Fupload\u002F2026\u002F09\u002Fc1a8f5de46584d3eb0bc762c180a5db9.png","扫码加入知识星球","2026-10-05T13:09:51.904487Z",[],{"metadata":21,"spec":24,"menuItems":35},{"name":22,"creationTimestamp":23},"primary","2026-09-12T06:13:55.024154Z",{"displayName":25,"menuItems":26},"主菜单",[27,28,29,30,31,32,33,34],"88c3f10b-321c-4092-86a8-70db00251b74","menu-item-izrtmxer","c4c814d1-0c2c-456b-8c96-4864965fee94","menu-item-tags","menu-item-column","menu-item-tools","menu-item-zsxq","menu-item-ocrxlczu",[36,45,55,64,73,82,91,100],{"displayName":37,"metadata":38,"spec":40,"status":43,"children":44},"首页",{"name":27,"creationTimestamp":39},"2026-09-12T06:13:54.422830Z",{"displayName":37,"href":41,"priority":42,"menuName":22},"\u002F",0,{"displayName":37,"href":41},[],{"displayName":46,"metadata":47,"spec":49,"status":53,"children":54},"Java面试八股",{"name":28,"creationTimestamp":48},"2026-09-13T09:42:02.854891Z",{"displayName":46,"href":50,"target":51,"priority":52,"menuName":22},"\u002Fjava-interview","_self",1,{"displayName":46,"href":50},[],{"displayName":56,"metadata":57,"spec":59,"status":62,"children":63},"文章",{"name":29,"creationTimestamp":58},"2026-09-12T06:13:54.457307Z",{"displayName":56,"href":60,"priority":61,"menuName":22},"\u002Farchives",2,{"displayName":56,"href":60},[],{"displayName":65,"metadata":66,"spec":68,"status":71,"children":72},"标签",{"name":30,"creationTimestamp":67},"2026-10-07T00:42:42.754151Z",{"displayName":65,"href":69,"priority":70,"menuName":22},"\u002Ftags",3,{"displayName":65,"href":69},[],{"displayName":74,"metadata":75,"spec":77,"status":80,"children":81},"项目实战",{"name":31,"creationTimestamp":76},"2026-09-14T00:35:08.138170Z",{"displayName":74,"href":78,"target":51,"priority":79,"menuName":22},"\u002Fcolumn",4,{"displayName":74,"href":78},[],{"displayName":83,"metadata":84,"spec":86,"status":89,"children":90},"在线工具",{"name":32,"creationTimestamp":85},"2026-09-14T00:35:08.171474Z",{"displayName":83,"href":87,"target":51,"priority":88,"menuName":22},"\u002Ftools",5,{"displayName":83,"href":87},[],{"displayName":92,"metadata":93,"spec":95,"status":98,"children":99},"知识星球",{"name":33,"creationTimestamp":94},"2026-09-14T00:35:08.199145Z",{"displayName":92,"href":96,"target":51,"priority":97,"menuName":22},"\u002Fzsxq",6,{"displayName":92,"href":96},[],{"displayName":101,"metadata":102,"spec":104,"status":107,"children":108},"特价云服务",{"name":34,"creationTimestamp":103},"2026-09-25T15:30:59.201614Z",{"displayName":101,"href":105,"target":51,"priority":106,"menuName":22},"\u002Fserver",7,{"displayName":101,"href":105},[],[110,117,124,131,138,145,152,159,166,172,178,184,191,197,203,209,215,221,227,233,239,245,251,257,263,269,275,281,287],{"metadata":111,"spec":113,"postCount":116},{"name":112},"tag-04980744",{"displayName":114,"slug":115},"面试题","interview",118,{"metadata":118,"spec":120,"postCount":123},{"name":119},"tag-93f725a0",{"displayName":121,"slug":122},"Java","java",68,{"metadata":125,"spec":127,"postCount":130},{"name":126},"tag-05b6053c",{"displayName":128,"slug":129},"Docker","docker",43,{"metadata":132,"spec":134,"postCount":137},{"name":133},"tag-1cba77c3",{"displayName":135,"slug":136},"IDEA","idea",32,{"metadata":139,"spec":141,"postCount":144},{"name":140},"tag-116a0109",{"displayName":142,"slug":143},"数字孪生","digital-twin",19,{"metadata":146,"spec":148,"postCount":151},{"name":147},"tag-a2fb95ac",{"displayName":149,"slug":150},"MyBatis Plus","mybatis-plus",18,{"metadata":153,"spec":155,"postCount":158},{"name":154},"tag-cc6220f9",{"displayName":156,"slug":157},"Lombok","lombok",15,{"metadata":160,"spec":162,"postCount":165},{"name":161},"tag-2a2d595e",{"displayName":163,"slug":164},"Spring","spring",10,{"metadata":167,"spec":169,"postCount":165},{"name":168},"tag-1d8a4975",{"displayName":170,"slug":171},"消息队列","mq",{"metadata":173,"spec":175,"postCount":165},{"name":174},"tag-17245299",{"displayName":176,"slug":177},"并发","concurrency",{"metadata":179,"spec":181,"postCount":165},{"name":180},"tag-4921c0e2",{"displayName":182,"slug":183},"AI","ai",{"metadata":185,"spec":187,"postCount":190},{"name":186},"tag-53bb7900",{"displayName":188,"slug":189},"卫星仿真","satellite",9,{"metadata":192,"spec":194,"postCount":88},{"name":193},"tag-62377bcf",{"displayName":195,"slug":196},"Spring Cloud","spring-cloud",{"metadata":198,"spec":200,"postCount":88},{"name":199},"tag-81c3b080",{"displayName":201,"slug":202},"MySQL","mysql",{"metadata":204,"spec":206,"postCount":88},{"name":205},"tag-86a1b907",{"displayName":207,"slug":208},"Redis","redis",{"metadata":210,"spec":212,"postCount":88},{"name":211},"tag-18897dcf",{"displayName":213,"slug":214},"Elasticsearch","elasticsearch",{"metadata":216,"spec":218,"postCount":88},{"name":217},"tag-6ce80d8e",{"displayName":219,"slug":220},"JVM","jvm",{"metadata":222,"spec":224,"postCount":88},{"name":223},"tag-aa4e1b8c",{"displayName":225,"slug":226},"Dubbo","dubbo",{"metadata":228,"spec":230,"postCount":88},{"name":229},"tag-9e30c249",{"displayName":231,"slug":232},"Netty","netty",{"metadata":234,"spec":236,"postCount":88},{"name":235},"tag-2199ace5",{"displayName":237,"slug":238},"ZooKeeper","zookeeper",{"metadata":240,"spec":242,"postCount":88},{"name":241},"tag-7c298a76",{"displayName":243,"slug":244},"设计模式","design-pattern",{"metadata":246,"spec":248,"postCount":88},{"name":247},"tag-6cf6cea9",{"displayName":249,"slug":250},"高可用","high-availability",{"metadata":252,"spec":254,"postCount":88},{"name":253},"tag-918786ab",{"displayName":255,"slug":256},"分库分表","sharding",{"metadata":258,"spec":260,"postCount":88},{"name":259},"tag-91e02cd2",{"displayName":261,"slug":262},"计算机网络","network",{"metadata":264,"spec":266,"postCount":88},{"name":265},"tag-dd302f94",{"displayName":267,"slug":268},"操作系统","os",{"metadata":270,"spec":272,"postCount":88},{"name":271},"tag-1b359d87",{"displayName":273,"slug":274},"Tomcat","tomcat",{"metadata":276,"spec":278,"postCount":79},{"name":277},"tag-f0d71b77",{"displayName":279,"slug":280},"MyBatis","mybatis",{"metadata":282,"spec":284,"postCount":52},{"name":283},"tag-a118a308",{"displayName":285,"slug":286},"时序数据库","tsdb",{"metadata":288,"spec":290,"postCount":42},{"name":289},"tag-34d1f91f",{"displayName":291,"slug":292},"Go","go",{"page":70,"size":294,"total":116,"items":295,"first":308,"last":308,"hasNext":304,"hasPrevious":304,"totalPages":97},20,[296,334,363,392,421,450,484,513,542,571,600,633,662,691,720,749,783,812,841,870],{"metadata":297,"spec":300,"status":310,"categories":315,"tags":327},{"name":298,"creationTimestamp":299},"post-tomcat-deploy-e44a593c","2026-09-13T10:01:10.611263Z",{"title":301,"slug":302,"cover":9,"excerpt":303,"publishTime":305,"categories":306,"tags":307,"priority":42,"pinned":308,"deleted":308,"visible":309,"allowComment":304},"Tomcat 的部署方式有哪些？","tomcat-deploy",{"raw":9,"autoGenerate":304},true,"2026-09-13T10:01:10.656984Z",[274],[271,112],false,"PUBLIC",{"permalink":311,"excerpt":312,"lastModifyTime":313,"phase":314},"\u002Farchives\u002Ftomcat-deploy","一、WAR 包部署 把 WAR 放到 webapps 目录，Tomcat 自动解压部署。最常用。 二、目录部署 直接把解压后的应用目录放到 webapps，或通过 Context 配置指定路径。 三、Context 片段部署 在 conf\u002FCatalina\u002Flocalhost\u002F 下放 context","2026-09-16T09:15:15.246373Z","PUBLISHED",[316],{"metadata":317,"spec":322,"status":325,"postCount":88},{"name":274,"creationTimestamp":318,"labels":319,"annotations":320},"2026-09-13T09:13:25.759540Z",{"haloweb.section":115},{"tutorial.halo.run\u002Fstatus":321},"updating",{"displayName":323,"slug":274,"cover":9,"description":324,"priority":151,"hideFromList":308,"preventParentPostCascadeQuery":308},"Tomcat 面试题","Tomcat 面试题：整体架构、类加载机制、连接器模型、线程池与性能调优。",{"permalink":326,"postCount":88,"visiblePostCount":88},"\u002Fcategories\u002Ftomcat",[328,331],{"metadata":329,"spec":330},{"name":271},{"displayName":273,"slug":274},{"metadata":332,"spec":333},{"name":112},{"displayName":114,"slug":115},{"metadata":335,"spec":338,"status":345,"categories":349,"tags":356},{"name":336,"creationTimestamp":337},"post-tomcat-valve-315956e1","2026-09-13T10:01:10.457861Z",{"title":339,"slug":340,"cover":9,"excerpt":341,"publishTime":342,"categories":343,"tags":344,"priority":42,"pinned":308,"deleted":308,"visible":309,"allowComment":304},"Tomcat 的 Valve 机制？","tomcat-valve",{"raw":9,"autoGenerate":304},"2026-09-13T10:01:10.502555Z",[274],[112,271],{"permalink":346,"excerpt":347,"lastModifyTime":348,"phase":314},"\u002Farchives\u002Ftomcat-valve","一、定义 Valve（阀门）是 Tomcat 的拦截器机制，类似 Servlet Filter，但作用在容器层面（Engine\u002FHost\u002FContext）。 二、常用 Valve AccessLogValve：访问日志。 RemoteAddrValve：IP 黑白名单。 RemoteHostValv","2026-09-16T09:15:43.118472Z",[350],{"metadata":351,"spec":354,"status":355,"postCount":88},{"name":274,"creationTimestamp":318,"labels":352,"annotations":353},{"haloweb.section":115},{"tutorial.halo.run\u002Fstatus":321},{"displayName":323,"slug":274,"cover":9,"description":324,"priority":151,"hideFromList":308,"preventParentPostCascadeQuery":308},{"permalink":326,"postCount":88,"visiblePostCount":88},[357,360],{"metadata":358,"spec":359},{"name":112},{"displayName":114,"slug":115},{"metadata":361,"spec":362},{"name":271},{"displayName":273,"slug":274},{"metadata":364,"spec":367,"status":374,"categories":378,"tags":385},{"name":365,"creationTimestamp":366},"post-tomcat-session-09e900f9","2026-09-13T10:01:10.279273Z",{"title":368,"slug":369,"cover":9,"excerpt":370,"publishTime":371,"categories":372,"tags":373,"priority":42,"pinned":308,"deleted":308,"visible":309,"allowComment":304},"Tomcat 的 Session 管理？","tomcat-session",{"raw":9,"autoGenerate":304},"2026-09-13T10:01:10.325830Z",[274],[271,112],{"permalink":375,"excerpt":376,"lastModifyTime":377,"phase":314},"\u002Farchives\u002Ftomcat-session","一、Session 实现 Tomcat 用 StandardSession 实现 HttpSession，存在内存中，由 Manager 管理。 二、持久化 StandardManager：Tomcat 关闭时序列化 Session 到 SESSIONS.ser，启动时恢复。 PersistentM","2026-09-16T09:15:42.675401Z",[379],{"metadata":380,"spec":383,"status":384,"postCount":88},{"name":274,"creationTimestamp":318,"labels":381,"annotations":382},{"haloweb.section":115},{"tutorial.halo.run\u002Fstatus":321},{"displayName":323,"slug":274,"cover":9,"description":324,"priority":151,"hideFromList":308,"preventParentPostCascadeQuery":308},{"permalink":326,"postCount":88,"visiblePostCount":88},[386,389],{"metadata":387,"spec":388},{"name":271},{"displayName":273,"slug":274},{"metadata":390,"spec":391},{"name":112},{"displayName":114,"slug":115},{"metadata":393,"spec":396,"status":403,"categories":407,"tags":414},{"name":394,"creationTimestamp":395},"post-tomcat-connector-1a9adcb4","2026-09-13T10:01:09.986554Z",{"title":397,"slug":398,"cover":9,"excerpt":399,"publishTime":400,"categories":401,"tags":402,"priority":42,"pinned":308,"deleted":308,"visible":309,"allowComment":304},"Tomcat Connector 的工作模式？","tomcat-connector",{"raw":9,"autoGenerate":304},"2026-09-13T10:01:10.148457Z",[274],[271,112],{"permalink":404,"excerpt":405,"lastModifyTime":406,"phase":314},"\u002Farchives\u002Ftomcat-connector","一、三种运行模式 BIO：阻塞 IO，每个请求一个线程，Tomcat 7 前默认。 NIO：非阻塞 IO，基于 Java NIO，Tomcat 8 默认。 APR：基于 Apache Portable Runtime，原生 C 库，性能最好。 二、NIO 模式 一个 Acceptor 线程接收连接。","2026-09-16T09:15:39.756354Z",[408],{"metadata":409,"spec":412,"status":413,"postCount":88},{"name":274,"creationTimestamp":318,"labels":410,"annotations":411},{"haloweb.section":115},{"tutorial.halo.run\u002Fstatus":321},{"displayName":323,"slug":274,"cover":9,"description":324,"priority":151,"hideFromList":308,"preventParentPostCascadeQuery":308},{"permalink":326,"postCount":88,"visiblePostCount":88},[415,418],{"metadata":416,"spec":417},{"name":271},{"displayName":273,"slug":274},{"metadata":419,"spec":420},{"name":112},{"displayName":114,"slug":115},{"metadata":422,"spec":425,"status":432,"categories":436,"tags":443},{"name":423,"creationTimestamp":424},"post-tomcat-architecture-069d50f9","2026-09-13T10:01:09.794498Z",{"title":426,"slug":427,"cover":9,"excerpt":428,"publishTime":429,"categories":430,"tags":431,"priority":42,"pinned":308,"deleted":308,"visible":309,"allowComment":304},"Tomcat 的整体架构？","tomcat-architecture",{"raw":9,"autoGenerate":304},"2026-09-13T10:01:09.841985Z",[274],[112,271],{"permalink":433,"excerpt":434,"lastModifyTime":435,"phase":314},"\u002Farchives\u002Ftomcat-architecture","一、核心组件 Server：Tomcat 顶层容器，管理 Service 生命周期。 Service：包含 Connector 和 Engine，一个 Tomcat 可有多个 Service。 Connector：连接器，监听端口，接收请求并转换为 Request，如 HTTP\u002F1.1、AJP。 E","2026-09-16T09:15:41.748689Z",[437],{"metadata":438,"spec":441,"status":442,"postCount":88},{"name":274,"creationTimestamp":318,"labels":439,"annotations":440},{"haloweb.section":115},{"tutorial.halo.run\u002Fstatus":321},{"displayName":323,"slug":274,"cover":9,"description":324,"priority":151,"hideFromList":308,"preventParentPostCascadeQuery":308},{"permalink":326,"postCount":88,"visiblePostCount":88},[444,447],{"metadata":445,"spec":446},{"name":112},{"displayName":114,"slug":115},{"metadata":448,"spec":449},{"name":271},{"displayName":273,"slug":274},{"metadata":451,"spec":454,"status":462,"categories":466,"tags":477},{"name":452,"creationTimestamp":453},"post-rabbitmq-prefetch-87e4d077","2026-09-13T10:01:09.619926Z",{"title":455,"slug":456,"cover":9,"excerpt":457,"publishTime":458,"categories":459,"tags":461,"priority":42,"pinned":308,"deleted":308,"visible":309,"allowComment":304},"RabbitMQ 的 prefetch 机制？","rabbitmq-prefetch",{"raw":9,"autoGenerate":304},"2026-09-13T10:01:09.668453Z",[460],"rabbitmq",[112,168],{"permalink":463,"excerpt":464,"lastModifyTime":465,"phase":314},"\u002Farchives\u002Frabbitmq-prefetch","一、定义 prefetch（QoS）控制 RabbitMQ 一次推送给消费者多少条未确认的消息，实现限流和负载均衡。 二、设置 channel.basicQos(10); \u002F\u002F 每个消费者最多 10 条未确认消息\n 三、作用 防止消息都推给快的消费者，慢的消费者闲置，实现公平分发。 防止消费者内存被","2026-09-16T09:15:40.693057Z",[467],{"metadata":468,"spec":472,"status":475,"postCount":88},{"name":460,"creationTimestamp":469,"labels":470,"annotations":471},"2026-09-13T09:13:25.810188Z",{"haloweb.section":115},{"tutorial.halo.run\u002Fstatus":321},{"displayName":473,"slug":460,"cover":9,"description":474,"priority":294,"hideFromList":308,"preventParentPostCascadeQuery":308},"RabbitMQ 面试题","RabbitMQ 面试题：消息可靠性投递、死信队列、镜像队列、消费幂等与积压处理。",{"permalink":476,"postCount":88,"visiblePostCount":88},"\u002Fcategories\u002Frabbitmq",[478,481],{"metadata":479,"spec":480},{"name":112},{"displayName":114,"slug":115},{"metadata":482,"spec":483},{"name":168},{"displayName":170,"slug":171},{"metadata":485,"spec":488,"status":495,"categories":499,"tags":506},{"name":486,"creationTimestamp":487},"post-rabbitmq-vs-rocketmq-3e9be184","2026-09-13T10:01:09.436936Z",{"title":489,"slug":490,"cover":9,"excerpt":491,"publishTime":492,"categories":493,"tags":494,"priority":42,"pinned":308,"deleted":308,"visible":309,"allowComment":304},"RabbitMQ 和 RocketMQ 的区别？","rabbitmq-vs-rocketmq",{"raw":9,"autoGenerate":304},"2026-09-13T10:01:09.484368Z",[460],[168,112],{"permalink":496,"excerpt":497,"lastModifyTime":498,"phase":314},"\u002Farchives\u002Frabbitmq-vs-rocketmq","一、对比 维度 RabbitMQ RocketMQ 开发语言 Erlang Java 吞吐量 万级 十万级 延迟 微秒级 毫秒级 事务消息 不支持 支持 顺序消息 支持（弱） 支持 延迟消息 支持插件 原生支持 管理界面 有 有 二、选择","2026-09-16T09:15:40.237199Z",[500],{"metadata":501,"spec":504,"status":505,"postCount":88},{"name":460,"creationTimestamp":469,"labels":502,"annotations":503},{"haloweb.section":115},{"tutorial.halo.run\u002Fstatus":321},{"displayName":473,"slug":460,"cover":9,"description":474,"priority":294,"hideFromList":308,"preventParentPostCascadeQuery":308},{"permalink":476,"postCount":88,"visiblePostCount":88},[507,510],{"metadata":508,"spec":509},{"name":168},{"displayName":170,"slug":171},{"metadata":511,"spec":512},{"name":112},{"displayName":114,"slug":115},{"metadata":514,"spec":517,"status":524,"categories":528,"tags":535},{"name":515,"creationTimestamp":516},"post-rabbitmq-reliable-d15663a6","2026-09-13T10:01:09.246619Z",{"title":518,"slug":519,"cover":9,"excerpt":520,"publishTime":521,"categories":522,"tags":523,"priority":42,"pinned":308,"deleted":308,"visible":309,"allowComment":304},"RabbitMQ 如何保证消息可靠？","rabbitmq-reliable",{"raw":9,"autoGenerate":304},"2026-09-13T10:01:09.295435Z",[460],[168,112],{"permalink":525,"excerpt":526,"lastModifyTime":527,"phase":314},"\u002Farchives\u002Frabbitmq-reliable","一、生产端 开启 Publisher Confirm，确保消息到达 Exchange。 开启 Return 机制，消息不可路由时通知生产者。 本地消息表 + 定时补偿。 二、Broker 端 交换机、队列、消息都持久化（durable=true, deliveryMode=2）。 镜像队列：队列复制","2026-09-16T09:15:10.999791Z",[529],{"metadata":530,"spec":533,"status":534,"postCount":88},{"name":460,"creationTimestamp":469,"labels":531,"annotations":532},{"haloweb.section":115},{"tutorial.halo.run\u002Fstatus":321},{"displayName":473,"slug":460,"cover":9,"description":474,"priority":294,"hideFromList":308,"preventParentPostCascadeQuery":308},{"permalink":476,"postCount":88,"visiblePostCount":88},[536,539],{"metadata":537,"spec":538},{"name":168},{"displayName":170,"slug":171},{"metadata":540,"spec":541},{"name":112},{"displayName":114,"slug":115},{"metadata":543,"spec":546,"status":553,"categories":557,"tags":564},{"name":544,"creationTimestamp":545},"post-rabbitmq-message-ack-34ff22c9","2026-09-13T10:01:09.065945Z",{"title":547,"slug":548,"cover":9,"excerpt":549,"publishTime":550,"categories":551,"tags":552,"priority":42,"pinned":308,"deleted":308,"visible":309,"allowComment":304},"RabbitMQ 的消息确认机制？","rabbitmq-message-ack",{"raw":9,"autoGenerate":304},"2026-09-13T10:01:09.112893Z",[460],[112,168],{"permalink":554,"excerpt":555,"lastModifyTime":556,"phase":314},"\u002Farchives\u002Frabbitmq-message-ack","一、生产者确认（Publisher Confirm） 消息投递到 Exchange 后返回 confirm。 消息路由到 Queue（持久化消息持久化到磁盘）后返回 ack。 可配合 mandatory 参数，消息不可路由时返回给生产者。 二、消费者确认（Consumer ACK） 自动确认（aut","2026-09-16T09:14:45.553264Z",[558],{"metadata":559,"spec":562,"status":563,"postCount":88},{"name":460,"creationTimestamp":469,"labels":560,"annotations":561},{"haloweb.section":115},{"tutorial.halo.run\u002Fstatus":321},{"displayName":473,"slug":460,"cover":9,"description":474,"priority":294,"hideFromList":308,"preventParentPostCascadeQuery":308},{"permalink":476,"postCount":88,"visiblePostCount":88},[565,568],{"metadata":566,"spec":567},{"name":112},{"displayName":114,"slug":115},{"metadata":569,"spec":570},{"name":168},{"displayName":170,"slug":171},{"metadata":572,"spec":575,"status":582,"categories":586,"tags":593},{"name":573,"creationTimestamp":574},"post-rabbitmq-architecture-b1256445","2026-09-13T10:01:08.867235Z",{"title":576,"slug":577,"cover":9,"excerpt":578,"publishTime":579,"categories":580,"tags":581,"priority":42,"pinned":308,"deleted":308,"visible":309,"allowComment":304},"RabbitMQ 的核心概念？","rabbitmq-architecture",{"raw":9,"autoGenerate":304},"2026-09-13T10:01:08.910375Z",[460],[168,112],{"permalink":583,"excerpt":584,"lastModifyTime":585,"phase":314},"\u002Farchives\u002Frabbitmq-architecture","一、核心组件 Producer：生产者，发送消息到 Exchange。 Exchange：交换机，接收消息并按路由规则路由到 Queue。 Queue：队列，存储消息，消费者从队列取。 Consumer：消费者。 Binding：Exchange 和 Queue 的绑定关系，带 routing ke","2026-09-16T09:14:38.789864Z",[587],{"metadata":588,"spec":591,"status":592,"postCount":88},{"name":460,"creationTimestamp":469,"labels":589,"annotations":590},{"haloweb.section":115},{"tutorial.halo.run\u002Fstatus":321},{"displayName":473,"slug":460,"cover":9,"description":474,"priority":294,"hideFromList":308,"preventParentPostCascadeQuery":308},{"permalink":476,"postCount":88,"visiblePostCount":88},[594,597],{"metadata":595,"spec":596},{"name":168},{"displayName":170,"slug":171},{"metadata":598,"spec":599},{"name":112},{"displayName":114,"slug":115},{"metadata":601,"spec":604,"status":611,"categories":615,"tags":626},{"name":602,"creationTimestamp":603},"post-zk-vs-nacos-9f45de84","2026-09-13T10:01:08.519766Z",{"title":605,"slug":606,"cover":9,"excerpt":607,"publishTime":608,"categories":609,"tags":610,"priority":42,"pinned":308,"deleted":308,"visible":309,"allowComment":304},"ZooKeeper 和 Nacos 的区别？","zk-vs-nacos",{"raw":9,"autoGenerate":304},"2026-09-13T10:01:08.716026Z",[238],[235,112],{"permalink":612,"excerpt":613,"lastModifyTime":614,"phase":314},"\u002Farchives\u002Fzk-vs-nacos","一、对比 维度 ZooKeeper Nacos 一致性 CP（ZAB） 支持 CP\u002FAP 配置中心 需自行封装 原生支持，实时推送 服务发现 临时节点 临时\u002F持久实例 控制台 无官方 有 Web 控制台 语言 Java Java 二、选择 需要强一致、分布式协调（锁、选主）→ ZooKeeper。 ","2026-09-16T09:15:13.739294Z",[616],{"metadata":617,"spec":621,"status":624,"postCount":88},{"name":238,"creationTimestamp":618,"labels":619,"annotations":620},"2026-09-13T09:13:25.785846Z",{"haloweb.section":115},{"tutorial.halo.run\u002Fstatus":321},{"displayName":622,"slug":238,"cover":9,"description":623,"priority":144,"hideFromList":308,"preventParentPostCascadeQuery":308},"Zookeeper 面试题","Zookeeper 面试题：数据节点、Watcher 机制、ZAB 协议与分布式锁选举实现。",{"permalink":625,"postCount":88,"visiblePostCount":88},"\u002Fcategories\u002Fzookeeper",[627,630],{"metadata":628,"spec":629},{"name":235},{"displayName":237,"slug":238},{"metadata":631,"spec":632},{"name":112},{"displayName":114,"slug":115},{"metadata":634,"spec":637,"status":644,"categories":648,"tags":655},{"name":635,"creationTimestamp":636},"post-zk-watcher-831fbae2","2026-09-13T10:01:08.166056Z",{"title":638,"slug":639,"cover":9,"excerpt":640,"publishTime":641,"categories":642,"tags":643,"priority":42,"pinned":308,"deleted":308,"visible":309,"allowComment":304},"ZooKeeper 的 Watcher 机制？","zk-watcher",{"raw":9,"autoGenerate":304},"2026-09-13T10:01:08.357926Z",[238],[235,112],{"permalink":645,"excerpt":646,"lastModifyTime":647,"phase":314},"\u002Farchives\u002Fzk-watcher","一、定义 客户端可以在 ZNode 上注册 Watcher，当节点状态变化时，服务端通知客户端，触发回调。 二、特性 一次性：Watcher 触发后失效，需重新注册。 轻量：只发送事件类型和路径，不发送数据。 异步：通知是异步发送的。 三、事件类型 NodeCreated：节点创建。 NodeDel","2026-09-16T09:15:14.749985Z",[649],{"metadata":650,"spec":653,"status":654,"postCount":88},{"name":238,"creationTimestamp":618,"labels":651,"annotations":652},{"haloweb.section":115},{"tutorial.halo.run\u002Fstatus":321},{"displayName":622,"slug":238,"cover":9,"description":623,"priority":144,"hideFromList":308,"preventParentPostCascadeQuery":308},{"permalink":625,"postCount":88,"visiblePostCount":88},[656,659],{"metadata":657,"spec":658},{"name":235},{"displayName":237,"slug":238},{"metadata":660,"spec":661},{"name":112},{"displayName":114,"slug":115},{"metadata":663,"spec":666,"status":673,"categories":677,"tags":684},{"name":664,"creationTimestamp":665},"post-zk-distributed-lock-fd097039","2026-09-13T10:01:07.954983Z",{"title":667,"slug":668,"cover":9,"excerpt":669,"publishTime":670,"categories":671,"tags":672,"priority":42,"pinned":308,"deleted":308,"visible":309,"allowComment":304},"ZooKeeper 实现分布式锁？","zk-distributed-lock",{"raw":9,"autoGenerate":304},"2026-09-13T10:01:08.004287Z",[238],[235,112],{"permalink":674,"excerpt":675,"lastModifyTime":676,"phase":314},"\u002Farchives\u002Fzk-distributed-lock","一、原理 利用临时顺序节点 + Watcher。 二、加锁流程 在 \u002Flock 节点下创建临时顺序节点 \u002Flock\u002Fseq-000000001。 获取 \u002Flock 下所有子节点，判断自己是否最小。 是最小 → 获取锁成功。 不是最小 → 监听前一个节点的删除事件，阻塞等待。 三、释放锁 主动删除自己","2026-09-16T09:14:42.588286Z",[678],{"metadata":679,"spec":682,"status":683,"postCount":88},{"name":238,"creationTimestamp":618,"labels":680,"annotations":681},{"haloweb.section":115},{"tutorial.halo.run\u002Fstatus":321},{"displayName":622,"slug":238,"cover":9,"description":623,"priority":144,"hideFromList":308,"preventParentPostCascadeQuery":308},{"permalink":625,"postCount":88,"visiblePostCount":88},[685,688],{"metadata":686,"spec":687},{"name":235},{"displayName":237,"slug":238},{"metadata":689,"spec":690},{"name":112},{"displayName":114,"slug":115},{"metadata":692,"spec":695,"status":702,"categories":706,"tags":713},{"name":693,"creationTimestamp":694},"post-zk-consistency-c28d9cc9","2026-09-13T10:01:07.760506Z",{"title":696,"slug":697,"cover":9,"excerpt":698,"publishTime":699,"categories":700,"tags":701,"priority":42,"pinned":308,"deleted":308,"visible":309,"allowComment":304},"ZooKeeper 如何保证一致性？","zk-consistency",{"raw":9,"autoGenerate":304},"2026-09-13T10:01:07.825110Z",[238],[112,235],{"permalink":703,"excerpt":704,"lastModifyTime":705,"phase":314},"\u002Farchives\u002Fzk-consistency","一、ZAB 协议 ZooKeeper Atomic Broadcast，类似 Paxos。 二、角色 Leader：处理写请求，发起投票。 Follower：处理读请求，参与投票。 Observer：只读，不参与投票，扩展读能力。 三、写流程 客户端写请求发给任意节点，非 Leader 转发给 Le","2026-09-16T09:15:13.291445Z",[707],{"metadata":708,"spec":711,"status":712,"postCount":88},{"name":238,"creationTimestamp":618,"labels":709,"annotations":710},{"haloweb.section":115},{"tutorial.halo.run\u002Fstatus":321},{"displayName":622,"slug":238,"cover":9,"description":623,"priority":144,"hideFromList":308,"preventParentPostCascadeQuery":308},{"permalink":625,"postCount":88,"visiblePostCount":88},[714,717],{"metadata":715,"spec":716},{"name":112},{"displayName":114,"slug":115},{"metadata":718,"spec":719},{"name":235},{"displayName":237,"slug":238},{"metadata":721,"spec":724,"status":731,"categories":735,"tags":742},{"name":722,"creationTimestamp":723},"post-zk-data-model-a6c49102","2026-09-13T10:01:07.565180Z",{"title":725,"slug":726,"cover":9,"excerpt":727,"publishTime":728,"categories":729,"tags":730,"priority":42,"pinned":308,"deleted":308,"visible":309,"allowComment":304},"ZooKeeper 的数据模型？","zk-data-model",{"raw":9,"autoGenerate":304},"2026-09-13T10:01:07.617887Z",[238],[112,235],{"permalink":732,"excerpt":733,"lastModifyTime":734,"phase":314},"\u002Farchives\u002Fzk-data-model","一、ZNode ZooKeeper 数据以树形结构存储，每个节点叫 ZNode，路径用 \u002F 分隔，如 \u002Fa\u002Fb\u002Fc。 二、节点类型 持久节点：创建后一直存在，直到删除。 临时节点：创建者会话断开自动删除。 持久顺序节点：持久 + 单调递增序号。 临时顺序节点：临时 + 单调递增序号，常用于分布式锁。","2026-09-16T09:15:14.325893Z",[736],{"metadata":737,"spec":740,"status":741,"postCount":88},{"name":238,"creationTimestamp":618,"labels":738,"annotations":739},{"haloweb.section":115},{"tutorial.halo.run\u002Fstatus":321},{"displayName":622,"slug":238,"cover":9,"description":623,"priority":144,"hideFromList":308,"preventParentPostCascadeQuery":308},{"permalink":625,"postCount":88,"visiblePostCount":88},[743,746],{"metadata":744,"spec":745},{"name":112},{"displayName":114,"slug":115},{"metadata":747,"spec":748},{"name":235},{"displayName":237,"slug":238},{"metadata":750,"spec":753,"status":760,"categories":764,"tags":776},{"name":751,"creationTimestamp":752},"post-os-io-multiplexing-5e8493ea","2026-09-13T10:01:07.249312Z",{"title":754,"slug":755,"cover":9,"excerpt":756,"publishTime":757,"categories":758,"tags":759,"priority":42,"pinned":308,"deleted":308,"visible":309,"allowComment":304},"什么是 I\u002FO 多路复用？","os-io-multiplexing",{"raw":9,"autoGenerate":304},"2026-09-13T10:01:07.426950Z",[268],[112,265],{"permalink":761,"excerpt":762,"lastModifyTime":763,"phase":314},"\u002Farchives\u002Fos-io-multiplexing","一、定义 单个线程通过系统调用同时监听多个文件描述符，哪个就绪就处理哪个，避免阻塞在单个 I\u002FO 上。 二、select select(maxfd, &readfds, &writefds, &exceptfds, &timeout);\n 位图存储 fd，有最大数量限制（1024）。 每次调用都要把","2026-09-16T09:15:12.821909Z",[765],{"metadata":766,"spec":770,"status":774,"postCount":88},{"name":268,"creationTimestamp":767,"labels":768,"annotations":769},"2026-09-13T09:13:25.893081Z",{"haloweb.section":115},{"tutorial.halo.run\u002Fstatus":321},{"displayName":771,"slug":268,"cover":9,"description":772,"priority":773,"hideFromList":308,"preventParentPostCascadeQuery":308},"操作系统面试题","操作系统面试题：进程与线程、内存管理、IO 模型、CPU 调度与同步原语。",24,{"permalink":775,"postCount":88,"visiblePostCount":88},"\u002Fcategories\u002Fos",[777,780],{"metadata":778,"spec":779},{"name":112},{"displayName":114,"slug":115},{"metadata":781,"spec":782},{"name":265},{"displayName":267,"slug":268},{"metadata":784,"spec":787,"status":794,"categories":798,"tags":805},{"name":785,"creationTimestamp":786},"post-os-memory-manage-c9ef3f72","2026-09-13T10:01:07.077926Z",{"title":788,"slug":789,"cover":9,"excerpt":790,"publishTime":791,"categories":792,"tags":793,"priority":42,"pinned":308,"deleted":308,"visible":309,"allowComment":304},"操作系统的内存管理？","os-memory-manage",{"raw":9,"autoGenerate":304},"2026-09-13T10:01:07.126511Z",[268],[112,265],{"permalink":795,"excerpt":796,"lastModifyTime":797,"phase":314},"\u002Farchives\u002Fos-memory-manage","一、虚拟内存 每个进程有独立虚拟地址空间，通过页表映射到物理内存。进程以为自己独占内存。 二、分页 内存分成固定大小的页（通常 4KB），虚拟页映射到物理页帧。 页表：记录虚拟页到物理页的映射。 TLB：页表缓存，加速地址翻译。 缺页中断：访问的页不在内存，从磁盘加载。 三、分段 按逻辑单位分段（代","2026-09-16T09:15:12.350048Z",[799],{"metadata":800,"spec":803,"status":804,"postCount":88},{"name":268,"creationTimestamp":767,"labels":801,"annotations":802},{"haloweb.section":115},{"tutorial.halo.run\u002Fstatus":321},{"displayName":771,"slug":268,"cover":9,"description":772,"priority":773,"hideFromList":308,"preventParentPostCascadeQuery":308},{"permalink":775,"postCount":88,"visiblePostCount":88},[806,809],{"metadata":807,"spec":808},{"name":112},{"displayName":114,"slug":115},{"metadata":810,"spec":811},{"name":265},{"displayName":267,"slug":268},{"metadata":813,"spec":816,"status":823,"categories":827,"tags":834},{"name":814,"creationTimestamp":815},"post-os-deadlock-f7833246","2026-09-13T10:01:06.879036Z",{"title":817,"slug":818,"cover":9,"excerpt":819,"publishTime":820,"categories":821,"tags":822,"priority":42,"pinned":308,"deleted":308,"visible":309,"allowComment":304},"什么是死锁？如何避免？","os-deadlock",{"raw":9,"autoGenerate":304},"2026-09-13T10:01:06.930093Z",[268],[112,265],{"permalink":824,"excerpt":825,"lastModifyTime":826,"phase":314},"\u002Farchives\u002Fos-deadlock","一、四个必要条件 互斥：资源同一时间只能被一个进程使用。 持有并等待：进程持有资源同时等待其他资源。 不可剥夺：已获得的资源不能被强制夺走。 循环等待：进程间形成循环等待链。 二、预防 破坏四个条件之一： - 破坏互斥：难（有些资源必须互斥）。 - 破坏持有并等待：一次性申请所有资源。 - 破坏不可","2026-09-16T09:15:11.876156Z",[828],{"metadata":829,"spec":832,"status":833,"postCount":88},{"name":268,"creationTimestamp":767,"labels":830,"annotations":831},{"haloweb.section":115},{"tutorial.halo.run\u002Fstatus":321},{"displayName":771,"slug":268,"cover":9,"description":772,"priority":773,"hideFromList":308,"preventParentPostCascadeQuery":308},{"permalink":775,"postCount":88,"visiblePostCount":88},[835,838],{"metadata":836,"spec":837},{"name":112},{"displayName":114,"slug":115},{"metadata":839,"spec":840},{"name":265},{"displayName":267,"slug":268},{"metadata":842,"spec":845,"status":852,"categories":856,"tags":863},{"name":843,"creationTimestamp":844},"post-os-scheduler-be6008d8","2026-09-13T10:01:06.684412Z",{"title":846,"slug":847,"cover":9,"excerpt":848,"publishTime":849,"categories":850,"tags":851,"priority":42,"pinned":308,"deleted":308,"visible":309,"allowComment":304},"进程调度算法有哪些？","os-scheduler",{"raw":9,"autoGenerate":304},"2026-09-13T10:01:06.733759Z",[268],[112,265],{"permalink":853,"excerpt":854,"lastModifyTime":855,"phase":314},"\u002Farchives\u002Fos-scheduler","一、先来先服务（FCFS） 按到达顺序执行，非抢占。简单但短作业可能等待很久。 二、短作业优先（SJF） 预估运行时间短的先执行。平均等待时间最短，但长作业可能饥饿。 三、时间片轮转（RR） 每个进程分配一个时间片，用完就切换。适合交互式系统，响应快。 四、优先级调度 高优先级进程先执行。可抢占或非","2026-09-16T09:15:11.437318Z",[857],{"metadata":858,"spec":861,"status":862,"postCount":88},{"name":268,"creationTimestamp":767,"labels":859,"annotations":860},{"haloweb.section":115},{"tutorial.halo.run\u002Fstatus":321},{"displayName":771,"slug":268,"cover":9,"description":772,"priority":773,"hideFromList":308,"preventParentPostCascadeQuery":308},{"permalink":775,"postCount":88,"visiblePostCount":88},[864,867],{"metadata":865,"spec":866},{"name":112},{"displayName":114,"slug":115},{"metadata":868,"spec":869},{"name":265},{"displayName":267,"slug":268},{"metadata":871,"spec":874,"status":881,"categories":885,"tags":892},{"name":872,"creationTimestamp":873},"post-os-process-thread-afd2f460","2026-09-13T10:01:06.383471Z",{"title":875,"slug":876,"cover":9,"excerpt":877,"publishTime":878,"categories":879,"tags":880,"priority":42,"pinned":308,"deleted":308,"visible":309,"allowComment":304},"进程和线程的区别？","os-process-thread",{"raw":9,"autoGenerate":304},"2026-09-13T10:01:06.551909Z",[268],[265,112],{"permalink":882,"excerpt":883,"lastModifyTime":884,"phase":314},"\u002Farchives\u002Fos-process-thread","一、定义 进程：程序运行的实例，资源分配的基本单位，有独立地址空间。 线程：进程内的执行单元，CPU 调度的基本单位，共享进程资源。 二、对比 维度 进程 线程 资源 独立地址空间 共享进程资源 切换开销 大（切换页表、TLB） 小 通信 IPC（管道、消息队列、共享内存） 共享内存（需同步） 健壮","2026-09-16T09:14:46.493415Z",[886],{"metadata":887,"spec":890,"status":891,"postCount":88},{"name":268,"creationTimestamp":767,"labels":888,"annotations":889},{"haloweb.section":115},{"tutorial.halo.run\u002Fstatus":321},{"displayName":771,"slug":268,"cover":9,"description":772,"priority":773,"hideFromList":308,"preventParentPostCascadeQuery":308},{"permalink":775,"postCount":88,"visiblePostCount":88},[893,896],{"metadata":894,"spec":895},{"name":265},{"displayName":267,"slug":268},{"metadata":897,"spec":898},{"name":112},{"displayName":114,"slug":115}]