最近更新01
Spring Boot 增量发布:131 MB 的 JAR,实际只上传约 1 MB
一次真实发版中,131 MB 的聚合 JAR 只上传了约 1 MB 数据。本文拆解嵌套 JAR 的压缩字节复用、三层 SHA-256 校验和恢复代码,并说明可复现构建、暂存切换与发布验收的边界。
关于技术的认真思考,
也关于生活里的微小发现。
最近更新01
一次真实发版中,131 MB 的聚合 JAR 只上传了约 1 MB 数据。本文拆解嵌套 JAR 的压缩字节复用、三层 SHA-256 校验和恢复代码,并说明可复现构建、暂存切换与发布验收的边界。
随手记下02
get 等待超时、Future 进入取消状态和工作线程实际退出,是三件不同的事。用 Java 8 实测对比 CompletableFuture 与普通线程池 Future 的 cancel(true),再说明中断、总预算、底层 I/O 和并发名额该怎样衔接,避免接口已经返回、后台工作却持续积压。
随手记下03
df 显示磁盘占用很高,du 却找不到大文件,可能是进程仍持有已删除的文件。用一个实测的 8 MiB Linux 小实验说明名字、inode 和文件描述符的关系,再给出 lsof 与 /proc 的核对方法,以及日志重新打开、轮转和空间恢复的验证步骤。
随手记下04
换到流萤主题后,代码块里多出两种颜色:每行有字的地方垫着一块底色,折叠时底部渐隐和「展开全部」条偏蓝。原因都是组件底座写死了藏青色,而主题的代码底色换了。本文记录排查和修法:行内元素的背景为什么一行一画;想保留渐隐曲线只换颜色时用 color-mix,以及带 var() 的 color-mix 在旧浏览器里会整条失效、兜底必须写在后面的 @supports 里;用自写 PNG 解码逐像素比较,证明其它主题一个像素都没变;Playwright 定位器重新查询造成的假「点了没反应」;AI 助手黑夜里的同类问题。
随手记下05
本篇面试指南围绕系统设计与实现展开,涵盖项目亮点、零拷贝原理、五大IO模型及NIO与多路复用区别、Future阻塞获取结果机制、ReentrantLock 与 synchronized 的实现与差异、AQS、乐观/悲观锁、Paxos 协议、B+树特性、TCP 拥塞控制、JVM 实践、数据库分库分表及其缺点、分布式事务(TCC)方案、RocketMQ 消息可靠性保证,以及常见算法题。通过概念阐释与实现细节,帮助读者系统复习面试热点。
随手记下06
给博客搜索弹层加了热门标签和最近文章,电脑上排得整齐,手机上却被撑出了弹层。记录三个坑:网格 auto 列不会比不换行的内容窄、两行截断时内边距漏出第三行半截、固定弹层在小屏上底边出屏,以及之后在多个尺寸下量越界的办法。
随手记下07
博客文章页的分享海报重做了一遍:加上封面、分类、标签和头像,弹窗改成一屏放下。本文记录重做时量出来的几个问题:旧版逐字换行,全站 372 篇文章里有 288 篇的海报把英文单词拆开、把标点放在行首;canvas 画了跨域图片就会被污染、无法导出,七牛的图要服务器允许跨域、页面设置 crossOrigin 才能画,而 Chrome 还会为这类请求单独建连接;二维码先画成小图再放大,边缘有三成是灰色的过渡像素。以及对应的断行规则、图片加载策略和按屏幕尺寸计算海报大小的写法。
随手记下08
博客默认主题换成流萤后,用无头 Chrome 在手机尺寸下做冷加载实测:首页 1495 KB 里有 849 KB 是一个字体文件,页面上却没有一个字用它。本文记录这一轮排查:预加载让按需下载的字体变成必下,CSS 背景图当最大内容时浏览器发现得太晚,评论照片显示 220px 却下载 1080px,改 srcset 时撞上同一段 HTML 被规范化两遍,以及打字机副标题折行导致的首屏跳动。改完四个页面的冷加载流量减少 42% 到 68%。
随手记下09
给博客的手机菜单做右侧抽屉时,一个 position: fixed、top 和 bottom 都是 0 的抽屉,只要写在顶栏里面就只有 64px 高,顶栏向上收起时还会被一起带走——毛玻璃用的 backdrop-filter 让顶栏成了它的包含块。本文先说明 fixed 元素的包含块什么时候不再是视口,再用 Chrome 154 实测 20 种写法:transform、translate、filter、backdrop-filter、perspective、will-change: transform、contain、content-visibility 会“截胡”,opacity、isolation、mix-blend-mode、z-index、container-type 只建立层叠上下文、不会截胡;全站置灰的滤镜放在 html 上安全,放在 body 上会让所有 fixed 元素跟着页面滚走。最后给出用 offsetParent 一行找到“截胡者”的排查方法,以及挪出 DOM、把属性挪到伪元素上两种修法。