Mkdir700's Note
Mkdir700's Note
Slow is Smooth, Smooth is Fast.
首页
Tec
工具
归档
说说
友链
关于
最新文章
什么是向量数据库
向量数据库是一种用于索引、存储和提供对结构化或非结构化数据及其向量嵌入访问的数据库。它允许在生产环境中快速查找和检索相似对象,有时也被称为向量搜索引擎。通过向量搜索和向量索引,数据库可以有效检索数据对象,支持多种数据类型的语义相似性捕捉。向量数据库区别于传统数据库的优势在于针对非结构化数据优化,通过向量化搜索实现更高效的语义搜索,不依赖于精确匹配。对于AI应用中的高效管理和相似性搜索至关重要,而向量数据库能够满足这一需求。
向量数据库
11
0
0
2025-03-19
React严格模式下事件监听器失效
在基于Tauri和React的UniClipboard应用中,遇到了监听器在设置后很快被取消的问题。经过问题分析发现,根源在于React的严格模式。在严格模式下,组件会经历双重挂载和卸载,影响副作用代码的执行。尝试使用useRef跟踪监听器状态失败后,采用全局监听器状态管理的解决方案。通过在外部变量中存储监听器状态并在组件卸载时不取消监听器,成功保持监听器持续活跃状态。解决过程中强调了理解React严格模式、状态管理的重要性,使用全局状态管理资源,以及避免在清理函数中关闭永久资源的重要性。最终效果是监听器成功保持活跃状态,解决了监听器被取消的问题。
React
7
0
0
2025-03-18
Rust 异步线程安全问题解析与修复
在 Rust 异步编程中,持有 Mutex 锁的情况下使用 .await,会导致编译错误,因为 MutexGuard 不是 Send 的,违反了线程安全规则。正确的修复方式是在 await 前释放锁,通过额外作用域控制 MutexGuard 的释放。其他解决方案包括使用专为异步设计的锁如 tokio::sync::Mutex,以及使用更细粒度的锁策略来减少锁的持有时间。在 Rust 异步编程中,需遵循释放锁后再使用await的原则,考虑使用异步友好的锁,并优先使用作用域块控制锁的生命周期。
Rust
15
0
0
2025-03-16
Tokio:为什么异步互斥锁比同步互斥锁更"昂贵"
异步互斥锁相较于同步互斥锁更"昂贵"的主要原因在于内部实现复杂,需要管理任务等待队列和唤醒机制,与异步运行时集成带来额外开销,常在内部仍使用同步互斥锁,产生额外间接性,需创建和管理Future对象。因此,在不需要跨越.await点持有锁的情况下,推荐使用标准同步互斥锁。只有在需要在持有锁的同时执行异步操作时,才值得使用异步互斥锁。
Rust
11
0
0
2025-03-15
Tokio:应该使用哪种 mutex?
互斥锁(Mutex)用于保护共享数据,确保只有一个线程访问。标准库互斥锁会阻塞线程,而异步互斥锁会挂起任务。标准库互斥锁适合短时间持有,而异步适合需要执行异步操作。在选择时,根据需求决定使用哪种互斥锁:标准库适用于内存数据保护且需要高性能,异步适用于需要同时执行异步操作且可能长时间持有锁。最佳实践是默认选择标准库互斥锁,针对IO资源考虑使用异步互斥锁。
Rust
15
0
0
2025-03-15
SOLID 原则详解
SOLID原则是面向对象设计中的五个重要原则,包括单一职责原则(S)、开闭原则(O)、里氏替换原则(L)、接口隔离原则(I)和依赖倒置原则(D)。这些原则旨在提高软件设计的灵活性、可维护性和可扩展性。单一职责原则要求一个类只负责一个职责,遵循可以使代码更清晰简洁、降低耦合度。开闭原则要求对扩展开放、对修改关闭,通过抽象和多态实现代码的可扩展性。里氏替换原则要求子类型能够替换其基类型,保持继承体系一致性。接口隔离原则规定接口应该小而精,避免强迫客户端实现不必要的方法。依赖倒置原则提倡高层模块不应直接依赖低层模块,应该通过抽象接口降低耦合度。遵循这些原则可以提高代码的灵活性、可维护性和可重用性。
架构设计
12
0
0
2025-03-14
常见设计模式 Python 实现
本文介绍了三种常见的设计模式在 Python 中的实现。首先是单例模式,通过实现一个数据库连接池管理器来确保系统中只有一个连接池实例,无论创建多少次都返回相同的实例。其次是工厂模式,设计一个支持多种数据格式解析的文件处理系统,实现抽象基类和具体解析器类,并通过工厂类创建对应的解析器。最后是观察者模式,实现一个股票市场监控系统,当股票价格变化时通知注册的观察者,包括邮件通知、短信通知和应用内通知三种观察者。每种模式都包含了相应的实现代码和测试函数。
架构设计
12
0
0
2025-03-14
SQLite 锁机制:读锁策略与并发事务分析
本文深入探讨了SQLite数据库的锁机制,重点讨论了读操作锁的策略,包括事务外的读操作和显式事务内的读操作。通过实验验证了并发事务的行为,展示了事务A的更新操作不会被阻塞,但在尝试提交时失败。最终数据库状态保持不变,验证了SQLite的锁升级是延迟的特点。文章总结了SQLite的写操作内存更改和实际文件写入分离的设计,以及事务提交阶段的关键性。这种设计既保证了数据一致性,又提供了良好的并发性能。
Tec
数据库
SQLite
数据库锁
109
0
3
2024-12-26
使用 GoReleaser 发布 Rust 二进制文件
作为消费者,获取二进制发布的方式包括操作系统原生包格式、语言原生包格式、curl shell 组合和现代二进制打包工具。打包和发布需要跨平台编译、打包、摘要验证、上传和设置分发工件。GoReleaser 提供了强大的打包和分发功能,但仅支持构建Go项目。解决Rust跨平台编译问题的方法包括使用cross进行编译或在OSX和Linux系统上操作。GoReleaser的构建过程可以通过放置dummy.go文件和后阶段钩入来破解,实现Rust构建。godownloader是GoReleaser的姊妹项目,可以生成curl-shell组合,简化二进制文件安装。探索其他类似GoReleaser的Rust发布工具包括cargo-release、cargo-deliver和cargo-hublish。至今尚无完整类似GoReleaser的Rust发布工具。
Tec
68
0
0
2024-10-10
解决在 Windows 上 openssl-sys 构建失败的问题
在构建 Rust 项目时,若在 Windows 上出现 openssl-sys 缺失错误,需手动操作安装 OpenSSL。通过使用包管理工具 choco 安装 OpenSSL,并设置相关环境变量,如 OPENSSL_DIR 和 OPENSSL_LIB_DIR。安装完成后在 VSCode 中进行重启并重新构建即可解决该问题。详细操作可参考提供的文章链接。这一解决方案适用于解决在 Windows 上 openssl-sys 构建失败的情况。
Tec
Rust
242
0
0
2024-09-16
阅读更多