<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[关注菜菜的后端私房菜，获取更多技术干货~]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Tc_lccc</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Tc_lccc]]></copyright><item><title><![CDATA[RocketMQ（五）：揭秘高吞吐量并发消费原理]]></title><link>https://blog.youkuaiyun.com/Tc_lccc/article/details/143932282</link><guid>https://blog.youkuaiyun.com/Tc_lccc/article/details/143932282</guid><author>Tc_lccc</author><pubDate>Thu, 21 Nov 2024 09:25:34 +0800</pubDate><description><![CDATA[提交消费请求后，会根据每次消费批处理最大消息数量进行分批次构建消费请求并提交到线程池执行任务并发消费消息的特点是吞吐量大，使用线程池对拉取的消息进行消费，但是消费消息是无法预估执行顺序消费消息时会使用消费者的消费监听器进行消费消息并获取返回状态，根据状态进行后续的处理（集群模式下）如果状态为成功则删除ProcessQueue中的消息，并更新内存中记录Broker的消费偏移量，后续定时任务向Broker进行更新该消费者所有队列对应的消费偏移量。]]></description><category></category></item><item><title><![CDATA[RocketMQ（四）：消费前如何拉取消息？（长轮询机制）]]></title><link>https://blog.youkuaiyun.com/Tc_lccc/article/details/143932248</link><guid>https://blog.youkuaiyun.com/Tc_lccc/article/details/143932248</guid><author>Tc_lccc</author><pubDate>Thu, 21 Nov 2024 09:24:48 +0800</pubDate><description><![CDATA[消息中间件消费端获取消息的方式通常有推送、拉取、长轮询（推拉结合）三种Broker主动推送消息有很好的实时性，但消费端未做流控可能会压力大，导致吞吐量、性能下降，消息积压消费者主动拉取消息能根据自己的消费能力决定拉取数量，但无法预估拉取频率，太慢会导致实时性差长轮询是特殊的拉取方式，在拉取的基础上，如果未拉取到消息会进行等待，超时或消息到达后再进行拉取，弥补拉取方式实时性差的缺点，但大量长连接一直等待资源开销大。]]></description><category></category></item><item><title><![CDATA[RocketMQ（三）：面对高并发请求，如何高效持久化消息？]]></title><link>https://blog.youkuaiyun.com/Tc_lccc/article/details/143906845</link><guid>https://blog.youkuaiyun.com/Tc_lccc/article/details/143906845</guid><author>Tc_lccc</author><pubDate>Wed, 20 Nov 2024 11:35:45 +0800</pubDate><description><![CDATA[Broker为了持久化消息会写很多文件，其中主要为CommitLog、ConsumerQueue、IndexFile文件为了实现高性能的写入，写入文件通常都是使用mmap（内存映射）对应源码中的MappedFileCommitLog为消息顺序写入的文件，通过顺序写的方式提高写入性能，文件名以起始偏移量命名，固定1G，消息被消费后会删除。]]></description><category></category></item><item><title><![CDATA[搭建环境麻烦？5分钟上手云主机快速开发]]></title><link>https://blog.youkuaiyun.com/Tc_lccc/article/details/143906801</link><guid>https://blog.youkuaiyun.com/Tc_lccc/article/details/143906801</guid><author>Tc_lccc</author><pubDate>Wed, 20 Nov 2024 11:34:36 +0800</pubDate><description><![CDATA[本文将详细介绍如何在云主机中使用IDE工具结合Redis开发测试秒杀抢购功能，帮助读者充分理解该强大的开发环境]]></description><category></category></item><item><title><![CDATA[入门Hadoop存储与计算：实现单词统计的分布式文件处理系统]]></title><link>https://blog.youkuaiyun.com/Tc_lccc/article/details/143873228</link><guid>https://blog.youkuaiyun.com/Tc_lccc/article/details/143873228</guid><author>Tc_lccc</author><pubDate>Tue, 19 Nov 2024 09:51:04 +0800</pubDate><description><![CDATA[本文主要讨论Hadoop下的HDFS存储与MapReduce计算HDFS存储架构主要由namenode、datanode来实现，其中存储分为不同机架rack，机架上的节点间通信需要交换机，节点上真正存储数据块block同时为了实现数据可用与可靠，会对数据块进行冗余，副本存储在不同机架上，机架上不均匀的存储可以减少写开销计算流程会先对输入进行切片，切片后一一进行映射map，然后对KV进行分区排序后，再进行reduce合并，最终将结果输出到文件存储到HDFS。]]></description><category></category></item><item><title><![CDATA[Spring AI 开发专属于你的AI聊天机器人]]></title><link>https://blog.youkuaiyun.com/Tc_lccc/article/details/143873191</link><guid>https://blog.youkuaiyun.com/Tc_lccc/article/details/143873191</guid><author>Tc_lccc</author><pubDate>Tue, 19 Nov 2024 09:50:26 +0800</pubDate><description><![CDATA[随着人工智能技术的飞速发展，聊天机器人在现代商业中的应用越来越广泛聊天机器人不仅提高了效率，还改善了用户体验，它们可以24/7不间断地为客户提供服务，解答常见问题本文将介绍如何设计并实现一个AI聊天机器人，该机器人能够理解用户的文本输入并给出相应的回答通过结合Spring Boot、Spring AI等技术，我们将构建一个AI聊天机器人，适用于各种对话场景本篇文章通过Spring Boot、Spring AI、Alibaba-AI等技术实现AI聊天机器人。]]></description><category></category></item><item><title><![CDATA[从零开始：手摸手教你入门搭建Hadoop]]></title><link>https://blog.youkuaiyun.com/Tc_lccc/article/details/143845318</link><guid>https://blog.youkuaiyun.com/Tc_lccc/article/details/143845318</guid><author>Tc_lccc</author><pubDate>Mon, 18 Nov 2024 10:05:17 +0800</pubDate><description><![CDATA[通过引入Hadoop，业务团队能够有效地应对大规模数据的存储和处理挑战，提升了数据处理效率，降低存储成本，增强系统的稳定性和可靠性搭建Hadoop的过程可能涉及到不同的坑，但通过本文的详细指导，同学们可以顺利地进行搭建希望本篇实践能帮助你在项目中成功应搭建Hadoop，带来显著的业务价值。]]></description><category></category></item><item><title><![CDATA[入门微服务架构设计：由下单场景实现服务注册、发现以及调用]]></title><link>https://blog.youkuaiyun.com/Tc_lccc/article/details/143845051</link><guid>https://blog.youkuaiyun.com/Tc_lccc/article/details/143845051</guid><author>Tc_lccc</author><pubDate>Mon, 18 Nov 2024 09:58:45 +0800</pubDate><description><![CDATA[本文使用 Java 和 Spring Boot 框架设计一个微服务架构，以扣减库存的流程来实现服务的注册、发现和调用，并通过Spring Cloud （Alibaba）进行服务治理虽然我们已经简化很多流程，但不难看出微服务架构下的开发要比单体架构下麻烦的多微服务架构虽然能够解决单体架构所带来的问题，但同时也会引入一系列的问题因此选择不同的架构时需要结合项目、场景等多方面因素进行选择本篇文章被收入专栏深入浅出微服务，感兴趣的同学可以持续关注喔本篇文章笔记以及案例被收入。]]></description><category></category></item><item><title><![CDATA[ReflectionUtils提高反射性能！]]></title><link>https://blog.youkuaiyun.com/Tc_lccc/article/details/143200327</link><guid>https://blog.youkuaiyun.com/Tc_lccc/article/details/143200327</guid><author>Tc_lccc</author><pubDate>Thu, 24 Oct 2024 09:33:51 +0800</pubDate><description><![CDATA[反射是需要检查访问权限的，比如说私有字段是否允许访问使用反射进行方法调用时通常是Object，因此会涉及到需要强制类型转换JIT即时编译器会将循环次数多的热点代码进行编译成本地码，而后续不再需要解释执行，从而进行优化反射需要运行时动态解析类的元数据并查找，动态解析导致可能无法使用JIT为了安全，反射调用本地方法查找方法、字段数组时，通常会将对象进行copy后返回新的实例。]]></description><category></category></item><item><title><![CDATA[丸辣！BigDecimal又踩坑了]]></title><link>https://blog.youkuaiyun.com/Tc_lccc/article/details/143200294</link><guid>https://blog.youkuaiyun.com/Tc_lccc/article/details/143200294</guid><author>Tc_lccc</author><pubDate>Thu, 24 Oct 2024 09:32:57 +0800</pubDate><description><![CDATA[小菜之前在国内的一家电商公司自研电商项目，在那个项目中是以人民币的分为最小单位使用Long来进行计算现在小菜在跨境电商公司也接到了类似的计算需求，在小菜火速完成提交代码后，却被技术leader给叫过去臭骂了一顿技术leader让小菜将类型改为BigDecimal，小菜苦思不得其解，于是下班后发奋图强，准备搞懂BigDecimal后再对代码进行修改在 Java 中，浮点类型在进行运算时可能会产生精度丢失的问题尤其是当它们表示非常大或非常小的数，或者需要进行高精度的金融计算时。]]></description><category></category></item><item><title><![CDATA[RocketMQ（二）：揭秘发送消息核心原理（源码与设计思想解析）]]></title><link>https://blog.youkuaiyun.com/Tc_lccc/article/details/143174726</link><guid>https://blog.youkuaiyun.com/Tc_lccc/article/details/143174726</guid><author>Tc_lccc</author><pubDate>Wed, 23 Oct 2024 09:15:33 +0800</pubDate><description><![CDATA[先校验参数，避免参数出错再获取Topic路由信息，如果本地没有就从NameServer获取然后通过线性轮询法选择队列，如果开启后，同步失败新的重试会选择其他broker紧接着对消息进行封装，设置唯一ID、压缩消息、检查禁止发送钩子、发送前后钩子等最后使用Netty写请求进行rpc，期间也会有rpc的钩子，如果是同步则会等待在此期间会进行重试、超时检测。]]></description><category></category></item><item><title><![CDATA[这样的SQL执行为什么不会报错？optimizer_trace深度历险]]></title><link>https://blog.youkuaiyun.com/Tc_lccc/article/details/143174690</link><guid>https://blog.youkuaiyun.com/Tc_lccc/article/details/143174690</guid><author>Tc_lccc</author><pubDate>Wed, 23 Oct 2024 09:14:16 +0800</pubDate><description><![CDATA[本篇文章被收入专栏MySQL进阶之路，感兴趣的同学可以持续关注喔本篇文章笔记以及案例被收入感兴趣的同学可以stat下持续关注喔~关注菜菜，分享更多干货，公众号：菜菜的后端私房菜。]]></description><category></category></item><item><title><![CDATA[咦！Spring容器里为什么没有我需要的Bean？]]></title><link>https://blog.youkuaiyun.com/Tc_lccc/article/details/143139546</link><guid>https://blog.youkuaiyun.com/Tc_lccc/article/details/143139546</guid><author>Tc_lccc</author><pubDate>Tue, 22 Oct 2024 09:28:04 +0800</pubDate><description><![CDATA[默认只扫描当前包下的组件，如果需要扫描其他包，需要配置的或value字段当配置过时，默认不会扫描当前包下的组件，注意把当前包也加入配置本篇文章被收入专栏深入浅出常用框架，感兴趣的同学可以持续关注喔本篇文章笔记以及案例被收入，除此之外还有更多Java进阶相关知识，感兴趣的同学可以starred持续关注喔~关注菜菜，分享更多技术干货，公众号：菜菜的后端私房菜。]]></description><category></category></item><item><title><![CDATA[RocketMQ（一）：消息中间件缘起，一览整体架构及核心组件]]></title><link>https://blog.youkuaiyun.com/Tc_lccc/article/details/143139521</link><guid>https://blog.youkuaiyun.com/Tc_lccc/article/details/143139521</guid><author>Tc_lccc</author><pubDate>Tue, 22 Oct 2024 09:27:20 +0800</pubDate><description><![CDATA[消息中间件通常有削峰填谷、异步通信、架构解耦、高性能、高可用、集群扩展、负载均衡等相关特点，同时项目中引入消息中间件也会增加调用链路、系统复杂度RocketMQ由NameServer、Broker、Product、Consumer等集群组成其中Broker作为服务端，负责接收消息、对消息进行高效持久化、消费消息时高效查询定义Topic对消息进行分类，为了提升水平扩展写入能力，Topic下可以设置MessageQueue队列，消息作为数据载体存储在队列中，等待被消费。]]></description><category></category></item><item><title><![CDATA[异步任务编排神器CompletableFuture]]></title><link>https://blog.youkuaiyun.com/Tc_lccc/article/details/143106926</link><guid>https://blog.youkuaiyun.com/Tc_lccc/article/details/143106926</guid><author>Tc_lccc</author><pubDate>Mon, 21 Oct 2024 10:59:53 +0800</pubDate><description><![CDATA[CompletableFuture提供串行、AND、OR、异常捕获、结果聚合等多种API，通过这些API能够更方便、快捷的实现异步任务的编排使用CompletableFuture时务必对任务进行异常处理，并且它会使用CompletionException或ExecutionException包装异常，再打印异常时记得使用工具类处理，避免打印到包装的异常CompletableFuture异步任务中如果指定线程池则直接使用指定的线程池。]]></description><category></category></item><item><title><![CDATA[JUC组件实战：实现RRPC(Java与硬件通过MQTT的同步通信)]]></title><link>https://blog.youkuaiyun.com/Tc_lccc/article/details/143106845</link><guid>https://blog.youkuaiyun.com/Tc_lccc/article/details/143106845</guid><author>Tc_lccc</author><pubDate>Mon, 21 Oct 2024 10:58:54 +0800</pubDate><description><![CDATA[RRPC指的是调用该接口向指定设备发送请求消息，并同步返回响应在物联网场景下，如果想要做到Java服务与硬件同步通信的效果，那么一般会依赖MQTT来实现通信比如Java服务向硬件发送请求，请求查询硬件相关信息在这个同步通信的过程中，Java服务发送完消息是需要等待直到ack响应的，那么这个过程在Java服务端该如何实现这种等待/唤醒的模式呢？本文就结合JUC组件来实现Java与硬件（通过MQTT）同步通信的组件（为了简化流程，我们代码中使用阻塞队列代替MQTT）整体流程可以想象成远程调用的流程，只不过消费端]]></description><category></category></item><item><title><![CDATA[以超卖为例✨各种场景下如何防止并发污染数据？]]></title><link>https://blog.youkuaiyun.com/Tc_lccc/article/details/140706073</link><guid>https://blog.youkuaiyun.com/Tc_lccc/article/details/140706073</guid><author>Tc_lccc</author><pubDate>Fri, 26 Jul 2024 09:09:57 +0800</pubDate><description><![CDATA[本篇文章以防止商品超卖为案例，从Java层面到中间件层面描述各种场景下用不同的方式来解决并发读写可能引起的数据不一致性问题确保服务一直为单节点时在并发量较少的场景，可以使用本地锁synchronized、Lock，Lock可以超时等待避免大量请求阻塞如果服务一直为单节点时在并发量较高的场景，可以把库存数据放到内存中操作，再异步同步数据库，宕机可能导致部分数据丢失服务目前为单节点，以后可能会增加节点的场景，可以使用MySQL新增版本号字段做乐观锁。]]></description><category></category></item><item><title><![CDATA[Tomcat中的WebSocket是如何实现的？]]></title><link>https://blog.youkuaiyun.com/Tc_lccc/article/details/140706050</link><guid>https://blog.youkuaiyun.com/Tc_lccc/article/details/140706050</guid><author>Tc_lccc</author><pubDate>Fri, 26 Jul 2024 09:09:12 +0800</pubDate><description><![CDATA[WebSocket是一种长期、双向、实时通信的协议，基于HTTP协议后升级为WebSocket协议Tomcat在处理WebSocket时与HTTP请求有所不同，处理网络通信依旧还是使用EndPoint当请求为HTTP时会使用Http11Processor接卸请求，经过适配器最终交给Container容器处理；当请求为WebSocket时使用UpgradeProcessorInternal，路由到WebSocketContainer容器中的ServerEndPoint处理类进行处理。]]></description><category></category></item><item><title><![CDATA[盘点Tomcat中常见的13种设计模式]]></title><link>https://blog.youkuaiyun.com/Tc_lccc/article/details/140679798</link><guid>https://blog.youkuaiyun.com/Tc_lccc/article/details/140679798</guid><author>Tc_lccc</author><pubDate>Thu, 25 Jul 2024 09:07:07 +0800</pubDate><description><![CDATA[单例模式全局维护单一对象，适合生命周期长（与应用生命周期相同）、全局访问的对象，避免创建/销毁开销，但为了全局唯一，创建对象时需要使用“同步”的机制；业务中全局共享、生命周期长的组件考虑设计为单例工厂模式根据入参构建对象，屏蔽内部实现细节，常用于构建/复用复杂对象；业务中根据不同参数创建/获取不同实现组件考虑使用工厂适配器模式将原本不兼容的接口转换为期望的接口，提高兼容性，但转换过程存在开销；业务中对两个不适配的组件兼容时考虑适配器。]]></description><category></category></item><item><title><![CDATA[Tomcat类加载器揭秘：“重塑”双亲委派模型]]></title><link>https://blog.youkuaiyun.com/Tc_lccc/article/details/140679779</link><guid>https://blog.youkuaiyun.com/Tc_lccc/article/details/140679779</guid><author>Tc_lccc</author><pubDate>Thu, 25 Jul 2024 09:06:35 +0800</pubDate><description><![CDATA[双亲委派模型优先将类交给父类加载，如果父类不能加载再由自己加载，当自己也无法加载时抛出ClassNotFoundException异常，能够保证核心类库不被破坏通过类加载器可以解决隔离的问题，判断类是否相同时要满足全限定类名和类加载器都相同Tomcat为了解决多Web应用间类的隔离，自定义WebAppClassLoader类加载器作为Context容器的Loader。]]></description><category></category></item></channel></rss>