Mkdir700's Note

Mkdir700's Note

Tec

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

本文深入探讨了SQLite数据库的锁机制,特别关注了读操作的锁获取策略。在SQLite中,不同上下文下的读操作锁获取策略有所变化,包括事务外的读操作、显式事务内的读操作以及不同隔离级别的影响。通过实验验证了事务A在执行UPDATE操作时不被阻塞,但在尝试COMMIT时失败,并指出了关键点:UPDATE操作在内存中记录更改,只有在COMMIT阶段才会尝试获取EXCLUSIVE锁,如果其他事务持有SHARED锁,COMMIT将被阻塞直到超时。总结了SQLite的锁升级是延迟的特点,写操作的内存更改和实际文件写入是分离的,事务的COMMIT阶段是最关键的锁竞争点,这种设计既保证了数据一致性,又提供了较好的并发性能。
258
0
3
2024-12-26

使用 GoReleaser 发布 Rust 二进制文件

文章总结如下:消费者获取二进制发布的方式包括操作系统原生包格式、语言原生包格式、curl shell 组合和现代二进制打包工具。打包和发布的步骤包括跨平台编译、打包、包摘要、上传和设置分发工件。GoReleaser能够优秀地构建和发布Go项目,支持生成sha 256校验和、上传到Github releases或Amazon S3,并生成变更日志和语义版本等。文章提到了GoReleaser对于Rust不受支持的问题,以及通过dummy.go文件和后阶段钩入来实现GoReleaser构建Rust二进制文件的方法。最后,介绍了Godownloader项目、探索其他Rust发布工具以及适合在OSX上进行Rust跨平台构建的docker-rustup。
Tec
172
0
0
2024-10-10

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

在 Windows 平台构建 Rust 项目时,缺少 OpenSSL 导致 openssl-sys 构建失败的问题。需要手动安装 OpenSSL,并设置环境变量OPENSSL_DIR和OPENSSL_LIB_DIR。通过使用choco工具安装OpenSSL,设置相应环境变量后,重新启动VSCode即可解决该问题。
Tec
987
0
0
2024-09-16
解决 Rust 测试中的并行执行冲突:保护共享资源的策略

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

在 Rust 开发中,测试是关键环节,但并行执行测试可能导致共享资源冲突。解决方案包括使用 serial_test crate 标记串行测试、使用互斥锁控制资源访问、为每个测试创建独立环境、组织测试模块并共享初始化逻辑,或使用 #[ignore] 标记需要单独运行的测试。选择策略取决于需求和项目结构,但重要的是意识到并行测试可能带来问题,并采取措施确保可靠性和一致性。
Tec
117
0
0
2024-09-13
Rust 中的跨平台开发:处理平台特定代码和未使用代码警告

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

在 Rust 中进行跨平台开发时,可以使用条件编译实现平台特定代码,如根据目标平台选择不同的实现。然而,这可能导致某些代码被错误标记为"未使用",可以采用使用`#[allow(dead_code)]`属性、在测试中使用平台特定代码、使用条件编译标记方法的可见性以及使用特性标志等策略来解决。其中,使用条件编译属性抑制特定平台的未使用代码警告是一种精确控制、保持一致性、保持代码清晰度和文档完整性的方法,解决了静态分析工具的警告问题,同时保持了代码的跨平台兼容性和可读性。这些方法构成了处理平台特定代码和未使用代码警告的优雅解决方案。
Tec
130
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
138
0
0
2024-07-12
使用 http-server 调试油猴脚本

使用 http-server 调试油猴脚本

本文介绍了如何高效地开发和调试油猴(Tampermonkey)脚本,通过使用 HTTP 服务器避免了文件访问权限问题,并提供了具体步骤:安装并启动 `http-server` 模块,更新油猴脚本以使用 HTTP URL。在调试过程中,可以在控制台检查是否有错误信息。这一方法提升了开发效率,特别适用于前端开发者的需求。
Tec
140
0
0
2024-07-12
Python 泛型 - 如何在实例方法中获取泛型参数T的类型?

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

本文介绍了在 Python 中如何获取泛型参数的类型。通过深入分析源码和使用方法,作者首先解释了如何使用 `typing` 库中的 `get_args` 和 `get_origin` 函数来获取类的泛型参数和原始类。接着,作者展示了在实例方法中如何获取泛型参数 `T` 所对应的真实类,以及必须在初始化完成后才能使用的原因。最后,文章简要分析了 `Generic` 类的源码,解释了为什么必须在 `__init__, __new__` 之后才能使用,并介绍了 `__class_getitem__` 和 `_GenericAlias` 的相关实现。文章讨论了 Python 泛型的精髓,有助于开发者更好地理解和使用泛型。
1224
0
1
2023-02-23
1143. 最长公共子序列
1508. 子数组和排序后的区间和