🌟 AI 相关
为什么你应该把 Google / StackOverflow / 文档搜索都扔掉,改用 devv.ai
⭐️ Golang 相关
1.5万字 + 25张图盘点RocketMQ 11种消息类型,你知道几种
使用 sync.Cond 来协调并发 goroutine 的访问共享资源
干掉复杂代码 — Spring Boot 与 CQRS 才是黄金组合!
结合图文一起搞懂MySQL事务、MVCC、ReadView!
Go语言中常见100问题-#91 Not understanding CPU caches
📒 前端相关
《Why Rust in Production》。 近年来,Rust 的热度已经飙升,微软、谷歌、亚马逊等科技巨头正积极把 Rust 的优势应用于关键系统。然而,关于 Rust 的讨论仍然大多来自那些没有在大规模生产中使用 Rust,或者仅在非关键系统中使用过 Rust 的人。这导致对 Rust 在生产环境中应用的理解存在偏差,尤其对于中小企业来说更是如此。作为 Rust 顾问,从我与众多大小公司接触中发现,公司更看重效率、稳定性和长期可维护性,而不只是性能。然而,Rust 也有其缺点,如尚处在成熟中的生态系统,硬寻找拥有专业 Rust 经验的开发人员,编译时间较长等。尽管如此,这些挑战并不是难以克服的,只是需要对 Rust 承诺,并愿意投资于培训和工具。考虑到 Rust 所能带来的长期成功,专门的指导和支持是至关重要的。
《Building a Web App in Rust》。 这篇文章分享了作者使用 Rust 编程语言构建网络应用程序 JustFax Online 的经验。作者热爱 Rust 的理由包括其低内存使用、出色的安全性、异步开发、真正的类型安全性等优点。然而,作者也谈到了 Rust 的一些困难之处,例如借用检查器的复杂性、对于初学者的启动难度、相对较长的编译时间以及与 NodeJS 或 Python 相比较小的生态系统。尽管如此,作者仍表示非常享受使用 Rust 构建项目,并认为他能有效运行许多项目而无需花费大量资金。
《Rust without crates.io》。 文章提到了程序员对 crated.io 让大家自由上传和下载代码的依赖,并指出了这种行为的潜在风险:包括单点故障、黑客攻击、国家安全等问题。作者认为,我们应该从开发速度的祭坛上退后一步,理想情况下需要有一个独立于作者进行策展的角色来审视依赖。然而在现实中,这种人力评审的路径很难实现。对此,Linux 发行版如 Debian 的解决方案是将大量库的完整 Rust 源码打包进 librust-cratename-dev,虽然没有进行审计,但已经是一个很大的改进。此外,作者也介绍了如何通过几个简单的命令来实现这一过程。这给予作者对 Rust 更大的信心,他原本担心由 crates.io 的自由选择依赖版本的方式,抵制任何旧方法的语言,例如 C++。幸运的是,Debian 证明了他是错误的。
《我如何将 Rust 的编译时间提高 75%》。 这篇博客主要关于如何改善 Rust 编译时间,通过使用不同的优化方法和替代的编译器链接器。作者测试了多种不同的方法,包括使用 Mold 链接器,Cranelift 编码器,和更高的优化等级,他发现使用 Mold 链接器和 Cranelift 代码生成器可以最大程度地提高编译速度,能使编译时间分别减少 75% 和 25%。此外,博主对 Rust 的热重载提出了替代方法,即 cargo-leptos 的 --hot-reload 标志,它可以在更改检测时通过 web socket 连接向浏览器发送 html 和 css 补丁,并在后台编译。
《我怎么知道自己做得对不对》。 作者分享了自我学习新技术时的验证假设与自我提升的有效方法。首先,查找可靠的文档和示例,如 MDN 和 web.dev,他们通常能以实际用例解释理论知识;其次,利用编程语言的 linter 插件指导编程,这有助于改进编码习惯;接着,使用诸如 Lighthouse 和 Accessibility Insights 等测量性能的工具以评估是否妥协了性能或可访问性;此外,利用 AI 工具如 Copilot 简化代码。但对于新手来说,要对 AI 生成的指导持怀疑态度;也可以通过向行业内人士询问学习新信息的方式,来学习。最后,查找有关主题的教程以对照使用情况。学到新知识后,应考虑写下来分享,提高自我理解和提高他人。
《React 18 中的并发性》。 React 18 新增的并发功能是一种执行模型,允许程序的不同部分无序执行而不影响最终结果。在浏览器中的 JavaScript 只能访问一个线程,因此采用了一种称为协作多任务处理的并发模型。React 18 分为紧急状态更新和转换状态更新两种更新类型。默认情况下,所有状态更新都是紧急的,不可中断的。如果希望进入并发渲染,需要使用 startTransition 或 useDeferredValue 将更新标记为低优先级。若在渲染低优先级更新时出现高优先级更新,React 会中断当前渲染并转向渲染高优先级更新。另一个重要更新是 Suspense 组件的行为,它在低优先级更新过程中的挂起行为稍有不同。还引入了新的钩子函数 useTransition 和 useDeferredValue,使用这些工具可以处理复杂的状态更新场景。
TypeScript 发布 5.3。 微软发布了 TypeScript 5.3 版本,主要引入了众多新特性,包括导入属性和稳定地支持在所有模块模式中使用 resolution-mode。此外,这个版本提供了针对布尔值的缩窄对比,以及通过 Symbol.hasInstance 进行 instanceof 缩窄。对于 “超级” 的属性访问,TypeScript 5.3 还进行了检查。此外,新版本中的其他改进包括跳过 JSDoc 解析以进行优化,比较非标准化交集以进行优化,以及在 tsserverlibrary.js 和 typescript.js 间进行整合。这个新版本还修复了一些断裂的变化,并进行了正确性改进。