<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[JamSlade的博客]]></title><description><![CDATA[真正的大师永远都怀着一颗学徒的心]]></description><link>https://blog.youkuaiyun.com/JamSlade</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; JamSlade]]></copyright><item><title><![CDATA[优化用户体验的小点：乐观更新链路 双数据库查询]]></title><link>https://blog.youkuaiyun.com/JamSlade/article/details/154530360</link><guid>https://blog.youkuaiyun.com/JamSlade/article/details/154530360</guid><author>JamSlade</author><pubDate>Tue, 11 Nov 2025 17:15:51 +0800</pubDate><description><![CDATA[本文介绍了前端优化的&quot;乐观更新&quot;技术方案和双数据库系统架构设计。 乐观更新方案通过三步实现：1)保存当前状态用于回滚 2)立即更新UI显示成功状态 3)异步执行API请求，失败时回滚UI。同时利用路由状态传递缓存数据实现快速页面切换。 双数据库架构采用读写分离设计：一个只读数据仓库用于查询展示，支持大数据和连接池；另一个专门处理用户操作，支持高频CRUD、事务和异步连接。 这些方案通过减少用户等待时间和系统负载，有效提升了用户体验和系统性能。]]></description><category></category></item><item><title><![CDATA[SSO登录验证设计要点细节（以微软 Microsoft SSO为例） 基于react python]]></title><link>https://blog.youkuaiyun.com/JamSlade/article/details/154022576</link><guid>https://blog.youkuaiyun.com/JamSlade/article/details/154022576</guid><author>JamSlade</author><pubDate>Wed, 05 Nov 2025 16:13:28 +0800</pubDate><description><![CDATA[文章摘要：本文介绍了基于Microsoft SSO的前后端认证流程。流程分为3步：1)用户访问前端页面，若无登录状态则跳转登录页；2)后端接收账号密码后调用Microsoft接口生成临时code返回前端；3)前端用临时code获取JWT并存储，进入正式界面。技术实现包括：前端使用React框架，通过AuthProvider和AuthGuard管理认证状态；后端采用Python处理OAuth回调，生成临时code和JWT token；认证成功后重定向并携带临时code，最终完成认证并存储用户信息。]]></description><category></category></item><item><title><![CDATA[流式响应 sse 系统全流程 react + fastapi为例子]]></title><link>https://blog.youkuaiyun.com/JamSlade/article/details/153464054</link><guid>https://blog.youkuaiyun.com/JamSlade/article/details/153464054</guid><author>JamSlade</author><pubDate>Fri, 17 Oct 2025 14:12:11 +0800</pubDate><description><![CDATA[本文介绍了前端发送消息及处理流式响应的完整实现方案。前端部分包含：1) 处理新会话创建逻辑，使用乐观更新优化用户体验；2) 消息发送时添加流式消息标记；3) 通过fetch API实现流式请求，支持中断控制和分块处理。后端采用Python实现SSE流式响应，包含错误处理和数据库保存逻辑。关键技术点包括：AbortController实现请求中断、ReadableStream处理流式数据、SSE协议格式规范以及前后端协同的流式交互设计。]]></description><category></category></item><item><title><![CDATA[react 无限画布难点和实现]]></title><link>https://blog.youkuaiyun.com/JamSlade/article/details/153398646</link><guid>https://blog.youkuaiyun.com/JamSlade/article/details/153398646</guid><author>JamSlade</author><pubDate>Thu, 16 Oct 2025 15:13:13 +0800</pubDate><description><![CDATA[本文探讨了如何通过超大固定画布+可移动窗口实现无限画布效果。对比了三种实现方案：动态更新position（效率低）、CSStransformation（推荐）和Canvas重绘（开发成本高）。重点介绍了基于CSS transform的解决方案，包括架构设计、DOM层次、平移(Pan)和缩放(Zoom)的具体实现。文章还讨论了坐标转换问题，将存储层的百分比坐标转换为渲染层的像素坐标，并详细说明了八方向resize handle的实现方法。该方案通过transform优化渲染性能，适合业务交互场景。]]></description><category></category></item><item><title><![CDATA[JavaScript 异步编程、对象/数组操作]]></title><link>https://blog.youkuaiyun.com/JamSlade/article/details/148098265</link><guid>https://blog.youkuaiyun.com/JamSlade/article/details/148098265</guid><author>JamSlade</author><pubDate>Wed, 21 May 2025 09:46:10 +0800</pubDate><description><![CDATA[JavaScript 是单线程语言，通过事件循环机制处理异步操作。任务分为宏任务（如 setTimeout、I/O）和微任务（如 Promise.then）。事件循环的执行顺序为：执行一个宏任务，执行所有微任务，渲染页面（如果需要），再执行下一个宏任务。fetch API 用于网络请求，返回 Promise 对象，支持 GET 和 POST 请求。数组和对象操作中，展开运算符（...）可用于数组、对象和函数参数，剩余参数（...rest）用于解构赋值。浅拷贝（如 Object.assign）只复制引用，深拷]]></description><category></category></item><item><title><![CDATA[javascript个人笔记 闭包/this/解构赋值/模板字符串/模块化]]></title><link>https://blog.youkuaiyun.com/JamSlade/article/details/148073129</link><guid>https://blog.youkuaiyun.com/JamSlade/article/details/148073129</guid><author>JamSlade</author><pubDate>Tue, 20 May 2025 09:02:19 +0800</pubDate><description><![CDATA[用于封装私有变量，模块化outer的inner函数引用了外部的counter，outer函数执行完毕，count仍然会被保存如果闭包中引用的大对象不再需要，需手动解除引用（如 null）（因为其有内存泄露风险。]]></description><category></category></item><item><title><![CDATA[React 个人笔记 Hooks编程]]></title><link>https://blog.youkuaiyun.com/JamSlade/article/details/148060913</link><guid>https://blog.youkuaiyun.com/JamSlade/article/details/148060913</guid><author>JamSlade</author><pubDate>Mon, 19 May 2025 13:33:33 +0800</pubDate><description><![CDATA[React Hooks 是函数式编程中的重要工具，用于在不使用类的情况下管理组件状态和副作用。常用的 Hooks 包括 useState、useContext、useReducer、useEffect、useMemo 和 useCallback。前三个 Hooks 用于声明和管理状态，后三个则用于处理依赖项变化时的逻辑。useState 适用于简单状态管理，useReducer 适合处理复杂状态逻辑，useContext 用于跨层级组件数据共享，避免“prop drilling”。useEffect 用于执]]></description><category></category></item><item><title><![CDATA[Hive 知识点八股文记录 ——（三）区别和原理]]></title><link>https://blog.youkuaiyun.com/JamSlade/article/details/134444107</link><guid>https://blog.youkuaiyun.com/JamSlade/article/details/134444107</guid><author>JamSlade</author><pubDate>Fri, 24 Jan 2025 16:27:41 +0800</pubDate><description><![CDATA[left semi join：仅展示A表与B表匹配的记录，并且只展示A表字段，因为left semi join只传递表的join key给Map阶段（，可以用DISTRIBUTE BY和SORT BY语句来实现分布式排序，将排序的负载分散到不同的节点上。partition by 只能和 order by 组合使用。distribute by 只能和 sort by 使用。left join：展示左表和右表的。group by 默认。可以执行mapjoin。的记录，右表的字段值。]]></description><category></category></item><item><title><![CDATA[Note of CLEAN CODE chapter 7 - Error Handling]]></title><link>https://blog.youkuaiyun.com/JamSlade/article/details/135916884</link><guid>https://blog.youkuaiyun.com/JamSlade/article/details/135916884</guid><author>JamSlade</author><pubDate>Mon, 29 Jan 2024 17:14:14 +0800</pubDate><description><![CDATA[【代码】Note of CLEAN CODE chapter 7 - Error Handling。]]></description><category></category></item><item><title><![CDATA[Note of CLEAN CODE chapter 6 -Object / Data Structure]]></title><link>https://blog.youkuaiyun.com/JamSlade/article/details/135874509</link><guid>https://blog.youkuaiyun.com/JamSlade/article/details/135874509</guid><author>JamSlade</author><pubDate>Fri, 26 Jan 2024 20:45:28 +0800</pubDate><description><![CDATA[int getX();int getY();int getR();]]></description><category></category></item><item><title><![CDATA[Note of CLEAN CODE chapter 5 - Formatting]]></title><link>https://blog.youkuaiyun.com/JamSlade/article/details/135847953</link><guid>https://blog.youkuaiyun.com/JamSlade/article/details/135847953</guid><author>JamSlade</author><pubDate>Thu, 25 Jan 2024 16:31:18 +0800</pubDate><description><![CDATA[【代码】Note of CLEAN CODE chapter 5 -Formatting。]]></description><category></category></item><item><title><![CDATA[Note of CLEAN CODE chapter 4 - Comment]]></title><link>https://blog.youkuaiyun.com/JamSlade/article/details/135789365</link><guid>https://blog.youkuaiyun.com/JamSlade/article/details/135789365</guid><author>JamSlade</author><pubDate>Tue, 23 Jan 2024 21:08:34 +0800</pubDate><description><![CDATA[【代码】Note of CLEAN CODE chapter 4 - Comment。]]></description><category></category></item><item><title><![CDATA[Note of CLEAN CODE chapter 3 - Function]]></title><link>https://blog.youkuaiyun.com/JamSlade/article/details/135726310</link><guid>https://blog.youkuaiyun.com/JamSlade/article/details/135726310</guid><author>JamSlade</author><pubDate>Sun, 21 Jan 2024 10:20:00 +0800</pubDate><description><![CDATA[Functions should be small. You can fit about 150 characters in a line and 100 lines in a screen, sofor example in Listing 3-3
block and indenting
As we can see in the exampleFunctions should be large enough to hold nested structures;Make sure your function]]></description><category></category></item><item><title><![CDATA[Note of CLEAN CODE chapter 2 - Meaningful Name]]></title><link>https://blog.youkuaiyun.com/JamSlade/article/details/135707242</link><guid>https://blog.youkuaiyun.com/JamSlade/article/details/135707242</guid><author>JamSlade</author><pubDate>Fri, 19 Jan 2024 21:21:08 +0800</pubDate><description><![CDATA[int[]Cell。]]></description><category></category></item><item><title><![CDATA[kafka个人笔记]]></title><link>https://blog.youkuaiyun.com/JamSlade/article/details/134315664</link><guid>https://blog.youkuaiyun.com/JamSlade/article/details/134315664</guid><author>JamSlade</author><pubDate>Thu, 16 Nov 2023 15:53:45 +0800</pubDate><description><![CDATA[大部分内容源于, 本人手敲一边加强印象方便复习。]]></description><category></category></item><item><title><![CDATA[Hive 知识点八股文记录 ——（二）优化]]></title><link>https://blog.youkuaiyun.com/JamSlade/article/details/134313296</link><guid>https://blog.youkuaiyun.com/JamSlade/article/details/134313296</guid><author>JamSlade</author><pubDate>Thu, 09 Nov 2023 19:16:00 +0800</pubDate><description><![CDATA[1.count distinct时，将值为空的情况单独处理，如果是计算count distinct，可以不用处理，直接过滤，在最后结果中加1。2.如果还有其他计算，需要进行group by，可以先将值为空的记录单独处理，再和其他计算结果进行union；where条件优化，join的过程中，对小表先进行where操作（where条件在map端执行），再与另一个表join，而非先join再where。情况，可以将小表存入内存再对达标进行map操作（小表存入内存是hive自己根据表大小确定的）]]></description><category></category></item><item><title><![CDATA[Hive 知识点八股文记录 ——（一）特性]]></title><link>https://blog.youkuaiyun.com/JamSlade/article/details/134311613</link><guid>https://blog.youkuaiyun.com/JamSlade/article/details/134311613</guid><author>JamSlade</author><pubDate>Thu, 09 Nov 2023 15:35:53 +0800</pubDate><description><![CDATA[CLI（command line interface）、JDBC/ODBC、Thrift Server、WEB GUI、metastore和Driver(Complier、Optimizer和Executor)默认创建内部表，创建外部表，需要加上external关键字修饰，还可通过location指定Hive仓库的路径。两者基本相同，但sql解析器不一样（spark做了较多优化）数据处理都用hql完成的话，选择内部表。]]></description><category></category></item><item><title><![CDATA[Java GC机制 —— 个人笔记]]></title><link>https://blog.youkuaiyun.com/JamSlade/article/details/134264698</link><guid>https://blog.youkuaiyun.com/JamSlade/article/details/134264698</guid><author>JamSlade</author><pubDate>Tue, 07 Nov 2023 20:17:33 +0800</pubDate><description><![CDATA[垃圾收集器每 100 秒收集一次，每次停顿 10 秒，和垃圾收集器每 50 秒收集一次，每次停顿时间 7 秒，虽然后者每次停顿时间变短了，但是总体吞吐量变低了，CPU 总体利用率变低了。当运行某个函数的时候，JVM就会为这个函数在栈区开辟内存，如果运行main函数，那么JVM为main函数的局部变量在栈区开辟内存。未引用对象并不会被立即回收，垃圾对象将一直累计到内存耗尽为止，当内存耗尽时，程序将会被挂起，垃圾回收开始执行。Survivor：就是减少被送到老年代的对象，进而减少Full GC的发生。]]></description><category></category></item><item><title><![CDATA[hadoop生态圈-- 个人笔记学习05 HDFS优化]]></title><link>https://blog.youkuaiyun.com/JamSlade/article/details/131549780</link><guid>https://blog.youkuaiyun.com/JamSlade/article/details/131549780</guid><author>JamSlade</author><pubDate>Wed, 05 Jul 2023 13:32:57 +0800</pubDate><description><![CDATA[DFSClient和DN在一个节点 —— local reads，远程阅读 Remote reads。处理方式是一样的。]]></description><category></category></item><item><title><![CDATA[hadoop生态圈-- 个人笔记学习04 数据迁移]]></title><link>https://blog.youkuaiyun.com/JamSlade/article/details/131548797</link><guid>https://blog.youkuaiyun.com/JamSlade/article/details/131548797</guid><author>JamSlade</author><pubDate>Wed, 05 Jul 2023 10:06:17 +0800</pubDate><description><![CDATA[数据迁移场景要素考量。]]></description><category></category></item></channel></rss>