Mkdir700's Note
Mkdir700's Note
Slow is Smooth, Smooth is Fast.
首页
Tec
工具
归档
说说
友链
关于
最新文章
Tokio:应该使用哪种 mutex?
互斥锁是一种同步原语,用于保护共享数据。标准库互斥锁在.lock()时会阻塞整个线程,性能开销小,适合短时间持有;而异步互斥锁在.lock().await时会挂起当前任务,允许跨越.await点持有锁,适合需要执行异步操作的场景。何时使用哪种取决于锁持有时间、需要执行异步操作与性能要求。最佳实践是默认选择标准库互斥锁,特殊需求再考虑异步互斥锁,也可通过包装模式和专门管理任务提高代码结构。
Rust
89
0
1
2025-03-15
SOLID 原则详解
SOLID 原则是面向对象设计中的五个重要原则,包括单一职责原则(S),开闭原则(O),里氏替换原则(L),接口隔离原则(I),依赖倒置原则(D)。这些原则旨在提高软件设计的灵活性、可维护性和可扩展性。单一职责原则要求一个类只负责一项职责,避免多个职责耦合;开闭原则强调对扩展开放而对修改封闭,通过抽象和多态实现扩展;里氏替换原则指出子类可以替换基类且不影响程序正确性;接口隔离原则要求客户端不应依赖不需要的方法,应使用小而精的接口;依赖倒置原则指高层模块不应直接依赖低层模块,而是依赖抽象,通过依赖注入等方式实现抽象依赖。这些原则的遵循使代码更清晰、灵活,降低耦合度,提高可维护性和复用性。
架构设计
65
0
0
2025-03-14
常见设计模式 Python 实现
本文介绍了三种常见的设计模式的Python实现。首先讨论了单例模式,通过实现一个数据库连接池管理器来确保系统中只有一个连接池实例。其次介绍了工厂模式,设计了一个文件处理系统,支持多种数据格式解析,实现了抽象基类和工厂类。最后讨论了观察者模式,实现了股票市场监控系统,当股票价格变化时通知注册的观察者,包括邮件通知、短信通知和应用内通知。这些设计模式的Python实现为架构设计提供了有用的参考内容。
架构设计
35
0
0
2025-03-14
SQLite 锁机制:读锁策略与并发事务分析
本文深入探讨了SQLite数据库的锁机制,特别是关于读操作的锁获取策略。在不同上下文下,读操作会根据事务外、显式事务内和不同隔离级别的影响来获取SHARED锁。通过具体实验验证了对比事务A和事务B的并发操作,事务A在尝试更新并提交操作时被阻塞,最终数据库状态未发生改变,说明SQLite的锁升级是延迟的,写操作的内存更改与文件写入分离,COMMIT阶段是关键的锁竞争点。这种设计保证了数据一致性和提供了良好的并发性能。
Tec
数据库
SQLite
数据库锁
164
0
3
2024-12-26
使用 GoReleaser 发布 Rust 二进制文件
消费者获得二进制发布的方式包括操作系统原生包格式、语言原生包格式、使用curl shell组合和现代二进制打包工具。发布过程需要跨平台编译、打包、摘要和上传。GoReleaser支持Go项目的打包和分发,但不支持Go以外的构建。通过放置dummy.go文件并在构建后阶段钩入,可以实现GoReleaser支持Rust项目。GoDownloader是GoReleaser的姊妹项目,可生成curl-shell组合用于安装二进制文件。尽管有其他Rust发布工具如cargo-release、cargo-deliver和cargo-hublish,GoReleaser仍是一个出色的选择。
Tec
112
0
0
2024-10-10
解决在 Windows 上 openssl-sys 构建失败的问题
在 Windows 上构建 Rust 时,遇到 openssl-sys 缺失的问题,需要手动安装 OpenSSL。使用 choco 安装 OpenSSL,设置环境变量 OPENSSL_DIR 和 OPENSSL_LIB_DIR,然后重启 VSCode 即可解决。详细步骤可参考提供的文章链接。这样可以顺利解决在 Windows 平台上构建 Rust 时出现的 OpenSSL 缺失错误。
Tec
Rust
544
0
0
2024-09-16
解决 Rust 测试中的并行执行冲突:保护共享资源的策略
在Rust开发中,测试是保证代码质量的重要环节,但并行执行测试可能导致共享资源冲突。解决方案包括使用serial_test crate标记串行测试、使用互斥锁确保资源独占、创建独立测试环境隔离影响、使用测试模块和一次性初始化减少重复、以及使用#[ignore]属性标记易受影响测试。选择合适策略取决于具体需求,但重要的是意识到并行测试可能带来的问题并采取措施保证测试可靠性和一致性。
Tec
Rust
75
0
0
2024-09-13
Rust 中的跨平台开发:处理平台特定代码和未使用代码警告
在 Rust 中进行跨平台开发需要处理平台特定代码和未使用代码警告。使用条件编译实现平台特定代码,确定最优实现并维持接口一致性。但静态分析工具可能误判平台特定代码,可通过`#[allow(dead_code)]`属性、测试中使用代码、标记方法可见性以及特性标志来解决。另一方法是使用条件编译属性抑制特定平台的未使用代码警告,确保跨平台一致性、代码清晰并提高文档完整性。以上策略结合处理平台特定代码的挑战,保持代码规范和跨平台兼容性。
Tec
80
0
0
2024-09-13
Airpods 左右固件版本不一致
Airpod3 用户遇到右耳总是断开的问题。通过升级固件解决,需将耳机分别连接,并耐心等待固件自动升级。若固件仍未更新,可重新配对耳机。详细步骤包括忘记连接、按键设置等操作。最终,耳机固件版本应一致,问题得以解决。
未定义
数码
699
0
0
2024-07-18
在 MacOS 上获取应用的捆绑标识符(Bundle identifier)
在 MacOS 上,`osascript` 是用于执行 AppleScript 和其他 OSA(Open Scripting Architecture)语言脚本的命令行工具。使用 `-e` 选项可以在命令行中直接输入脚本代码,比如获取应用程序的 bundle identifier。Bundle identifier 是一个唯一标识一个应用程序的字符串,通常格式为类似反向域名的形式。通过该命令可以获取已安装并运行应用程序的 bundle identifier,如果未安装或运行则可能返回错误信息。
wiki
MacOS
Command
364
0
0
2024-07-17
上一页
下一页