Mkdir700's Note

Mkdir700's Note

Tec

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

在 SQLite 数据库中,读操作的锁获取策略取决于不同的上下文:在事务外的读操作中,单条 SELECT 语句不会获取 SHARED 锁;而在显式事务内,读操作会获取 SHARED 锁并持续至事务结束。不同隔离级别会影响读操作的锁行为。通过一个实验验证了事务 A 的 UPDATE 操作不会被阻塞,但在 COMMIT 时失败(database is locked),最终数据库状态保持不变。SQLite 的锁升级是延迟的,写操作的内存更改和实际文件写入是分离的,事务的 COMMIT 阶段是关键的锁竞争点,这种设计平衡了一致性和性能。
271
0
3
2024-12-26

使用 GoReleaser 发布 Rust 二进制文件

消费者可以通过不同方式获取二进制发布,如操作系统原生包格式、语言原生包格式、使用 curl shell 组合等。打包和发布过程包括跨平台编译、打包、摘要验证、上传和设置分发工件等步骤。使用 GoReleaser 可以方便地打包、生成校验和、上传到 GitHub 或 Amazon S3,并生成变更日志等。对于 Rust 项目,尽管 GoReleaser 仅支持 Go 项目,现已有努力使其通用化,但目前仍缺乏对 Rust 的支持。通过破解方法,可以实现在 GoReleaser 中集成 Rust 构建过程。此外,存在另一个项目 Godownloader,可生成 curl-shell 组合用于安装二进制文件。探索其他 Rust 发布工具如 cargo-release、cargo-deliver 和 cargo-hublish,以及使用 docker-rustup 从 OSX 进行 Rust 跨平台构建。
Tec
180
0
0
2024-10-10

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

在 Windows 平台构建 Rust 项目时,遇到 OpenSSL 缺失导致报错的问题。解决方法是使用 choco 安装 OpenSSL,并设置相应的环境变量。安装完毕后,需配置 OPENSSL_DIR 和 OPENSSL_LIB_DIR 环境变量,并重启 VSCode。详细步骤可参考提供的链接。这样可以解决在 Windows 上 openssl-sys 构建失败的困扰。
Tec
1030
0
0
2024-09-16
解决 Rust 测试中的并行执行冲突:保护共享资源的策略

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

在 Rust 开发中,测试是确保代码质量的关键环节。然而,并行执行测试可能导致共享资源冲突。解决方案包括使用 serial_test crate 串行执行测试、使用互斥锁控制资源访问、创建独立测试环境隔离测试、使用测试模块和一次性初始化共享逻辑以及标记特殊测试为 ignored。选择适合的策略取决于具体需求和项目结构,但重要的是要意识到并行测试潜在问题,并采取措施确保测试的可靠性和一致性。
Tec
122
0
0
2024-09-13
Rust 中的跨平台开发:处理平台特定代码和未使用代码警告

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

在 Rust 中进行跨平台开发时,使用条件编译实现平台特定代码是一种有效策略。通过 `#[allow (dead_code)]` 属性可以忽略可能未被使用的函数警告,在测试中使用平台特定代码可以确保代码正确性。使用条件编译标记方法的可见性可以保持平台一致性,而使用特性标志则可以在不同平台上控制方法编译。最后,使用条件编译属性抑制特定平台的未使用代码警告,可以精确控制警告,保持跨平台一致性,提高代码清晰度和文档完整性。这些方法解决了处理平台特定代码和未使用代码警告的问题,同时保持了代码的跨平台兼容性和可读性。
Tec
138
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
143
0
0
2024-07-12
使用 http-server 调试油猴脚本

使用 http-server 调试油猴脚本

学习前端知识时需要使用油猴插件,但频繁复制粘贴代码效率低下。通过使用 HTTP 服务器和 `http-server` 模块可以高效开发和调试油猴脚本,避免文件权限问题,并可跨操作系统进行开发。调试时更新油猴脚本以使用 HTTP URL,不使用 `@require` 标签,以便每次页面加载都重新加载 JS 脚本。使用浏览器控制台检查错误信息。
Tec
148
0
0
2024-07-12
Python 泛型 - 如何在实例方法中获取泛型参数T的类型?

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

Python中使用泛型类型时,可以通过typing库中的get_args和get_origin函数获取泛型参数的类型。对于Dict[str, int]这样的泛型参数,可以通过get_args获取内部的泛型参数,通过get_origin获取原始类。在实例方法中获取原始类及泛型参数的数据类型可以使用self.__orig_class__属性。对于Generic类的源码分析,Generic类实际上是_GenericAlias的实例化,而使用()实例化对象实际上调用了_GenericAlias的__call__方法。通过分析源码可以理解为什么必须在__init__, __new__之后才能使用泛型参数的类型。
1237
0
1
2023-02-23
1143. 最长公共子序列
1508. 子数组和排序后的区间和