Mkdir700's Note

Mkdir700's Note

Tec

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

在使用SQLite数据库时,经常会面临并发事务问题。本文通过实验深入探讨了SQLite的锁机制,重点是关于读操作的锁获取策略。SQLite中的读操作锁策略根据不同上下文变化:在事务外的读操作中,单条SELECT语句不会获取SHARED锁;在显式事务内的读操作中,读操作会持续获取SHARED锁直到事务结束,且多个事务可以同时持有SHARED锁。不同隔离级别也会影响读操作的锁获取行为。实验验证结果显示事务A能执行UPDATE操作但在尝试COMMIT时失败,最终数据库状态未改变。SQLite的锁升级是延迟的,写操作的内存更改和文件写入是分离的,事务的COMMIT阶段是关键锁竞争点,设计既保证了一致性又提高了并发性能。
262
0
3
2024-12-26

使用 GoReleaser 发布 Rust 二进制文件

消费者获取二进制发布的方式包括操作系统原生包格式、语言原生包格式、curl shell 组合和现代二进制打包工具。打包和发布的步骤包括跨平台编译、打包、摘要、上传和设置分发工件。GoReleaser支持Go项目打包和分发,但不支持构建Go以外的项目。通过在OSX主机上使用cross进行Rust跨平台编译,可以方便生成Linux和OSX构建。GoReleaser的破解方法可实现Rust构建,并通过dummy.go文件满足GoReleaser。另外提到的GoDownloader可以生成curl-shell组合并免费提供安装二进制文件的shell脚本。探索其他Rust发布工具如cargo-release、cargo-deliver和cargo-hublish。
Tec
173
0
0
2024-10-10

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

在 Windows 上构建 Rust 时遇到 openssl-sys 错误,缺少 OpenSSL。需手动操作,设置 OPENSSL_DIR 环境变量并安装 libssl-dev。解决方法为使用 choco 安装 OpenSSL,并设置 OPENSSL_DIR 和 OPENSSL_LIB_DIR 环境变量,重启 VSCode 即可。详细步骤可参考 https://juejin.cn/post/6994715287178182693。
Tec
999
0
0
2024-09-16
解决 Rust 测试中的并行执行冲突:保护共享资源的策略

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

在 Rust 开发中,测试是关键环节,但测试并行执行导致共享资源冲突是常见问题。解决方案包括使用 serial_test crate 串行执行测试、使用互斥锁确保资源独占、创建独立测试环境隔离测试、使用测试模块和一次性初始化共享初始化逻辑、使用 #[ignore] 属性标记容易受影响测试并单独运行。选择适合的策略取决于需求和项目结构,但要意识到并行测试可能带来潜在问题,采取措施确保测试可靠性和一致性。
Tec
119
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 则被提升到块顶部。重复声明上,var 允许,let 不允许。全局变量时,var 成为全局对象属性,let 不会。let 提供更严格的作用域控制和更安全的变量声明,更适合现代 JavaScript 开发。
Tec
140
0
0
2024-07-12
使用 http-server 调试油猴脚本

使用 http-server 调试油猴脚本

最近学习前端知识,需要用到油猴插件开发,但频繁复制粘贴代码效率低下。文章介绍了通过 HTTP 服务器高效开发和调试油猴脚本的步骤:安装 http-server,启动服务器,更新油猴脚本使用 HTTP URL。不适用 @require 标签是因为需要每次页面加载时重新加载 JS 脚本。通过浏览器控制台检查错误信息。
Tec
142
0
0
2024-07-12
Python 泛型 - 如何在实例方法中获取泛型参数T的类型?

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

本文介绍了如何在 Python 中使用泛型,并详细讲解了如何在实例方法中获取泛型参数 T 的类型。通过分析源码介绍了 typing 库中的 get_args 和 get_origin 函数的用法。文章重点讲解了在类内部如何获取原始类和泛型参数的数据类型,以及对 Generic 源码进行了简要分析。通过示例代码和详细解释,清晰地解释了在 Python 中处理泛型的技巧和原理。
1226
0
1
2023-02-23
1143. 最长公共子序列
1508. 子数组和排序后的区间和