存储

首页 标签 存储
# 存储 #
关注
192956内容
服务发现:到底是要 CP 还是 AP?
本文探讨RPC框架中服务发现的CP与AP选择问题。在超大规模集群下,基于ZooKeeper的强一致(CP)方案因性能瓶颈易导致宕机,而最终一致(AP)方案通过消息总线实现数据同步,兼顾性能与稳定性,更适用于高可用、低延迟的服务发现场景。
RPC 实战:剖析 gRPC 源码,动手实现一个完整的 RPC
本讲通过剖析 gRPC 源码,深入讲解 RPC 框架的实现原理。从 Protocol Buffer 接口定义到 Stub 生成,结合 Netty 实现网络通信,解析请求的序列化、Frame 封装及 HTTP/2 多路复用机制,带你动手实现一个完整 RPC,掌握高性能框架设计核心。
时间空间复杂度入门
本文介绍时间与空间复杂度入门知识,使用Big O表示法(如O(1)、O(n)、O(n²)),强调估算而非精确计算,保留最高次项。时间复杂度常由循环嵌套层数决定,空间复杂度看额外内存占用。分析以最坏情况为主,越小越好。结合多个代码示例,帮助初学者理解复杂度分析的基本方法与常见误区。
线性结构检索:从数组和链表的原理初窥检索本质
本节深入解析数组与链表的存储特性及其对检索效率的影响。数组支持随机访问,适合二分查找,检索效率为O(log n);链表虽检索较慢,但插入删除高效,适用于频繁动态调整场景。通过改造链表结构,如结合数组提升检索性能,揭示了数据组织方式对检索的核心作用,帮助理解“快速缩小查询范围”这一检索本质。
03 | 哈希检索:如何根据用户 ID 快速查询用户信息?
本文介绍了哈希表的原理与实现。通过哈希函数将键转化为数组下标,利用数组随机访问特性实现O(1)查询。针对哈希冲突,讲解了开放寻址法(线性探查、二次探查、双散列)和链表法两种解决方案,并分析其优劣。最后指出哈希表的缺点:空间开销大、不支持有序操作。实际应用中常结合链表或红黑树优化性能。
时间空间复杂度入门
初学者只需掌握:用Big O表示时空复杂度,保留最高次项;时间复杂度看循环嵌套层数,空间复杂度看额外内存占用;通常分析最坏情况,越小越好。n指输入规模,如数组长度。
零拷贝
实现文件传输时,传统方式需频繁系统调用与内存拷贝,导致大量上下文切换和性能损耗。为提升效率,可采用零拷贝技术,如`sendfile`,在内核态直接将磁盘数据通过PageCache传至Socket,减少上下文切换与内存拷贝。对于大文件或高并发场景,结合异步IO与直接IO,绕过PageCache,避免缓存污染,进一步优化性能。
Java泛型类型擦除以及类型擦除带来的问题
Java泛型在编译时会进行类型擦除,所有泛型信息被移除,仅保留原始类型(如Object或限定类型)。例如,List<String>和List<Integer>在运行时均为List,导致无法通过instanceof判断泛型类型。类型检查在编译期完成,基于引用而非对象本身。擦除后的方法重写可能引发桥方法机制以解决多态冲突,且泛型不支持基本数据类型、静态成员不能使用类级泛型参数。反射可绕过泛型限制,自动类型转换由编译器插入强转实现。
HTTP协议中常见的状态码?
HTTP状态码分为1xx到5xx五类,常见如200(成功)、302(重定向)、401(未认证)、404(资源未找到)、500(服务器错误)等。转发是服务器内部跳转,客户端无感;重定向由浏览器发起新请求。Cookie通过Set-Cookie和Cookie头实现会话跟踪,但数据存于客户端,安全性较低。
02 | 非线性结构检索:数据频繁变化的情况下,如何高效检索?
本文通过文件查找引出树状结构的优势,探讨如何利用非线性结构提升数据检索效率。重点分析二叉检索树与跳表如何实现二分查找,解决链表无法随机访问的问题,并比较二者在平衡性、插入效率及实际应用中的优劣,揭示高效检索的核心原理。
免费试用