Mkdir700's Note

Mkdir700's Note

Tec

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

这篇文章深入探讨了SQLite数据库的锁机制,特别是关于读操作的锁获取策略。在不同上下文下,SQLite的读操作获取锁的策略有所变化,如事务外的读操作、显式事务内的读操作和不同隔离级别的影响。通过实验验证,发现事务A能执行UPDATE操作但在尝试COMMIT时失败(database is locked),数据库状态保持不变。文章总结指出SQLite的锁升级是延迟的,写操作的内存更改与实际写入分离,COMMIT阶段是锁竞争的关键点。这种设计既保证了数据一致性,又提供了较好的并发性能。
169
0
3
2024-12-26

使用 GoReleaser 发布 Rust 二进制文件

消费者获取二进制发布的方式包括操作系统原生包格式、语言原生包格式、curl shell 组合以及现代二进制打包工具。发布过程需要跨平台编译、打包、摘要验证、上传与设置分发工件。GoReleaser支持构建Go项目并拥有打包、生成校验和、上传等功能,但目前不支持构建Go以外的项目。通过破解方法和dummy.go文件,可以实现在GoReleaser中执行Rust构建。姊妹项目Godownloader可以生成curl-shell组合用于分发二进制文件。探索其他Rust发布工具如cargo-release、cargo-deliver和cargo-hublish,同时docker-rustup可用于在OSX上进行跨平台构建。
Tec
113
0
0
2024-10-10

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

在 Windows 上构建 Rust 项目时遇到 openssl-sys 错误,提示缺少 OpenSSL,需手动安装和设置环境变量。使用 choco 安装 OpenSSL,设置 OPENSSL_DIR 和 OPENSSL_LIB_DIR 环境变量,重新启动 VSCode 即可解决。详细步骤可参考提供的链接。
Tec
552
0
0
2024-09-16
解决 Rust 测试中的并行执行冲突:保护共享资源的策略

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

在 Rust 开发中,测试是确保代码质量的关键。然而,并行执行测试可能会导致共享资源冲突。解决方案包括使用 serial_test crate 进行串行执行测试,使用互斥锁控制资源访问,创建独立的测试环境隔离测试,使用测试模块和一次性初始化共享初始化逻辑,以及使用 #[ignore] 属性标记容易受影响的测试。在选择策略时需考虑实际需求和项目结构,对大多数情况来说,使用 serial_test 或创建独立的测试环境是最有效的方法。需要注意并行测试可能带来的潜在问题,确保测试的可靠性和一致性。
Tec
76
0
0
2024-09-13
Rust 中的跨平台开发:处理平台特定代码和未使用代码警告

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

在 Rust 中进行跨平台开发时,使用条件编译可以实现平台特定代码,保持接口一致性。然而,这可能导致静态分析工具错误标记代码为"未使用"。解决方法包括使用 `#[allow(dead_code)]` 属性、测试中使用平台特定代码、条件编译标记方法的可见性以及使用特性标志。其中,使用条件编译属性抑制特定平台的未使用代码警告是一种优雅解决方案,精确控制警告、保持跨平台一致性、保持代码清晰度和文档完整性,解决了静态分析工具的警告问题,保持了代码的兼容性和可读性。
Tec
82
0
0
2024-09-13
JS基础|let与var有什么区别?

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

JavaScript 中的变量声明关键词 var 和 let 在作用域和提升方面有重要区别。var 声明的变量是函数或全局作用域,而 let 是块作用域。在 hoisting 方面,var 变量会被提升但不会初始化,而 let 则会导致 ReferenceError。重复声明方面,var 允许,let 不允许。全局对象属性方面,var 声明的变量会成为全局对象属性,而 let 不会。因此,let 提供更严格的作用域控制和更安全的变量声明,更适合现代 JavaScript 开发。
Tec
99
0
0
2024-07-12
使用 http-server 调试油猴脚本

使用 http-server 调试油猴脚本

本文介绍了如何通过使用 HTTP 服务器高效地开发和调试油猴(Tampermonkey)脚本。通过安装并启动 `http-server`,避免了文件访问权限问题,并可在任何操作系统上进行开发。更新油猴脚本以使用 HTTP URL,以实现页面加载时重新加载 JS 脚本。最后,通过检查浏览器控制台,确保调试过程中没有错误信息。这一过程提升了对网页的定制化能力,提高了开发效率。
Tec
73
0
0
2024-07-12
Python 泛型 - 如何在实例方法中获取泛型参数T的类型?

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

本文介绍了如何在 Python 中处理泛型类型和类型参数。通过使用 typing 库中的 get_args 和 get_origin 函数,可以获取泛型类的参数和原始类。进一步讨论了在实例方法中获取泛型参数 T 的类型的方法,需要在方法内部调用 self.__orig_class__ 来获取原始类,而不是仅在 __init__ 方法内获取。对 Generic 类的源码进行了简要分析,说明了为什么必须在 __init__, __new__ 之后才能使用。同时解释了 _GenericAlias 和其实例化的过程,以及 how get orgs 函数的实现。
1115
0
1
2023-02-23
1143. 最长公共子序列
1508. 子数组和排序后的区间和