Mkdir700's Note

Mkdir700's Note

Tec

SQLite 锁机制:读锁策略与并发事务分析

本文深入探讨了 SQLite 数据库的锁机制,特别是关于读操作的锁获取策略。在不同上下文下,读操作会根据事务的类型而变化。通过一个实验验证了事务 A 能执行 UPDATE 操作但在 COMMIT 阶段失败(database is locked),最终数据库状态未发生变化。SQLite 的锁升级是延迟的,写操作的内存更改和实际文件写入是分离的,COMMIT 阶段是关键的锁竞争点,保证了数据一致性和良好的并发性能。
267
0
3
2024-12-26

使用 GoReleaser 发布 Rust 二进制文件

消费者获取二进制发布的方式包括操作系统原生包格式、语言原生包格式、使用curl shell组合和现代二进制打包工具。对于打包和发布,需要进行跨平台编译、打包、摘要验证、上传和生成分发工件。GoReleaser支持构建和分发Go项目,并提供了丰富的功能如生成校验和、上传至Github releases或Amazon S3。破解GoReleaser构建过程可以借助dummy.go文件满足GoReleaser并钩入Rust构建。还介绍了GoDownloader和其他一些Rust发布工具。需要跨平台构建Rust项目可以考虑使用docker-rustup。
Tec
178
0
0
2024-10-10

解决在 Windows 上 openssl-sys 构建失败的问题

在 Windows 平台构建 Rust 项目时,若遇到 openssl-sys 构建失败的问题,通常是因为缺少 OpenSSL。在 Linux 下可通过包管理工具解决,而在 Windows 下需要手动操作。解决方法是使用 choco 安装 OpenSSL,并设置环境变量 OPENSSL_DIR 和 OPENSSL_LIB_DIR,然后重启 VSCode 再进行构建。详细安装和设置步骤可参考相关文章链接。这些操作有助于解决编译过程中 OpenSSL 缺失导致的错误。
Tec
1018
0
0
2024-09-16
解决 Rust 测试中的并行执行冲突:保护共享资源的策略

解决 Rust 测试中的并行执行冲突:保护共享资源的策略

在 Rust 开发中,测试是确保代码质量的关键环节。然而,并行执行测试可能导致共享资源冲突。解决方案包括使用 serial_test crate 进行串行执行测试、使用互斥锁控制资源访问、为每个测试创建独立环境、使用测试模块和一次性初始化共享初始化逻辑、以及使用 #[ignore] 属性标记特别受并行执行影响的测试。选择合适的策略取决于具体需求,但无论如何,确保对并行测试的潜在问题有意识并采取措施来保障测试可靠性和一致性。
Tec
120
0
0
2024-09-13
Rust 中的跨平台开发:处理平台特定代码和未使用代码警告

Rust 中的跨平台开发:处理平台特定代码和未使用代码警告

在 Rust 中处理跨平台开发时,使用条件编译实现平台特定代码是常见的做法。然而,这可能导致静态分析工具错误标记平台特定代码为"未使用"。为解决这一问题,可采用几种策略:使用 `#[allow(dead_code)]` 属性忽略未使用代码警告,通过测试确保代码在非目标平台上得到使用,使用条件编译标记方法的可见性,并使用特性标志来激活特定代码。另一种方法是使用条件编译属性抑制特定平台的未使用代码警告,这种方法精确控制警告,保持跨平台兼容性和统一 API,同时提高代码清晰度和文档完整性。这些方法为处理平台特定代码和未使用代码警告提供了一种优雅解决方案。
Tec
134
0
0
2024-09-13
JS基础|let与var有什么区别?

JS基础|let与var有什么区别?

在JavaScript中,var和let用于声明变量,但它们的主要区别在于作用域和提升方面。 var声明的变量是函数或全局作用域,而let声明的变量是块级作用域。 在提升方面,var声明的变量会被提升但不会初始化,而let声明的变量在块作用域顶部提升但会导致ReferenceError。此外,var允许重复声明变量,而let不允许。在全局变量方面,var声明的全局变量会成为全局对象的属性,而let不会。总体而言,let提供了更严格的作用域控制和更安全的变量声明方式,更适合现代JavaScript开发。
Tec
141
0
0
2024-07-12
使用 http-server 调试油猴脚本

使用 http-server 调试油猴脚本

这篇文章介绍了如何通过使用 HTTP 服务器来高效地开发和调试油猴(Tampermonkey)脚本。作者在学习前端知识时遇到了这个需求,发现频繁复制粘贴代码到油猴插件编辑器效率低下。通过使用 Node.js 和 `http-server` 模块,可以避免文件权限问题,并在任何操作系统上进行开发,具体步骤包括安装、启动 HTTP 服务器以及更新油猴脚本以使用 HTTP URL。最后,作者建议检查浏览器控制台来查看是否存在任何错误信息。
Tec
147
0
0
2024-07-12
Python 泛型 - 如何在实例方法中获取泛型参数T的类型?

Python 泛型 - 如何在实例方法中获取泛型参数T的类型?

在Python中,泛型提供了灵活的类型注解方式,可以通过typing库的get_args和get_origin函数来获取类的泛型参数和原始类。通过示例代码演示了如何在实例内部获取泛型参数的类型,需要使用self.\_\_orig\_class\_\_属性。同时,对Generic类的源码进行了简要分析,说明了为何必须在\_\_init\_\_或\_\_new\_\_之后才能使用泛型参数。通过代码分析了Generic类中\_\_class_getitem\_\_方法的实现原理,以及_GenericAlias类的\_\_call\_\_方法是如何实现实例化过程的。文章还探讨了如何获取泛型参数T的类型,以及在实例方法中获取原始类及泛型参数数据类型的方法。
1230
0
1
2023-02-23
1143. 最长公共子序列
1508. 子数组和排序后的区间和