- 博客(1056)
- 收藏
- 关注
原创 折半查找和分块查找
摘要: 折半查找和分块查找是两种常见的查找方法。折半查找要求数据有序,通过二分法实现O(logn)的高效查找,适合静态数据(如字典),但插入删除成本高。分块查找将数据分块,块间有序、块内无序,结合索引表和顺序查找实现灵活查找,适合动态数据(如日志文件)。折半查找效率更高,分块查找更适合频繁更新的数据集。选择时需考虑数据特性:有序静态选折半,动态或块有序选分块,小数据可直接顺序查找。典型应用包括词典查询(折半)和日期分块记录(分块)。
2025-11-12 23:21:11
331
原创 操作系统中的文件系统
本文系统介绍了操作系统文件系统的核心概念。主要内容包括:1)文件逻辑结构(流式与记录式文件);2)物理存储方式(连续、链接、索引分配);3)存储空间管理方法(空闲表、位示图、成组链接等);4)基本文件操作与共享机制(硬链接与软链接);5)文件保护策略(ACL、能力表等);6)文件系统层次结构与目录分类。文章全面阐述了文件系统的设计原理与实现技术,既包含基础概念,又涉及实际应用场景,为理解现代文件系统提供了系统性的知识框架。
2025-11-12 18:25:46
926
原创 I/O系统中的三种通道
I/O系统中的三种通道比较 I/O通道是连接CPU与设备的桥梁,主要分为三类:1)字节多路通道:采用分时共享机制,适合键盘等低速字符设备,以字节为单位轮询传输,设备利用率高但吞吐量低;2)数组选择通道:独占式服务高速块设备(如磁盘),支持大块数据传输,吞吐量高但并发性差;3)数组多路通道:结合前两者优点,动态分配时间片支持中高速块设备(如光盘)的并发传输。选择建议:低速设备用字节多路,高速独占用数组选择,中高速并发用数组多路。随着技术进步,传统通道模式正被智能I/O方案取代,但其设计思想仍具参考价值。
2025-11-12 15:25:51
1006
原创 存储器管理与虚拟存储器管理
本文系统梳理了存储器与虚拟存储管理的关键知识点。内容涵盖:1)编址方式(字节/字编址)及其计算;2)内存分配策略(连续/非连续)及碎片问题;3)分页管理的页表结构、TLB加速和多级页表设计;4)虚拟存储的核心原理与页面置换算法,重点分析FIFO的Belady异常现象;5)三种请求式存储管理方案的对比。特别强调易错点:地址转换中的编址方式影响、缺页次数统计规则,以及置换算法的特殊行为。通过典型计算示例(如4GB内存的地址线计算)和算法对比图表,直观呈现核心考点,为相关考试提供系统化复习指南。(149字)
2025-11-12 12:45:00
687
原创 指令流水线的三种问题及质量指标
摘要:指令流水线存在三类主要问题:结构冲突(硬件资源争用)、数据冲突(RAW/WAR/WAW依赖)和控制冲突(分支指令影响)。解决方案包括增加资源、数据转发和分支预测等。衡量流水线性能的核心指标为加速比、吞吐率和效率,设计目标是通过优化技术减少冲突,最大化吞吐率和硬件利用率。实际性能受限于冲突导致的停顿,需结合转发、预测等方法逼近理想值。
2025-11-10 15:36:45
298
原创 计组中的I/O系统
摘要: 计算机I/O系统负责管理CPU与外部设备的数据传输。按传输速率分为低速(键盘)、中速(扫描仪)和高速设备(磁盘);按信息交换单位分为字符设备(键盘)和块设备(硬盘);按共享属性分为独占(打印机)、共享(磁盘)和虚拟设备(SPOOLing打印队列)。I/O控制方式包括程序查询(CPU轮询)、中断驱动(设备主动通知)、DMA(硬件直接传输)和通道(专用处理器控制),逐步减少CPU干预。设备分配通过系统设备表(SDT)、设备控制表(DCT)等数据结构实现,策略分为静态和动态分配。
2025-11-07 16:53:32
763
原创 中断地址和中断向量地址的区别
中断地址和中断向量地址的区别主要体现在功能定位和数据类型上。中断地址是中断服务程序的入口地址,即CPU直接跳转执行的程序地址;而中断向量地址是中断向量表中存储该入口地址的内存位置。简言之,中断地址是程序入口(如函数指针),中断向量地址是存储该入口的物理地址或索引(如表项索引)。两者共同构成了中断处理机制的基础框架。
2025-11-07 15:54:48
445
原创 分页、分段、段页式和虚拟存储引入
本文对比分析了四种内存管理技术:分页将内存划分为固定大小的页,消除外部碎片但可能产生内部碎片;分段按逻辑划分可变大小的段,符合程序逻辑但易产生外部碎片;段页式结合两者优点,但地址转换复杂;虚拟存储将物理内存作为磁盘缓存,允许更大的地址空间。虚拟分页因高效和易管理成为主流方案,而分段仅在逻辑层面保留。虚拟段页式虽理论优势明显,但复杂度限制了其应用。整体上,分页机制在现代操作系统的内存管理中占据核心地位。
2025-11-06 23:33:20
768
原创 Cache和主存的关系
摘要:Cache与主存构成计算机存储层级体系,Cache(SRAM)作为CPU近端高速缓存(1-20ns),主存(DRAM)作为大容量后备存储(≈100ns)。核心协作基于局部性原理:CPU优先访问Cache,未命中时从主存加载数据块并缓存。95%+的命中率使平均访问时间显著降低(如从100ns优化至6.9ns),有效缓解CPU与主存间"内存墙"性能差距。二者形成速度(Cache)与容量(主存)互补的协作关系,共同提升系统效率。
2025-11-05 13:44:04
986
原创 流量控制、拥塞控制和三次握手
本文介绍了TCP协议中的三个关键机制:流量控制、拥塞控制和三次握手。流量控制通过滑动窗口机制动态调节发送速率,防止接收方缓存溢出;拥塞控制则通过慢启动、拥塞避免等算法避免网络过载;三次握手确保可靠连接建立并协商初始参数。三者协同工作:握手建立连接后,传输初期通过慢启动探索带宽,稳定阶段则根据接收方窗口和网络状况动态调整发送速率。文章还提供了Linux查看实时窗口值的命令,并解答了常见问题,如三次握手必要性及窗口大小决定因素,为网络优化和问题诊断提供参考。
2025-11-05 13:23:41
523
原创 WIFI/蓝牙/Zigbee/WLAN及802.11标准参数
本文对比分析了WIFI/蓝牙/Zigbee/WLAN等无线协议的参数特性,重点解读802.11标准的关键指标。文章详细说明WLAN的架构组成,包括AP、DS等核心组件及其功能,并解析BSS/ESS等基础概念。同时对比了WIFI与VLAN的本质差异和实际协作方式,如通过SSID映射VLAN实现企业网络分段。整体阐述了无线网络的协议特性、组网原理及与有线网络的协同应用,为无线通信技术提供了系统性参考。
2025-11-04 21:16:52
744
原创 公私钥加密、数字签名和主被动攻击
本文介绍了加密技术中的核心概念:1)公钥加密采用双密钥机制(公钥/私钥),实现加密和数字签名功能;2)私钥加密使用单一密钥进行加解密,效率高但需安全传输密钥;3)数字签名通过哈希和私钥加密确保身份认证、数据完整性和不可否认性。同时区分了被动攻击(监听窃取)和主动攻击(篡改破坏),并指出现代系统通常结合对称与非对称加密的优势。最后强调数字签名的五大核心性质是构建网络安全信任的基础。
2025-11-04 20:52:30
481
原创 Redis的hotkey如何处理和优化
Redis 热点 Key(Hot Key)是指在短时间内被高频访问的 Key,可能导致单节点负载过高、缓存击穿等问题。识别 Hot Key 可通过 Redis 命令(如 --hotkeys)、监控工具(Prometheus、ELK)或业务预判(秒杀商品)。优化方案包括:1)本地缓存(如 Caffeine)减少 Redis 访问;2)Key 分片分散压力;3)Redis 集群分片与负载均衡;4)缓存预热与过期时间优化;5)布隆过滤器+限流降级兜底。
2025-09-02 16:47:43
995
原创 压力测试与性能测试的区别
摘要: 压力测试通过超载系统(如模拟10万用户并发)探测崩溃阈值和极限性能,关注最大负载与恢复能力;性能测试则评估系统在正常负载下的响应速度、吞吐量等指标(如页面加载≤3秒)。核心差异在于:性能测试验证是否达标,压力测试探索崩溃边界。两者互补,前者保障日常体验,后者确保系统抗压能力。
2025-09-02 11:13:47
634
原创 为什么HashMap不是线程安全的
HashMap线程不安全主要体现在:1)并发修改时数据可能被覆盖;2)JDK7扩容时可能产生环形链表;3)数据不一致问题。其根本原因是缺乏同步机制,导致数组和链表节点可被多线程同时修改。解决方案推荐使用ConcurrentHashMap(采用分段锁/CAS)或Collections.synchronizedMap()包装,而性能较差的HashTable不建议使用。ConcurrentHashMap在多线程场景下性能更优。
2025-08-25 10:13:37
520
原创 在分布式系统中如何保证数据一致性
摘要:分布式系统数据一致性实现方案 分布式系统通过多种技术保证数据一致性,核心是CAP定理的权衡。强一致性采用Paxos/Raft等共识算法,而弱一致性适合最终一致性场景。工程实践中,通过数据分片+副本、优化读写策略(如QUORUM机制)来平衡性能与一致性。关键业务使用强一致,非关键业务可采用最终一致。方案选择需考虑业务需求和性能指标(延迟增加30-100ms),金融等场景需强一致,社交网络等可接受最终一致。
2025-08-18 23:20:23
434
原创 Redis在何处引入了多线程
摘要: Redis 核心命令处理保持单线程以保证原子性和性能,但在特定场景引入多线程优化: 网络 I/O(6.0+):多线程处理客户端连接读写,主线程仍负责命令解析与执行; 后台任务(4.0+):异步线程处理大键删除、持久化刷盘等阻塞操作; 模块系统(7.0+):支持自定义多线程任务。 建议:高并发场景可启用 I/O 多线程(2-4个),优先使用异步命令(如UNLINK)。Redis通过有限的多线程扩展,平衡了性能与单线程的设计优势。
2025-08-18 09:13:38
454
原创 为何单线程的Redis能实现高吞吐量
摘要: Redis单线程实现高吞吐的核心在于:1)纯内存操作避免磁盘I/O瓶颈;2)I/O多路复用技术(如epoll)实现单线程管理大量连接;3)单线程无锁设计减少竞争开销;4)高效数据结构与精简协议优化性能;5)Pipeline和异步处理机制提升效率。通过内存存储(10万~100万QPS)、事件驱动和避免多线程损耗,Redis在保证原子性的同时实现高并发低延迟,尤其适合缓存等高吞吐场景。其性能瓶颈通常在于内存或网络带宽,而非CPU计算能力。
2025-08-18 08:44:24
418
原创 保证Redis的SETNX和过期时间原子性操作
摘要: Redis分布式锁需确保SETNX和过期时间的原子性操作。Redis 2.6.12+版本提供扩展SET命令SET key value NX PX timeout实现原子性,避免传统分步操作的风险。旧版本可使用Lua脚本替代。关键点包括:使用唯一标识作为value、验证解锁、合理设置超时时间及锁续期机制。性能测试显示原子SET命令最优,生产环境推荐使用Redisson或RedLock多节点方案。该方案兼顾性能与数据一致性,有效解决分布式锁的原子性问题。
2025-08-17 21:09:12
565
原创 分布式锁实现方案与Redis选择考量
本文详细介绍了基于Redis的分布式锁实现方案。通过Redisson框架实现,核心机制包括SETNX命令加锁、Lua脚本解锁、锁续期和可重入等特性。Redis凭借高性能、原子操作和丰富特性成为首选,相比Zookeeper和数据库方案在吞吐量和实现复杂度上更具优势。文章还提供了防死锁、防误删、集群部署和降级处理等优化措施,并建议根据业务场景选择方案:Redis适合高频短时操作,而金融等强一致性场景可考虑Zookeeper。Redis分布式锁在性能与功能间取得了良好平衡,是大多数互联网应用的理想选择。
2025-08-17 20:37:10
1015
原创 数据库事务隔离级别与一致性保障
本文介绍了数据库事务隔离级别及其在交易系统中的应用方案。主要分析了四种隔离级别(读未提交、读已提交、可重复读和可序列化)的一致性表现,重点推荐了三种组合方案:基础推荐使用读已提交+锁机制,高一致性需求采用可重复读,金融等关键系统可考虑可序列化隔离级别。文章还提出了实际应用中的优化策略,包括读写分离、混合隔离级别使用等,并强调选择隔离级别时应综合考虑业务需求、性能要求和技术特性,建议大多数系统以读已提交为基础隔离级别配合锁机制使用。
2025-08-17 20:06:31
427
原创 避免交易竞争导致状态错误和重复支付的方案
本文提出了一套完整的支付系统防重方案,通过多层防护机制避免交易竞争导致的状态错误和重复支付问题。方案包括:1)数据库层面使用事务隔离、行锁和唯一约束;2)分布式锁实现(Redis/Redisson、ZooKeeper);3)支付流程设计中的状态机与幂等性处理;4)定时对账与补偿机制;5)前端防重措施(按钮禁用、Token机制)。强调关键操作加锁、状态严格管理、全链路幂等设计,并建议建立定期对账和完善监控体系。该方案从数据库到前端构建了完整的防护链条,能有效解决支付系统中的并发问题。
2025-08-17 19:39:07
349
原创 乐观锁的实现机制
乐观锁是一种无锁并发控制机制,通过版本号或时间戳实现数据一致性检查。核心原理是在更新时验证数据未被其他事务修改,若版本匹配则更新并递增版本号,否则拒绝操作。Java中可通过JPA的@Version注解或MyBatis的版本条件更新实现。其优势在于高并发性能和无死锁风险,特别适合读多写少场景;缺点是高冲突时需频繁重试,且不保证更新成功率。典型实现包括SQL语句中的版本条件检查和ORM框架的自动版本控制。
2025-08-17 00:14:08
529
原创 如何保证订单状态的一致性
订单状态一致性保障方案:通过幂等性设计(唯一ID、状态检查)防止重复操作;采用状态机模式明确定义合法状态转换路径;分布式事务处理(2PC/TCC/SAGA)协调多服务操作;运用乐观锁/悲观锁控制并发访问;基于消息队列实现异步最终一致性,配套重试和死信机制;建立补偿体系(自动回滚+人工干预)和对账系统兜底。多维度措施形成完整一致性保障闭环。
2025-08-16 23:53:07
337
原创 操作系统概念及其功能
操作系统是计算机硬件与软件之间的核心中介,主要功能包括:进程管理(分配CPU时间、解决资源冲突)、内存管理(分配空间、虚拟内存技术)、文件管理(分类存储、权限控制)、设备管理(驱动硬件、协调资源)以及用户接口(命令行、图形界面等)。其核心作用是高效管理资源,协调程序运行,为用户提供便捷安全的操作环境。操作系统通过系统调用等机制,确保计算机系统有序、高效地工作,扮演着计算机管家的关键角色。
2025-08-13 17:22:34
290
原创 函数(方法)调用具体过程
Java方法调用过程由JVM通过栈帧管理实现。每个方法调用对应一个栈帧,包含局部变量表、操作数栈等信息。调用时先确定方法版本(静态/动态绑定),创建栈帧并压入虚拟机栈,填充局部变量表(存储this指针和参数)。方法体通过操作数栈执行字节码指令,执行完毕后返回结果并恢复调用者栈帧。整个过程体现了JVM基于栈的执行机制和多态特性,开发者无需关注底层细节。示例展示了add方法调用时的栈帧变化过程,说明参数传递和返回值处理的机制。
2025-08-13 17:14:19
625
原创 共享内存的操作系统实现
摘要:共享内存是最高效的进程间通信方式,通过让多个进程的虚拟地址映射到同一块物理内存实现。Linux系统提供了shmget、shmat、shmdt和shmctl等系统调用来管理共享内存的生命周期,包括创建、映射、访问、解除映射和删除。内核使用shmid_ds结构体维护共享内存的元数据。由于共享内存本身不提供同步机制,实际使用时通常需要配合信号量等同步工具来防止数据竞争问题。这种直接内存访问的方式避免了内核数据中转,显著提升了通信效率。
2025-08-13 16:55:02
685
原创 进程调度与通信方式概述
本文概述了进程调度与通信的核心机制。进程调度分为长程、中程和短程三个层次,常见算法包括FCFS、SJF、RR、优先级调度及多级反馈队列。Linux采用的CFS调度器通过虚拟运行时间和红黑树实现公平调度,支持动态优先级调整并兼顾实时进程需求。进程通信则需通过操作系统提供的共享内存、消息队列等机制实现,确保独立地址空间的进程能安全交互。这些机制共同构成了现代操作系统高效运行的基础。
2025-08-13 16:25:35
614
原创 操作系统中的分页分段内存管理
摘要:分页与分段是操作系统中的两种核心内存管理技术。分页将内存划分为固定大小的页面,通过页表映射逻辑地址到物理地址,减少外部碎片但可能产生内部碎片。分段则按功能划分逻辑地址空间为可变大小的段,便于共享和保护,但易产生外部碎片。两者各有优劣:分页高效透明,分段符合程序逻辑。实际系统中常结合二者形成段页式管理,先分段再分页,兼顾效率与逻辑性。通过合理的内存管理策略,系统能有效提升内存利用率并支持多道程序设计。
2025-08-13 16:02:26
993
原创 Linux 视角下的线程与进程
Linux与Windows系统的核心差异在于线程实现:Linux没有独立线程概念,线程本质是轻量级进程(LWP)。关键区别在于资源共享程度,进程拥有独立资源,而线程共享地址空间等资源。Linux通过clone()系统调用统一创建进程和线程,创建线程时通过CLONE_VM等参数强制共享资源。线程的TID在内核中独立,但同进程线程共享进程组ID(PGID)。这种设计体现了Linux简洁高效的内核理念。
2025-08-13 10:18:27
269
原创 Linux底层锁机制
Linux系统提供了内核态和用户态多种锁机制,用于解决并发访问问题。内核态锁包括:自旋锁(适用于短临界区,忙等待)、互斥锁(长临界区,会睡眠)、读写锁(读多写少场景)和信号量(支持多线程并发)。用户态通过pthread库提供类似功能,如pthread_mutex_t(互斥锁)、pthread_spinlock_t(自旋锁)和pthread_rwlock_t(读写锁)。这些锁机制根据不同的应用场景和性能需求进行选择,确保临界区安全访问。
2025-08-13 10:08:27
465
原创 Kafka Partition 消息顺序性、可靠性及优势解析
本文深入解析Kafka Partition的核心特性与优势。首先阐述如何保证Partition内消息顺序性,包括单Partition有序性机制和可能影响顺序的场景。其次从生产者、Broker和消费者三方面详述消息可靠性保障措施,如ACK机制、副本策略和手动提交offset等。重点分析Partition的四大核心优势:水平扩展、并行消费、数据本地性和时间保留策略。通过对比其他消息队列,突出Kafka在吞吐量、消息堆积和生态整合方面的独特价值,同时也指出RabbitMQ在特定场景下的适用性。
2025-08-12 16:31:26
940
原创 Nginx正反向代理配置详解
Nginx正反向代理配置详解:Nginx作为高性能代理服务器,支持正向代理(代理客户端访问外部资源)和反向代理(代理服务端接收请求)。正向代理配置包括端口监听、域名解析、访问控制和缓存设置,支持HTTPS和认证功能;反向代理提供负载均衡、健康检查、缓存加速等功能,支持多种调度策略。实际应用中常组合使用两种代理模式,如企业网络架构中正向代理用于员工上网,反向代理对外提供服务。文章还提供了常见问题解决方案,如502错误处理、获取真实客户端IP和WebSocket代理配置等。
2025-08-12 13:58:41
1161
原创 HTTP请求头分类与应用场景
HTTP请求头在实际应用中的关键作用:基础请求头(Host/User-Agent)标识客户端信息,内容协商头(Accept-Language/Encoding)处理多语言和压缩,缓存指令优化性能,安全头(Authorization/Cookie)保障认证安全。跨域头(Origin)解决同源限制,自定义头(X-Request-ID)实现业务追踪,特殊头(Range/Upgrade)支持断点续传和WebSocket。这些请求头共同构建了完整的HTTP请求体系,满足不同场景下的网络通信需求。
2025-08-12 10:11:08
409
原创 预检请求详解
摘要 预检请求是浏览器为保障跨域安全自动发起的OPTIONS请求,用于确认服务器是否允许实际请求。触发条件包括非常用HTTP方法、自定义请求头或特殊Content-Type。流程分为:浏览器发送OPTIONS探路→服务器返回CORS许可头→浏览器校验后放行或拦截请求。优化建议包括使用简单请求、设置预检缓存和减少自定义头。该机制是CORS的核心安全措施,能有效防止恶意跨域访问。
2025-08-12 10:05:17
622
原创 加密算法概览与混合加密方案设计
本文系统介绍了加密算法分类与混合加密方案设计。首先将加密算法分为对称加密(AES、DES)、非对称加密(RSA、ECC)和哈希算法三类。重点阐述了混合加密方案的设计原理,即结合非对称加密的安全密钥交换与对称加密的高效数据加密,并以TLS协议为例详细说明了密钥交换、会话密钥生成等实现步骤。文章分析了混合加密的性能优化和前向安全性优势,并列举了其在HTTPS、PGP等场景的实际应用。该方案通过算法优势互补,在安全性和效率间取得了良好平衡。
2025-08-12 09:05:23
416
原创 Java中submit()和execute()方法的区别
Java中ExecutorService的submit()和execute()方法主要区别在于任务类型、异常处理和结果获取。execute()仅接受Runnable任务,无法获取结果且异常直接抛出;submit()支持Runnable和Callable,返回Future对象可获取结果、取消任务或捕获异常。通常推荐使用submit()以获得更灵活的控制,尤其在需要结果或异常处理时。execute()适用于简单无需返回值的场景。
2025-08-12 08:47:07
429
原创 Java常用线程安全容器
Java提供了多种线程安全容器,主要分为并发集合类、阻塞队列和其他线程安全容器。并发集合类包括CopyOnWriteArrayList(读多写少)、ConcurrentHashMap(高并发Map)等;阻塞队列如ArrayBlockingQueue、LinkedBlockingQueue适合生产者-消费者模式;还有非阻塞队列ConcurrentLinkedQueue。传统线程安全容器如Vector性能较差。
2025-08-11 10:48:08
656
原创 Java常用垃圾回收器及其切换原理
Java常用垃圾回收器包括Serial GC(单线程)、Parallel GC(吞吐量优先)、CMS GC(低延迟)、G1 GC(平衡型)、ZGC和Shenandoah(超低延迟)。JVM会根据硬件自动选择回收策略,也可通过参数手动切换。不同回收器采用分代或不分代设计,使用标记-清除、标记-整理等算法,并发性各有差异。JDK9+默认使用G1 GC,建议新应用优先考虑G1,特殊需求再选择其他回收器。选择时需权衡吞吐量、延迟和内存大小等因素。
2025-08-11 09:48:03
417
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅