<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[programer_33的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/programer_33</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; programer_33]]></copyright><item><title><![CDATA[MCP 服务调用-2]]></title><link>https://blog.youkuaiyun.com/programer_33/article/details/155615304</link><guid>https://blog.youkuaiyun.com/programer_33/article/details/155615304</guid><author>programer_33</author><pubDate>Fri, 05 Dec 2025 19:22:27 +0800</pubDate><description><![CDATA[本文介绍了一种免费的地理信息服务方案，使用VSCode结合Cline插件、OpenAI免费模型和百度MCP服务。配置方法包括：1)安装Cline插件后设置百度MCP密钥；2)通过OpenRouter获取免费API密钥并选择合适模型。与付费的DeepSeek方案相比，该免费方案同样能提供优质的路线规划建议，包括距离更近的公园推荐、返程路线规划以及景点推荐等实用功能，但完全无需支付费用。]]></description><category></category></item><item><title><![CDATA[MCP 服务调用]]></title><link>https://blog.youkuaiyun.com/programer_33/article/details/155614689</link><guid>https://blog.youkuaiyun.com/programer_33/article/details/155614689</guid><author>programer_33</author><pubDate>Fri, 05 Dec 2025 18:48:54 +0800</pubDate><description><![CDATA[本文介绍了在CherryStudio中配置MCP（windows环境）的具体步骤：1）创建并配置API key；2）选择百度地图平台，完成注册认证后创建应用，将key粘贴到CherryStudio的JSON配置中；3）验证功能时需注意免费模型可能出现超时，充值后（如10元）可正常使用并显示token消耗情况（示例消耗3078个token，花费0.02元）。]]></description><category></category></item><item><title><![CDATA[本地手动创建一个MCP（windows环境）]]></title><link>https://blog.youkuaiyun.com/programer_33/article/details/155605651</link><guid>https://blog.youkuaiyun.com/programer_33/article/details/155605651</guid><author>programer_33</author><pubDate>Fri, 05 Dec 2025 16:32:33 +0800</pubDate><description><![CDATA[检验:这里需要关闭powershell 重新打开一个执行command: uv python list。左边点击installation ，然后根据自己的操作系统选择对应的安装语句。复制安装语句，然后在本地打开powershell 粘贴，执行即可。主要有一个功能就是计算两数之和，这个之后会在下一步调用验证。参数：第二行填写自己的项目地址，最后一行是要run 的文件。然后再去安装响应的python版本，运行成功截图如下;消息输入框下面的一个按钮，选择刚刚创建的mcp 服务器。如果安装不成功出现下面错误，]]></description><category></category></item><item><title><![CDATA[大文件上传的实现方式]]></title><link>https://blog.youkuaiyun.com/programer_33/article/details/152129673</link><guid>https://blog.youkuaiyun.com/programer_33/article/details/152129673</guid><author>programer_33</author><pubDate>Fri, 26 Sep 2025 17:11:19 +0800</pubDate><description><![CDATA[摘要：分片上传技术将大文件分割为小块（如5MB）依次上传，支持断点续传和并行传输提升可靠性。前端通过Blob.slice实现分片，服务端需提供分片接收、合并及校验接口。该技术能有效解决网络不稳定导致的上传中断问题，配合进度监控和压缩预处理可优化用户体验。对于超大文件，还可采用WebSocket或P2P传输方案。典型实现包括记录上传状态、控制并发数及服务端分片合并处理。]]></description><category></category></item><item><title><![CDATA[G1的SATB为什么比CMS增量标记快]]></title><link>https://blog.youkuaiyun.com/programer_33/article/details/152080047</link><guid>https://blog.youkuaiyun.com/programer_33/article/details/152080047</guid><author>programer_33</author><pubDate>Thu, 25 Sep 2025 13:40:07 +0800</pubDate><description><![CDATA[SATB与CMS垃圾回收算法的性能差异主要体现在标记机制上。SATB采用初始快照方式，通过pre-write屏障记录旧值，标记范围固定且开销较小，适合大内存场景，停顿时间可控制在10ms内。CMS需要动态跟踪对象变化，维护卡表导致更高开销，标记时间与存活对象数正相关，4TB堆的停顿常超50ms。测试表明SATB比CMS减少50%以上标记停顿，尤其在大内存应用中优势明显。]]></description><category></category></item><item><title><![CDATA[Redis 过期策略]]></title><link>https://blog.youkuaiyun.com/programer_33/article/details/151967176</link><guid>https://blog.youkuaiyun.com/programer_33/article/details/151967176</guid><author>programer_33</author><pubDate>Thu, 25 Sep 2025 13:10:05 +0800</pubDate><description><![CDATA[Redis通过定期删除和惰性删除两种策略处理键过期问题。定期删除定时扫描并清理过期键，平衡内存和CPU使用；惰性删除则在访问键时检查过期状态，减少CPU开销但可能导致内存泄漏。此外，Redis支持expire和setex命令设置过期时间。三种过期策略各有优劣：定时删除虽及时但耗资源；惰性删除节省CPU但可能堆积过期键；定期删除折中处理，需合理配置执行频率和时长以优化性能。实际采用混合策略确保高效内存管理。]]></description><category></category></item><item><title><![CDATA[GC 是任何时候都可以的吗？]]></title><link>https://blog.youkuaiyun.com/programer_33/article/details/152079550</link><guid>https://blog.youkuaiyun.com/programer_33/article/details/152079550</guid><author>programer_33</author><pubDate>Thu, 25 Sep 2025 13:04:46 +0800</pubDate><description><![CDATA[GC垃圾收集器只能在安全点（Safepoint）进行，这是JVM中线程可以安全暂停的特定位置。安全点确保线程状态已知且一致，便于垃圾回收和堆栈遍历等操作。触发条件包括显式调用System.gc()或内存不足时被动触发。安全点通常设置在方法调用、循环跳转和异常抛出位置，以减少性能损耗。线程通过检查全局标志进入安全点暂停，等待GC完成。]]></description><category></category></item><item><title><![CDATA[ConcurrentHashMap 实现的原理]]></title><link>https://blog.youkuaiyun.com/programer_33/article/details/152074426</link><guid>https://blog.youkuaiyun.com/programer_33/article/details/152074426</guid><author>programer_33</author><pubDate>Thu, 25 Sep 2025 10:40:06 +0800</pubDate><description><![CDATA[ConcurrentHashMap是Java并发包中的高性能线程安全哈希表。JDK1.7采用分段锁机制，将哈希表分为多个Segment，每个Segment独立加锁，实现并发读写。JDK1.8优化为CAS+synchronized机制，使用Node数组+链表/红黑树结构，锁粒度细化到单个桶，支持多线程协同扩容。核心特性包括：无锁读操作、CAS写初始化、synchronized处理冲突、链表转红黑树优化查询、并发扩容等。相比Hashtable等同步容器，ConcurrentHashMap在保证线程安全的同时显著]]></description><category></category></item><item><title><![CDATA[Synchronized 关键字的底层实现原理]]></title><link>https://blog.youkuaiyun.com/programer_33/article/details/152041921</link><guid>https://blog.youkuaiyun.com/programer_33/article/details/152041921</guid><author>programer_33</author><pubDate>Wed, 24 Sep 2025 15:33:12 +0800</pubDate><description><![CDATA[摘要：Java早期版本的Synchronized采用重量级锁实现，通过对象头的MarkWord和Monitor机制管理线程同步，涉及操作系统层面的上下文切换开销较大。JVM优化包括锁升级（偏向锁-&gt;轻量级锁-&gt;重量级锁），字节码层面通过monitorenter/monitorexit指令实现同步。建议减少同步范围、优先使用并发工具类以避免性能问题，从而更高效地实现线程安全。（149字）]]></description><category></category></item><item><title><![CDATA[数据库设计中的三大范式]]></title><link>https://blog.youkuaiyun.com/programer_33/article/details/152039749</link><guid>https://blog.youkuaiyun.com/programer_33/article/details/152039749</guid><author>programer_33</author><pubDate>Wed, 24 Sep 2025 14:44:47 +0800</pubDate><description><![CDATA[数据库设计中的三大范式是关系型数据库设计的核心规范。第一范式(1NF)要求数据原子性和唯一标识；第二范式(2NF)在1NF基础上消除部分依赖；第三范式(3NF)消除传递依赖。三大范式能有效减少冗余，提高数据一致性，但过度规范化可能影响查询性能。实际应用中需在规范化和性能之间取得平衡，有时允许合理冗余。]]></description><category></category></item><item><title><![CDATA[Redis 与Memcached 的对比]]></title><link>https://blog.youkuaiyun.com/programer_33/article/details/151966786</link><guid>https://blog.youkuaiyun.com/programer_33/article/details/151966786</guid><author>programer_33</author><pubDate>Mon, 22 Sep 2025 16:25:43 +0800</pubDate><description><![CDATA[Redis和Memcached对比摘要：Redis支持多种数据结构、持久化(rdb/aof)和事务，采用单线程模型，适合复杂场景；Memcached仅支持简单键值，纯内存缓存无持久化，多线程高并发性能更优。关键差异在于Redis功能丰富(集群/订阅/地理索引等)，Memcached专注简单缓存。选择依据：需数据结构/持久化用Redis，追求极致性能选Memcached。]]></description><category></category></item><item><title><![CDATA[Redis 合适的应用场景]]></title><link>https://blog.youkuaiyun.com/programer_33/article/details/151965364</link><guid>https://blog.youkuaiyun.com/programer_33/article/details/151965364</guid><author>programer_33</author><pubDate>Mon, 22 Sep 2025 16:00:27 +0800</pubDate><description><![CDATA[Redis作为高性能内存数据库，支持多种数据结构应对不同场景：1）String类型适用缓存系统、计数器；2）SortedSet实现实时排行榜；3）List/Stream构建消息队列；4）GEO模块处理地理位置服务；5）分布式锁解决资源竞争。其优势在于原子操作、低延迟和高吞吐，但需注意内存管理、持久化配置和查询功能限制。典型应用包括会话存储、实时数据处理和限流控制等。]]></description><category></category></item><item><title><![CDATA[Redis 为什么那么快]]></title><link>https://blog.youkuaiyun.com/programer_33/article/details/151964127</link><guid>https://blog.youkuaiyun.com/programer_33/article/details/151964127</guid><author>programer_33</author><pubDate>Mon, 22 Sep 2025 15:24:19 +0800</pubDate><description><![CDATA[Redis高性能的五大核心机制：1）内存存储避免磁盘I/O瓶颈；2）单线程模型结合I/O多路复用降低并发开销；3）定制化数据结构（SDS/跳表等）实现高效存取；4）Reactor网络模型和RESP协议提升通信效率；5）灵活的持久化策略（RDB/AOF）平衡性能与可靠性。通过内存优化、线程模型、数据结构、网络协议和持久化策略的系统性设计，实现微秒级响应和高吞吐量。]]></description><category></category></item><item><title><![CDATA[Java中锁的类型]]></title><link>https://blog.youkuaiyun.com/programer_33/article/details/151957120</link><guid>https://blog.youkuaiyun.com/programer_33/article/details/151957120</guid><author>programer_33</author><pubDate>Mon, 22 Sep 2025 11:26:30 +0800</pubDate><description><![CDATA[摘要：Java锁机制按公平性可分为公平锁（按请求顺序分配）和非公平锁（允许插队）；按排他性分为独占锁（单线程访问）和共享锁（多线程读共享）；按获取方式分为悲观锁（先加锁）和乐观锁（后验证）；按状态分为可重入锁（允许重复获取）和不可重入锁（禁止重复获取）。不同锁类型适用于不同并发场景，需权衡公平性、性能与功能需求。]]></description><category></category></item><item><title><![CDATA[java 内存交互模型-JMM]]></title><link>https://blog.youkuaiyun.com/programer_33/article/details/151873102</link><guid>https://blog.youkuaiyun.com/programer_33/article/details/151873102</guid><author>programer_33</author><pubDate>Fri, 19 Sep 2025 20:07:43 +0800</pubDate><description><![CDATA[Java内存交互模型（JMM）定义了多线程环境下线程与内存的交互规则，确保可见性、有序性和原子性。其核心包括主内存（存储共享变量）和工作内存（线程私有副本），通过8种原子操作（如read/load、store/write）实现内存交互。JMM通过volatile、synchronized和final关键字保证可见性，遵循happens-before原则（程序顺序、锁规则等）控制指令重排序。原子性方面，基本数据类型读写是原子操作，而64位类型需使用同步机制。JMM为编写线程安全代码提供了理论基础，通过合理使用]]></description><category></category></item><item><title><![CDATA[内存分配策略]]></title><link>https://blog.youkuaiyun.com/programer_33/article/details/151870016</link><guid>https://blog.youkuaiyun.com/programer_33/article/details/151870016</guid><author>programer_33</author><pubDate>Fri, 19 Sep 2025 17:33:43 +0800</pubDate><description><![CDATA[本文概述了JVM内存分配与回收机制：1)对象优先在Eden区分配，空间不足时触发MinorGC；2)区分MinorGC(回收新生代)与MajorGC/FullGC(回收老年代/全堆)；3)大对象直接进入老年代以避免复制开销；4)通过年龄计数器实现长期存活对象晋升老年代；5)动态对象年龄判定机制允许提前晋升。这些机制共同优化了JVM内存管理效率。]]></description><category></category></item><item><title><![CDATA[Java对象什么时候会被移动到老年代]]></title><link>https://blog.youkuaiyun.com/programer_33/article/details/151863275</link><guid>https://blog.youkuaiyun.com/programer_33/article/details/151863275</guid><author>programer_33</author><pubDate>Fri, 19 Sep 2025 13:35:34 +0800</pubDate><description><![CDATA[Java对象晋升老年代的主要条件包括：年龄阈值触发（默认15次MinorGC）、大对象直接分配、Survivor空间不足、动态年龄判定（同年龄对象超50%空间）和分配担保机制。关键参数有MaxTenuringThreshold（最大晋升年龄）、PretenureSizeThreshold（大对象阈值）和TargetSurvivorRatio（Survivor区利用率）。合理调整这些参数可优化GC行为，例如增大Survivor比例可减少秒杀场景下的FullGC。]]></description><category></category></item><item><title><![CDATA[内存泄漏与内存溢出]]></title><link>https://blog.youkuaiyun.com/programer_33/article/details/151839425</link><guid>https://blog.youkuaiyun.com/programer_33/article/details/151839425</guid><author>programer_33</author><pubDate>Thu, 18 Sep 2025 22:26:46 +0800</pubDate><description><![CDATA[内存泄漏与内存溢出的区别与联系 内存泄漏指程序未能释放不再使用的内存，导致内存被无效占用，长期积累可能引发溢出。常见原因包括未关闭资源、静态集合未清理等。 内存溢出是程序申请内存时超出系统可用空间，常由单次申请过大或泄漏积累导致，表现为程序崩溃或抛出内存不足错误。 关键区别：泄漏是内存未被释放，溢出是内存不足；泄漏需长期积累才显现，溢出会即时触发错误。 解决方案：通过工具（如MAT、VisualVM）检测泄漏，优化代码逻辑；对于溢出，可调整内存参数或优化数据加载方式。]]></description><category></category></item><item><title><![CDATA[JVM 类加载机制]]></title><link>https://blog.youkuaiyun.com/programer_33/article/details/151839104</link><guid>https://blog.youkuaiyun.com/programer_33/article/details/151839104</guid><author>programer_33</author><pubDate>Thu, 18 Sep 2025 22:08:00 +0800</pubDate><description><![CDATA[JVM 类加载机制是 Java 虚拟机将类文件（.class）加载到内存，并进行验证、准备、解析和初始化的过程。这一机制确保了类的正确性和安全性，同时支持动态加载和运行时绑定。用户可通过继承类实现自定义类加载器，用于特定场景（如热部署、模块化加载等）。需重写方法，而非以避免破坏双亲委派模型。@Override// 从自定义路径加载字节码// 实现从文件或网络加载字节码的逻辑。]]></description><category></category></item><item><title><![CDATA[JVM 内存区域]]></title><link>https://blog.youkuaiyun.com/programer_33/article/details/151838732</link><guid>https://blog.youkuaiyun.com/programer_33/article/details/151838732</guid><author>programer_33</author><pubDate>Thu, 18 Sep 2025 21:45:36 +0800</pubDate><description><![CDATA[摘要：JVM内存区域分为线程私有和共享区域。私有区域包括程序计数器（记录字节码指令地址）、虚拟机栈（存储方法栈帧）和本地方法栈；共享区域包括堆（存储对象实例）、方法区（存储类信息）和运行时常量池。程序计数器是唯一不会内存溢出的区域，而其他区域在内存不足时可能抛出StackOverflowError或OutOfMemoryError。直接内存虽非JVM管理，但也会影响内存使用。不同虚拟机实现可能存在差异。]]></description><category></category></item></channel></rss>