君子生非异也

导航

 

2021年5月11日

摘要:LRU是什么?按照英文的直接原义就是Least Recently Used,最近最久未使用法,它是按照一个非常著名的计算机操作系统基础理论得来的:最近使用的页面数据会在未来一段时期内仍然被使用,已经很久没有使用的页面很有可能在未来较长的一段时间内仍然不会被使用。基于这个思想,会存在一种缓存淘汰机制,每次从内存中找到最久未使用的数据然后置换出来,从而存入新的数据!它的主要衡量指标是使用的时间,附加指标是使用的次数。在计算机中大量使用了这个机制,它的合理性在于优先筛选热点数据,所谓热点数据,就是最近最多使用的数据!因为,利用LRU我们可以解决很多实际开发中的问题,并且很符合业务场景。 阅读全文
posted @ 2021-05-11 09:14 徐知语的笔记 阅读(16) 评论(0) 推荐(0) 编辑
 

2021年4月29日

摘要:SPI的全名为Service Provider Interface.大多数开发人员可能不熟悉,因为这个是针对厂商或者插件的。在java.util.ServiceLoader的文档里有比较详细的介绍。简单的总结下java spi机制的思想。我们系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块、jdbc模块的方案等。面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候能不在程序里动态指明,这就需要一种服务发现机制。 java spi就是提供这样的一个机制:为某个接口寻找服务实现的机制。有点类似IOC的思想,就是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要。 阅读全文
posted @ 2021-04-29 16:29 徐知语的笔记 阅读(26) 评论(0) 推荐(0) 编辑
 

2021年4月28日

摘要:比如说一个线程one从内存位置V中取出A,这时候另一个线程two也从内存中取出A,并且two进行了一些操作变成了B,然后two又将V位置的数据变成A,这时候线程one进行CAS操作发现内存中仍然是A,然后one操作成功。虽然程序正常执行了但是内存位置V中的A已经不是原来的那个A了。由于ABA问题带来的隐患,各种乐观锁的实现中通常都会用版本戳version来对记录或对象标记,避免并发操作带来的问题,在Java中,AtomicStampedReference 阅读全文
posted @ 2021-04-28 16:09 徐知语的笔记 阅读(31) 评论(0) 推荐(0) 编辑
 
摘要:中断通常被定义为一个事件,该事件能够改变处理器执行指令的顺序。这样的事件与 CPU 芯片内外部硬件电路产生的电信号相对应。有了中断,单片机不用频繁地去查询这些条件是否具备,从而专心地进行工作,但中断发生时,又可以随时作出响应。中断提高了CPU的利用率,也是现代操作系统实现并发执行的重要手段。例如现代操作系统对进程的调度,一般都是采用基于时间片的优先级调度算法,把CPU的时间划分为很细粒度的时间片,一个任务每次只能执行这么多的时间,时间片到了由定时器触发一个时钟中断,CPU收到中断信号后重新调度进程。 阅读全文
posted @ 2021-04-28 14:51 徐知语的笔记 阅读(33) 评论(0) 推荐(0) 编辑
 

2021年4月27日

摘要:写入时复制是计算机程序设计领域中的一种优化策略。其核心思想是,如果有多个调用者(Callers)同时要求相同的资源(如内存或者是磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者视图修改资源内容时,系统才会真正复制一份专用副本(private copy)给该调用者,而其他调用者所见到的最初的资源仍然保持不变。这过程对其他的调用者都是透明的(transparently)。此做法主要的优点是如果调用者没有修改资源,就不会有副本(private copy)被创建,因此多个调用者只是读取操作时可以共享同一份资源。 阅读全文
posted @ 2021-04-27 14:04 徐知语的笔记 阅读(23) 评论(0) 推荐(0) 编辑
 

2021年4月22日

摘要:根据局部性原理,所以通常,刚被访问的数据在短时间内再次被访问的概率很高,于是我们可以用 PageCache 来缓存最近被访问的数据,当空间不足时淘汰最久未被访问的缓存。所以,读磁盘数据的时候,优先在 PageCache 找,如果数据存在则可以直接返回;如果没有,则从磁盘中读取,然后缓存 PageCache 中。 阅读全文
posted @ 2021-04-22 16:25 徐知语的笔记 阅读(33) 评论(0) 推荐(0) 编辑
 
摘要:在分段的方法中,每次程序运行时总是把程序全部装入内存,而分页的方法则有所不同。分页的思想是程序运行时用到哪页就为哪页分配内存,没用到的页暂时保留在硬盘上。当用到这些页时再在物理地址空间中为这些页分配内存,然后建立虚拟地址空间中的页和刚分配的物理内存页间的映射。分页的实质就是操作系统向进程描述了一个完整的连续的虚拟地址空间供进程使用,但是在物理内存中进程数据的存储采用离散式存储(提高内存利用率),虚拟地址与物理内存地址的映射关系采用页表来维护。 阅读全文
posted @ 2021-04-22 10:39 徐知语的笔记 阅读(30) 评论(0) 推荐(0) 编辑
 

2021年4月20日

摘要:由此我们发现在RR级别中,通过MVCC机制,虽然让数据变得可重复读,并且避免的幻读,但我们读到的数据可能是历史数据,是不及时的数据,不是数据库当前的数据!这在一些对于数据的时效特别敏感的业务中,就很可能出问题。对于这种读取历史数据的方式,我们叫它快照读 (snapshot read),而读取数据库当前版本数据的方式,叫当前读 (current read)。很显然,在MVCC中是采取的快照读;如果要实现当前读就需要使用锁机制。 阅读全文
posted @ 2021-04-20 14:59 徐知语的笔记 阅读(52) 评论(0) 推荐(0) 编辑
 
摘要:数据量过大时,直接执行加索引操作就会锁表,过大的表可能会达到数小时甚至导致服务崩溃.显然直接ALER表是不可取的 阅读全文
posted @ 2021-04-20 09:38 徐知语的笔记 阅读(30) 评论(0) 推荐(0) 编辑
 

2021年4月19日

摘要:幂等这个词最初是用到数学,通俗的讲就是一个状态在一次变化和N次变化的结果是一样的,即无视次数,简单的说就是调用一次和调用N次的结果一定是一样的,这才叫幂等性。 阅读全文
posted @ 2021-04-19 22:17 徐知语的笔记 阅读(47) 评论(0) 推荐(0) 编辑