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项目的打包和分发,但不支持Go以外的构建。通过一些破解方法,配合dummy.go文件和后阶段钩入实现Rust构建并覆盖Go工件。另外,Godownloader是GoReleaser的姊妹项目,可以生成curl-shell组合来安装二进制文件。探索其他类似于GoReleaser的Rust发布工具,如cargo-release、cargo-deliver和cargo-hublish。如果需要在OSX进行Rust跨平台构建,可以考虑使用docker-rustup。
Tec
171
0
0
2024-10-10

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

在 Windows 平台构建 Rust 项目时遇到 openssl-sys 构建失败问题,缺少 OpenSSL。解决方法是使用 choco 安装 OpenSSL,设置环境变量 OPENSSL_DIR 和 OPENSSL_LIB_DIR,然后重新构建项目即可解决该错误。详细步骤可参考相关链接。
Tec
984
0
0
2024-09-16
解决 Rust 测试中的并行执行冲突:保护共享资源的策略

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

在 Rust 开发中,测试是确保代码质量的关键环节。然而,并行执行测试可能导致共享资源冲突。解决方案包括使用 serial_test crate 进行串行测试、使用互斥锁确保资源访问、创建独立测试环境避免相互干扰、将相关测试组织到模块中并使用 Once 进行一次性初始化、以及使用 #[ignore] 属性标记特别容易受到影响的测试。选择合适策略取决于具体需求和项目结构,但重要的是意识到并行测试可能带来的问题,并采取措施确保测试可靠性。
Tec
115
0
0
2024-09-13
Rust 中的跨平台开发:处理平台特定代码和未使用代码警告

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

在 Rust 中进行跨平台开发时,使用条件编译可实现平台特定代码,保持接口一致性。然而,静态分析工具可能误标记代码为"未使用"。解决方法包括使用 #[allow(dead_code)] 属性、在测试中使用平台特定代码、条件编译标记方法的可见性、使用特性标志以及使用条件编译属性抑制特定平台的未使用代码警告。这些方法精确控制警告、保持跨平台一致性、提高代码清晰度和文档完整性,是处理平台特定代码和未使用代码警告的优雅解决方案。
Tec
129
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 调试油猴脚本

本文介绍了如何通过使用 HTTP 服务器高效地开发和调试油猴(Tampermonkey)脚本,避免了频繁复制粘贴代码到油猴插件编辑器中的低效问题。通过安装 `http-server` 模块、启动 HTTP 服务器,并更新油猴脚本以使用 HTTP URL,实现了便捷的开发过程。同时,在文章中强调了检查浏览器控制台的重要性。这些方法帮助前端开发者更有效地进行油猴脚本的调试,提升了定制化能力和开发效率。
Tec
139
0
0
2024-07-12
Python 泛型 - 如何在实例方法中获取泛型参数T的类型?

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

本文讨论了在Python中如何通过get_args和get_origin函数来获取泛型参数的方法。对于内置类型,可以通过Dict[str, int]这样的方式具体标注字典内键值对的类型。文章还介绍了如何在实例方法中获取泛型参数T的类型,通过调用self.__orig_class__来获取原始类,解决了空内容打印的问题。最后,对Generic源码进行了简要分析,说明了为什么必须在__init__, __new__之后才能使用泛型参数的类型。文章关键词包括Python泛型和Python技巧。
1223
0
1
2023-02-23
1143. 最长公共子序列
1508. 子数组和排序后的区间和