Mkdir700's Note

Mkdir700's Note

最新文章

SOLID 原则详解

SOLID principles, introduced by Robert C. Martin, aim to make software design more flexible, maintainable, and scalable. The principles include Single Responsibility (S), Open/Closed (O), Liskov Substitution (L), Interface Segregation (I), and Dependency Inversion (D). Each principle is detailed with core ideas, explanations, code examples, and benefits. Following these principles leads to clearer, more concise code that is easier to test, maintain, and reuse. The principles enhance extensibility, reduce risks of code modifications, maintain inheritance consistency, improve code reliability, increase system stability, ensure correct polymorphism implementation, enhance flexibility, and reduce system coupling.
53
0
0
2025-03-14

常见设计模式 Python 实现

本文介绍了三个常见的设计模式在Python中的应用。首先是**单例模式**,通过实现一个数据库连接池管理器来确保系统中只有一个连接池实例。其次是**工厂模式**,设计一个文件处理系统,支持多种数据格式的解析,并通过工厂类创建对应的解析器。最后是**观察者模式**,实现一个股票市场监控系统,当股票价格变化时通知注册的观察者,包括邮件通知、短信通知和应用内通知等。这些设计模式在实际开发中能够提高系统的灵活性和可维护性。
29
0
0
2025-03-14

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

本文深入探讨了 SQLite 数据库的锁机制,特别是关于读操作的获取策略。在事务外的读操作中,单条 SELECT 语句不获取 SHARED 锁。在显式事务内的读操作中,会获取 SHARED 锁并持续到事务结束。不同隔离级别对读操作的影响也有所不同。通过实验验证,展示了事务 A 在执行 UPDATE 操作时不被阻塞,但在 COMMIT 阶段因数据库锁被阻塞。最终数据库状态保持不变,验证了更新操作的锁升级延迟特性。SQLite 的锁升级是延迟的,写操作的内存更改和实际的文件写入是分离的,事务的 COMMIT 阶段是关键的锁竞争点。这种设计保证了数据一致性和并发性能。
143
0
3
2024-12-26

使用 GoReleaser 发布 Rust 二进制文件

消费者可以通过多种方式获取二进制发布,如操作系统原生包格式、语言原生包格式、使用curl shell组合或现代二进制打包工具。打包和发布需要跨平台编译、打包、摘要、路径格式化等步骤。GoReleaser能很好地支持Go项目的打包和分发。然而,GoReleaser目前只支持Go项目,不适用于构建Rust项目,但可以通过破解方法与Rust进行构建。另外,还有GoDownloader作为GoReleaser的姊妹项目可生成curl-shell组合。探索其他Rust发布工具也在进行,如cargo-release、cargo-deliver、cargo-hublish等。 若要在OSX进行Rust跨平台构建,可以使用docker-rustup。
Tec
99
0
0
2024-10-10

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

在 Windows 上构建 Rust 时,若出现 openssl-sys 错误需手动安装 OpenSSL。使用 choco 安装 OpenSSL,并设置环境变量 OPENSSL_DIR 和 OPENSSL_LIB_DIR。重启 VSCode 后即可成功构建。详细信息可参考给出的文章链接。
Tec
427
0
0
2024-09-16
解决 Rust 测试中的并行执行冲突:保护共享资源的策略

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

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

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

在 Rust 中进行跨平台开发时,使用条件编译可以为不同平台提供最优实现,同时保持接口一致。然而,可能会出现静态分析工具错误标记未使用代码的问题。解决方法包括使用 #[allow(dead_code)] 属性、在测试中使用平台特定代码、使用条件编译标记方法可见性以及使用特性标志。另一种方法是使用条件编译属性抑制特定平台的未使用代码警告,这样精确控制,保持跨平台一致性,保持代码清晰度,同时提高文档完整性。这些方法有效解决了静态分析工具的警告问题,同时保持了代码的跨平台兼容性和可读性,是处理平台特定代码的优雅解决方案。
Tec
71
0
0
2024-09-13
Airpods 左右固件版本不一致

Airpods 左右固件版本不一致

Airpods出现左右固件版本不一致的问题,导致只有一只耳机有声音,解决方法是分别配对左右耳机,等待升级固件。首先忘记连接并分别连接左右耳机,然后等待升级固件。升级时放入充电盒附近等待一晚,第二天重新配对。如果固件版本依然显示老版本,再次按步骤重新配对。通过这些操作可以解决Airpods固件不一致的问题。
612
0
0
2024-07-18
在 MacOS 上获取应用的捆绑标识符(Bundle identifier)

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

在 MacOS 上,通过使用 `osascript` 命令行工具的 `-e` 选项可以获得应用程序的 bundle identifier。这个唯一的字符串用于标识应用程序,通常以反向域名的格式命名。例如,通过命令 `osascript -e 'id of app "Obsidian"'` 可以获取名为 "Obsidian" 应用程序的 bundle identifier。如果应用程序已安装并运行,则会返回相应的标识符,否则可能会提示应用程序不存在的错误信息。
342
0
0
2024-07-17
JS基础|let与var有什么区别?

JS基础|let与var有什么区别?

在 JavaScript 中,var 和 let 用于声明变量,区别主要在作用域和提升方面。var 是函数作用域或全局作用域,let 是块作用域。var 的变量提升到顶部但不初始化,let 也提升但访问未初始化会报错。var 允许重复声明同一变量,let 不允许。var 的全局变量会成为全局对象属性,let 不会。let 提供更严格的作用域控制和更安全的变量声明,适合现代 JavaScript 开发。
Tec
93
0
0
2024-07-12