Mkdir700's Note

Mkdir700's Note

最新文章

Tokio:应该使用哪种 mutex?

互斥锁(Mutex)是用于保护共享数据的同步原语,在标准库和异步库中有不同之处。标准库的互斥锁在锁被占用时会阻塞整个线程,而异步互斥锁则会挂起当前任务。标准库互斥锁适合短时间持有的场景,而异步互斥锁适合需要在持有锁时执行异步操作的场景。在选择使用哪种互斥锁时,需要考虑锁持有时间、是否需要执行异步操作等因素。优先选择标准库互斥锁,对于 IO 资源可以考虑使用异步互斥锁。包装模式和专门管理任务是最佳实践建议。
111
0
1
2025-03-15

SOLID 原则详解

SOLID原则是面向对象设计中的重要原则,包括单一职责原则(S)、开闭原则(O)、里氏替换原则(L)、接口隔离原则(I)和依赖倒置原则(D)。单一职责原则要求一个类只负责一项职责,避免耦合和改变影响。开闭原则强调对扩展开放、对修改关闭的设计。里氏替换原则要求子类能替换基类而不影响程序正确性。接口隔离原则指避免强制实现不需要的接口,提高灵活性。依赖倒置原则通过抽象降低模块间耦合,实现高层模块不直接依赖于低层模块。这些原则有助于提高代码质量与可维护性。
73
0
0
2025-03-14

常见设计模式 Python 实现

文章介绍了常见的设计模式在Python中的实现,包括单例模式、工厂模式和观察者模式。在单例模式中,通过引入`DatabaseConnectionPool`类实现了一个数据库连接池管理器,确保系统中只有一个连接池实例。工厂模式则用于设计一个支持多种数据格式解析的文件处理系统,实现了`FileParser`抽象基类和相应的具体解析器类,同时使用`ParserFactory`工厂类根据文件扩展名创建对应的解析器。观察者模式则应用在股票市场监控系统中,实现了`Subject`和`Observer`接口以及不同类型的观察者类,如`EmailNotifier`、`SMSNotifier`和`AppNotifier`,通过`StockMarket`类管理股票价格变化并通知注册的观察者。
42
0
0
2025-03-14

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

本文深入探讨了SQLite数据库的锁机制,特别关注了读操作的锁获取策略。在不同上下文下,SQLite的读操作获取锁方式有所不同。通过一个具体实验验证了事务A在更新操作时没有被阻塞,但在尝试提交时失败,最终数据库保持不变。文章总结了SQLite的锁升级延迟性,写操作的内存更改与文件写入分离,以及事务提交阶段是关键的锁竞争点。这种设计旨在保障数据一致性并提供良好并发性能。
187
0
3
2024-12-26

使用 GoReleaser 发布 Rust 二进制文件

在软件发布过程中,获取二进制发布的方式包括使用操作系统原生包格式、语言原生包格式、curl shell 组合和现代二进制打包工具。打包和发布二进制文件需要跨平台编译、打包、摘要验证、上传到提供者、设置分发工件等步骤。GoReleaser 在构建和分发 Go 项目方面表现出色,但不支持 Go 以外的项目。通过在构建后阶段使用 dummy.go 文件和 Rust 构建来破解 GoReleaser 构建过程,可以实现对 Rust 项目的构建发布。另外,godownloader 是一个在发布过程中生成 curl-shell 组合的有用工具。尽管已经有类似GoReleaser的 Rust 发布工具存在,但仍有改进的空间,例如 cargo-release、cargo-deliver 和 cargo-hublish。如果在OSX上进行Rust跨平台构建,可以考虑使用docker-rustup。
Tec
127
0
0
2024-10-10

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

在 Windows 上构建 Rust 时遇到 OpenSSL 缺失错误,需手动安装 OpenSSL 和设置环境变量。使用 choco 安装 openssl,设置 OPENSSL_DIR 和 OPENSSL_LIB_DIR 环境变量,重启 VSCode。详细解决方法可参考指定链接。
Tec
654
0
0
2024-09-16
解决 Rust 测试中的并行执行冲突:保护共享资源的策略

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

在 Rust 开发中,测试是确保代码质量的关键环节。然而,并行执行测试可能导致共享资源冲突。解决方案包括使用 serial_test crate 进行串行测试、使用互斥锁控制资源访问、创建独立的测试环境、模块化测试和一次性初始化、以及使用 #[ignore] 属性标记受影响的测试并单独运行。选择合适的策略取决于项目需求,但要注意并行测试可能带来的问题,确保测试的可靠性与一致性。
Tec
84
0
0
2024-09-13
Rust 中的跨平台开发:处理平台特定代码和未使用代码警告

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

在 Rust 中进行跨平台开发时,使用条件编译实现平台特定代码是常见的做法。通过 #[allow(dead_code)] 属性、测试、条件编译标记方法可见性以及特性标志等策略可以有效解决由不同平台引起的未使用代码警告问题。这些方法精确控制特定平台上代码的警告情况,同时保持跨平台一致性、代码清晰度和文档完整性。利用这些方式处理平台特定代码问题,可使代码具有良好的可读性和可维护性,确保跨平台兼容性,提升开发效率。
Tec
87
0
0
2024-09-13
Airpods 左右固件版本不一致

Airpods 左右固件版本不一致

AirPods用户遇到左右固件版本不一致导致只有一边有声音的问题,可以通过让耳机升级到最新固件版本解决。若需要分别配对左右耳机,可尝试在iPhone上忘记连接并按指定步骤建立连接。由于固件升级被动触发,用户需在耳机附近放置iPhone等待固件升级完成后重新配对。重新配对时,需在充电盒内长按设置按钮完成连接。参考苹果官方指南及论坛讨论可帮助用户解决AirPods固件版本不一致的问题。
749
0
0
2024-07-18
在 MacOS 上获取应用的捆绑标识符(Bundle identifier)

在 MacOS 上获取应用的捆绑标识符(Bundle identifier)

在 MacOS 中,使用命令行工具 <code>osascript</code> 可以执行 AppleScript 和其他 OSA 语言脚本。通过 <code>-e</code> 选项,可以直接在命令行中输入脚本代码,例如获取应用程序的 bundle identifier。这个唯一的字符串用于标识应用程序,通常格式类似于反向域名。通过命令 <code>osascript -e 'id of app "Obsidian"',可以获取已安装并正在运行的应用程序如"Obsidian"的 bundle identifier,如果未安装或未运行则可能返回错误信息。
390
0
0
2024-07-17