Hint

本文详细介绍了Sharding-JDBC的SQL Hint机制。SQL Hint是一种强制路由功能,允许开发者绕过既定的分片规则,直接指定SQL语句在特定的分库或分表上执行。 该机制主要通过`HintManager` API或SQL注释两种方式实现,适用于跨分片数据聚合、运维管理、复杂关联查询等特殊场景。使用时需注意,Hint的作用域仅限当前线程,且其优先级高于自动分片规则。虽然功能强大,但建议仅在必要时使用,避免在核心业务中滥用,以免影响分片设计的初衷和系统性能。 由米芾AI生成,内容仅供参考!


异地组网

本文聚焦于解决开发团队因客户缺乏VPN环境而导致异地协作效率低下的核心痛点。面对无法远程连接服务器、调试困难的困境,团队主导并实践了一套以easytier为主、wireguard为辅的混合异地组网方案。 方案核心采用easytier,其图形化界面和跨平台兼容性,让不同技术背景的成员都能快速上手,实现了对客户环境的安全、便捷访问,显著提升了日常开发与问题排查效率。同时,针对游戏等高性能场景,引入开源工具wireguard作为补充,凭借其低延迟和高可定制性,满足了特殊客户的严苛需求。该实践不仅是技术选型,更通过建立标准化流程与培训支持体系,成功将方案在团队内规模化落地,最终突破了地域限制,为团队高效协作奠定了坚实基础。 ——由米芾AI生成,内容仅供参考!


skip scan

本文介绍了MySQL 8.0.13引入的Skip Scan Range(松弛跳跃扫描)特性,旨在优化复合索引的查询性能。传统情况下,对于不使用索引前缀列的查询,MySQL往往会进行全表扫描,效率低下。Skip Scan Range通过多次范围扫描,有效利用复合索引中的前缀列,实现“跳跃式”扫描,从而避开全索引扫描,提高查询速度。文章以创建示例表和执行示意的查询为例,详述Skip Scan的工作原理、执行过程及其在实际中的应用条件。具体条件包括索引格式、查询谓词类型(主要是等值条件和范围条件)、以及查询结构的限制。优化器根据索引的统计信息,判断是否采用Skip Scan,对于符合条件的复杂场景,能带来显著性能提升。理解此特性有助于开发者在设计索引和书写查询时,充分发挥MySQL的性能优势,特别是在索引前缀列区分度低或查询多样化的情形下。——由米芾AI生成,内容仅供参考!


ScopedValue替代ThreadLocal

本文对比了Java中用于线程数据隔离的两种工具:ThreadLocal和ScopedValue。ThreadLocal为各线程提供独立变量副本,但存在内存泄漏风险,需手动调用remove()清理,且在虚拟线程场景下性能开销大。作为其现代替代方案,ScopedValue(专为虚拟线程设计)通过作用域限定和不可变性,从根本上解决了内存泄漏问题,并在代码块执行后自动清理。性能测试表明,在高并发虚拟线程场景下,ScopedValue在响应时间、内存占用和GC次数上均显著优于ThreadLocal,是更安全、高效的首选方案。 由米芾AI生成,内容仅供参考!


chrome访问http网站不强制走https

本文提供了一个解决Chrome浏览器中特定域名被强制跳转至HTTPS版本问题的方法。该问题通常由浏览器的HSTS(HTTP严格传输安全)缓存策略引起。 具体操作步骤为:在Chrome浏览器地址栏输入 `chrome://net-internals/#hsts` 并访问,然后在“Delete domain security policies”区域输入您想清除策略的域名,点击“Delete”按钮即可。完成此操作后,浏览器将不再强制该域名使用HTTPS进行访问。 由米芾AI生成,内容仅供参考!


频繁Yong GC

本文记录了频繁Young GC(YGC)导致系统卡顿的排查与优化全过程。首先通过 ‑XX:+PrintGCDetails 等参数开启详细GC日志,重点解读日志中的GC时间、频率、堆使用情况以及对象晋升分布。通过统计YGC间隔和real耗时,判断是否存在频繁且耗时过长的回收;进一步分析Eden 区填充速度、Survivor 区利用率和老年代增长趋势,识别对象提前晋升或大对象直接进入老年代等根本原因。针对发现的问题,提供了增大新生代 ‑Xmn、调整 SurvivorRatio、提升 MaxTenuringThreshold、设置 PretenureSizeThreshold 等JVM参数的调优方案,并强调代码层面减少临时对象创建的重要性。最后推荐 GCViewer、GCeasy 及 jstat、jcmd 等自动化分析工具,以提升诊断效率。整体思路是先定位日志关键指标,再逐步调整内存布局,确保GC停顿时间下降,系统响应恢复正常。——由米芾AI生成,内容仅供参考!


switch搭配yield使用

本文介绍了Java中的`yield`关键字,它主要用于增强`switch`表达式的返回值能力。对于简单的单行`case`分支,可以直接使用`->`返回结果。然而,当分支逻辑复杂,需要用`{}`代码块执行多条语句(如业务计算、条件判断)时,`yield`关键字就成为必需。它可以在代码块内部显式地指定该分支的返回值。这一特性使得Java的`switch`表达式在处理复杂场景时更加灵活和清晰,功能上类似于Kotlin中的`when`表达式,有效提升了代码的可读性。 由米芾AI生成,内容仅供参考!


mysql特殊查询

本文提供了一段高级MySQL脚本,用于在指定数据库中,批量搜索符合特定条件的表和数据。 该脚本的核心思路是动态构建一条完整的SQL查询语句。它首先通过查询`information_schema.columns`元数据表,筛选出表名符合特定模式(如包含'project')且包含文本类型字段(如VARCHAR, TEXT)的所有表。然后,它为每个符合条件的表生成一个独立的查询语句,该语句会检查表内所有文本字段是否包含目标搜索值。最后,利用`GROUP_CONCAT`函数将所有子查询用`UNION ALL`连接成一个庞大的、可直接执行的SQL语句,一次性返回所有匹配结果。 脚本还特别提示,为防止生成的查询语句过长超出系统限制,可能需要预先调高`group_concat_max_len`的会话变量值。 ——由米芾AI生成,内容仅供参考!


模板方法模式

本文主要介绍了基于模板方法设计模式的应用实践,特别强调抽象类在实现中的核心作用。第一个示例展示了钉钉事件监听器的设计,通过抽象类定义统一的事件处理框架,配合重写具体事件类型的方法,实现对多样事件的灵活应对。核心逻辑包括事件类型判断、同步锁管理和事件分发,体现了模板方法的结构清晰和扩展方便的特点。第二个示例是服务器信息采集系统,抽象类定义了硬件信息获取的基础接口(如获取IP、MAC、CPU序列号等),不同操作系统(Linux、Windows)通过继承实现具体实现,保证了代码的可维护性和平台扩展性。第三个例子是资产扫描器和支付服务的抽象设计,体现了通过模板方法实现操作流程的标准化,具体逻辑由子类实现,确保不同实现之间逻辑一致但又具备差异化能力。整体而言,这些案例充分显示了模板方法模式利用抽象类抽象公共流程、由子类扩展个性化逻辑的优越性,为复杂系统的结构设计提供了有效解决方案。——由米芾AI生成,内容仅供参考!


好用但不常用linux命令记录

这篇文章介绍了使用Screen工具来解决在处理大规模数据库导出和导入任务时遇到的困难。由于数据量庞大(超过200GB),导出过程耗时长且容易在后台中断,导致失败。作者通过搜索发现Screen功能强大,能够在后台挂起任务,避免中断问题。屏幕会话可以创建(使用命令“screen -S 窗口名”),查看活动会话(“screen -ls”),以及重新连接到会话(“screen -r 窗口名”)。如此一来,即使关闭SSH或终端,后台任务仍能持续运行,确保大文件的导出和导入更为高效和稳定。相比于使用nohup命令,Screen提供了更佳的控制和交互性,是处理大数据任务的理想工具。本文强调了Screen在大数据环境中如何保障任务不中断,为相关运维提供了实用方案和建议。——由米芾AI生成,内容仅供参考!