时间空间复杂度入门
初学者只需掌握:用Big O表示时空复杂度,保留最高次项;时间复杂度看循环嵌套层数,空间复杂度看额外内存占用;通常分析最坏情况,越小越好。n指输入规模,如数组长度。
Thread.sleep(0) 到底有什么用(读完就懂)
Thread.Sleep(0)并非无意义,它会触发操作系统立即重新进行CPU竞争,让其他线程获得执行机会,避免界面假死。而Sleep(1000)也不保证精确唤醒时间,因线程需等待调度,并受优先级影响。理解其原理有助于优化多线程程序性能与响应性。
零拷贝
实现文件传输时,传统方式需频繁系统调用与内存拷贝,导致大量上下文切换和性能损耗。为提升效率,可采用零拷贝技术,如`sendfile`,在内核态直接将磁盘数据通过PageCache传至Socket,减少上下文切换与内存拷贝。对于大文件或高并发场景,结合异步IO与直接IO,绕过PageCache,避免缓存污染,进一步优化性能。
线程池
本文深入剖析Java线程池实现原理,涵盖ThreadPoolExecutor与ScheduledThreadPoolExecutor核心源码,解析线程复用、任务队列、拒绝策略及周期调度机制,并详解ThreadLocal与InheritableThreadLocal原理,助力掌握高效并发编程。
Java基础
本文简要介绍了常见数据结构,包括线性结构(如动态数组、链表、栈、队列)、非线性结构(如优先级队列、哈希表、红黑树、跳表、B+树),并列举了Java中的典型实现类,适用于集合类学习与面试参考。
查找对应的 SSTable 文件
通过分层结构与二分查找快速定位SSTable,结合BloomFilter过滤和索引区加速查询。利用table cache与block cache缓存机制,减少磁盘IO,提升检索效率。整个过程高效有序,适用于大规模数据检索场景。(238字)
6.3【追问】伊甸园、幸存区、老年代细节
对象诞生于伊甸园,经历多次年轻代回收后仍存活则晋升老年代。年轻代用标记-复制算法,老年代用标记-整理或清除算法。不同回收器晋升条件不同:Parallel默认15次回收后晋升,可调MaxTenuringThreshold;幸存区同龄对象超50%则提前晋升。大对象处理因回收器而异:Serial/CMS中超过PretenureSizeThreshold直接入老年代;G1中巨型对象存入巨型区,Region大小为堆/2048或由G1HeapRegionSize设定。注意《深入理解Java虚拟机》部分内容已过时,需批判性阅读。
数据组织
针对频繁变动的数据,有序数组效率低下。宜采用非连续结构并优化组织方式以支持二分查找。二叉检索树(如AVL树、红黑树)和跳表均可实现O(log n)检索。跳表通过随机层级设计,实现更简单且高效。理解其设计逻辑有助于提升算法思维与问题解决能力。(239字)
01 | 线性结构检索:从数组和链表的原理初窥检索本质
本文探讨数组与链表的检索原理及效率。数组支持随机访问,适合二分查找,检索效率为O(log n);链表需顺序遍历,效率为O(n),但插入删除更高效。通过合理组织数据结构,如结合数组与链表优点,可优化检索性能,核心在于快速缩小查询范围。