自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 Linux内核进阶----整体框架及子系统概览

Linux变得如此成功与流行,其在设计选型上的取舍是至关重要的,概括来说包括如下重要方面:单块大内核+动态加载模块;进程/内核模式设定,以轻量级进程作为基本的执行上下文;侧重基于分页方式构建进程的虚拟地址空间;支持内核的可重入可抢占;在资源(尤其是内存)使用分配时放松管控,并在必要时努力回收;通过时钟的周期性中断为系统中的一切活动打拍子,由此提供了分时抢占式调度的基础;一切皆文件的理念,以及构建于该理念之上的对外围IO设备的支持。这些设计选型使得Linux的内核更加精简,更加快速和稳定,并易于扩展和维护。我

2023-06-16 14:56:42 2257

原创 SpringBoot工作机制概述

1 SpringBoot简介SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。SpringBoot并不是要成为Spring平台...

2018-01-03 10:03:48 26586 5

原创 SpringCache实现原理及核心业务逻辑(三)

SpringCache是SpringFramework3.1引入的新特性,提供了基于注解的缓存配置方法。它本质上不是一个具体的缓存实现方案(例如EHCache),而是一个对缓存使用的抽象,通过在已有代码中打上几个预定义的注释,就可以实现我们希望达到的缓存效果。SpringCache支持跟第三方缓存例如EHCache集成;另外也提供了开箱即用的默认实现,可以直接拿来使用。SpringCache支持使...

2017-12-08 02:05:05 8134

原创 SpringCache实现原理及核心业务逻辑(一)

springcache是springframework3.1引入的新特性,提供了基于注解的缓存配置方法。它本质上不是一个具体的缓存实现方案(例如EHCache),而是一个对缓存使用的抽象,通过在既有代码中添加少量它定义的各种annotation,即能够达到缓存方法的返回对象的效果。springcache支持和主流的专业缓存例如EHCache集成;另外也提供了开箱即用的默认实现,可以直接拿来使用。

2017-11-30 00:16:22 6377 1

原创 BeanPostProcessor加载次序及其对Bean造成的影响分析

前言BeanPostProcessor是一个工厂钩子,允许在新创建Bean实例时对其进行定制化修改。例如:检查其标注的接口或者使用代理对其进行包裹。应用上下文会从Bean定义中自动检测出BeanPostProcessor并将它们应用到随后创建的任何Bean上。普通Bean对象的工厂允许在程序中注册post-processors,应用到在本工厂中创建的所有Bean上。典型的,post-p

2017-11-22 16:57:30 38422 12

原创 使用ReferenceQueue实现对ClassLoader垃圾回收过程的观察、以及由此引发的ClassLoader内存泄露的场景及排查过程

本文首先通过Java Reference/ReferenceQueue来观察Class及ClassLoader的GC回收行为,然后介绍了Guava对于Reference/ReferenceQueue的封装并引出了一个关于classloader内存泄露的案例,旨在通过这样的一个案例来说明ClassLoader泄露的问题、如何观察ClassLoader是否被卸载、如何查找ClassLoader内存泄露的路径以及如何解决这一类问题

2017-10-19 02:15:50 2197 1

原创 BigTable:一个针对结构化数据的分布式存储系统----论文摘要

Bigtable是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的PB级的数据。Google的很多项目使用Bigtable存储数据,包括Web索引、Google Earth、Google Finance。这些应用对Bigtable提出的要求差异非常大,无论是在数据量上(从URL到网页到卫星图像)还是在响应速度上(从后端的批量处理到实时数据服务)。尽管应用需求差异很大,但是,针对Google的这些产品,Bigtable还是成功的提供了一个灵活的、高性能的解决方案。本论

2023-07-17 08:33:58 372

翻译 Dynamo:Amazon的高可用性键-值存储系统

本文介绍Dynamo的设计和实现,一个高度可用的key-value存储系统,一些Amazon的核心服务使用它用以提供一个“永远在线”的用户体验。为了达到这个级别的可用性,Dynamo在某些故障的场景中将牺牲一致性。它大量使用对象版本和应用程序协助的冲突协调方式以提供一个开发人员可以使用的新颖接口。(典型的NoSQL的KV系统的数据和事务的模型选型)

2023-07-08 14:43:06 368

原创 Spanner: Google的全球分布级数据库----论文摘要

Spanner中一个新奇的time api揭示了时钟的不确定性。该api及其实现对于支持外部一致性(外部观察一致性)以及一系列强力的特性至关重要,这些特性包括:对过去版本数据的无阻塞读(对于历史数据的读不加锁,且不会被其他事务阻塞)、无锁的只读事务(只读事务不加锁,但是有可能被其他事务阻塞)、以及在整个spanner集群中原子性的修改schema。

2023-07-08 12:43:08 658

翻译 Dremel:在网络规模数据集上的交互式分析

Dremel是一个在只读的嵌套数据上的可伸缩的、交互式的点对点的查询系统。通过结合多层执行树和列式数据布局,其有能力在数秒之内在万亿行的表上成功执行聚合查询。系统可以扩展到数千个CPU以及PB级的数据,且在Google有成千上万的用户。在本论文中,我们描述了Dremel的架构和实现,并解释它是如何补充基于MapReduce的计算的,我们展示了一个新颖的列式存储表达,其支持嵌套格式的记录,并讨论了在数千节点的系统上做的一些实验。

2023-07-08 09:27:15 268

翻译 paper翻译----Snowflake弹性数仓

在本论文中,我们描述了Snowflake的设计及其新颖的多集群(multi-cluster),数据共享(shared-data)架构。本论文强调了一些Snowflake的核心特性:极大的伸缩性和可用性,半结构化和无模式数据,时间游移(time travel),以及端到端的安全。论文最后总结了学习到的经验教训及对于正在进行工作的一个展望。

2023-07-06 00:58:09 245

翻译 Mesa: 跨区域复制的,近实时的,可扩展的数据仓库

Mesa是一个高度可扩展的数据仓库系统,其存储了与Google的网络广告相关的非常重要的度量数据。Mesa被设计来满足一系列复杂的且有挑战性的用户与系统的要求,包括近实时的数据集成和查询能力,以及高可用性,高可靠性,错误容忍性,并可以扩展到非常巨大的数据及查询体量上。特别地,Mesa持有数PB的数据,每秒处理数百万行的更新,并在每天服务数十亿的查询,这些查询会获取数万亿行的数据。Mesa可以跨多个数据中心复制数据,并提供低延迟的一致性和可重现的查询,即使在整个数据中心失效的情况下。本论文呈现了Mesa系统并

2023-06-30 01:34:38 260

原创 Kudu:在快速修改数据上的快速分析存储系统----论文摘要

从一个用户的角度看来,kudu是一个对结构化数据表的存储系统。一个kudu集群可以包含任意数量的表,每个表都有一个定义良好的有明确列数的schema。每一列都有名字、类型及可选的是否可为null值。一些固定顺序的列被指定为primary key。主键强制了一个唯一约束,并作为可高效更新或删除的主索引。该模型比较类似于关系型数据库,而与很多其他分布式数据存储如Cassandre, MongoDB, BigTable等不同(有明确的列定义这点),而spanner与metastore可认为是半结构化表。

2023-06-27 00:01:22 209

翻译 Paper翻译----GFS谷歌文件系统

我们设计并实现了Google文件系统(GFS)以满足Google数据处理需求的快速增长。GFS与先前的分布式文件系统有很多相同的目标,例如性能、扩展性、可靠性以及可用性。然而,其设计还是被我们自己应用中的工作负载和技术环境的一些核心观察所驱动,这些观察既包括当前的也包括对未来预期的,其反映出与早期文件系统的假设之间的一些标志性的背离。我们重新检视了一下传统的选择,并在设计空间上探索出了一些根本上的不同设计点。

2023-06-25 21:14:53 155

转载 Spanner的TrueTime与分布式事务

Spanner是谷歌的分布式数据库,发表于著名论文Spanner: Google’s Globally-Distributed Database,它创造性的采用了GPS + 原子钟的方式提供TrueTime API来解决时钟问题,去掉了中心化的授时中心。本文将尝试解释Spanner如何利用TrueTime API来解决分布式事务,并提供外部一致性。前置知识:理解linearizability的概念,可参考维基百科. 事务以及分布式事务2PC,可参考《数据库系统实现》或《数据库系统概念》相关章节.

2021-03-08 15:49:21 967

转载 Percolator:基于BigTable的分布式事务实现

Google为了解决网页索引的增量处理,以及维护数据表和索引表的一致性问题,基于BigTable实现了一个支持分布式事务的存储系统。这里重点讨论这个系统的分布式事务实现,不讨论percolator中为了支持增量计算而实现的Notifications机制。该系统基于BigTable,支持snapshot isolation隔离级别,这个隔离级别不在ANSI定义的隔离级别范围内。简单来说,就是一个事务看到的是一个stable的数据库的快照。快照隔离相对于可串行化隔离级别的优点是更高的读性能,不需要加锁,MV

2021-03-08 12:10:55 210

翻译 并发编程--多处理器架构硬件基础介绍(翻译)

最近重读《the art of multiprocessor programming》,从初读时的不知所云,到二读时的不以为然,再到再读时字字珠玑深以为然。由此深知遇到一本书,不是你看见它的时候,也不是你买了它的时候,甚至都不是你读过它的时候,而是你深刻的与它产生了共鸣的时候。于是决定有精力的话会将其逐篇的翻译出来,以供自己进一步的加深理解。另外,个人感觉英语作为一门层次化的结构立体性的语言,其突出重点,并随时可以自然的为其中的任何概念增加注释(从句)的特性使其更加适合技术性文章。这也是为什么很多时候看英文

2021-02-19 21:20:38 670

转载 缓存一致性协议(MESI)

在目前主流的计算机中,cpu执行计算的主要流程如图所示:数据加载的流程如下:将程序和数据从硬盘加载到内存中 将程序和数据从内存加载到缓存中(目前多三级缓存,数据加载顺序:L3->L2->L1) CPU将缓存中的数据加载到寄存器中,并进行运算 CPU会将数据刷新回缓存,并在一定的时间周期之后刷新回内存缓存一致性协议发展背景现在的CPU基本都是多核CPU,服务器更是提供了多CPU的支持,而每个核心也都有自己独立的缓存,当多个核心同时操作多个线程对同一个数据进行更新时,如果核心

2021-02-18 11:55:18 1380

转载 双调排序Bitonic Sort,适合并行计算的排序算法

双调排序是data-independent的排序, 即比较顺序与数据无关的排序方法, 特别适合做并行计算,例如用GPU、fpga来计算。1、双调序列在了解双调排序算法之前,我们先来看看什么是双调序列。 双调序列是一个先单调递增后单调递减(或者先单调递减后单调递增)的序列。2、Batcher定理将任意一个长为2n的双调序列A分为等长的两半X和Y,将X中的元素与Y中的元素一一按原序比较,即a[i]与a[i+n] (i < n)比较,将较大者放入MAX序列,较小者放入MIN序列。则得到的MA

2021-02-05 23:00:49 563

原创 Reference,ReferenceQueue及GC垃圾回收机制分析

前言java在最开始设计的时候一个对象只存在被引用和没有被引用两种状态,如此设计在概念上会比较清晰,且垃圾回收的判断与实现也会比较简单。但是随着应用场景的增加,实际上,我们更希望存在这样的一类对象:当有足够的内存时,这些对象能够继续存活;而当内存空间不足需要进行垃圾回收,或者在进行了垃圾回收之后空间还是非常紧张,则可以抛弃这些对象。这种特性,可以在很多场景下发挥作用,例如缓存功能、对象存活周期监控、堆外内存释放等等。在JDK1.2之后对引用的概念进行了扩充,将引用分为强引用(Strong Refer

2021-02-03 15:03:46 1416 1

转载 Netty-内存管理

通过NIO传输数据时需要一个内存地址,并且在数据传输过程中这个地址不可发生变化。但是,GC为了减少内存碎片会压缩内存,也就是说对象的实际内存地址会发生变化,所以Java就引入了不受GC控制的堆外内存来进行IO操作。那么数据传输就变成了这样但是内存拷贝对性能有可能影响比较大,所以Java中可以绕开堆内存直接操作堆外内存,问题是创建堆外内存的速度比堆内存慢了10到20倍,为了解决这个问题Netty就做了内存池。内存池是一套比较成熟的技术了,Netty的内存池方案借鉴了jemalloc。了解一下其背后

2021-01-15 12:02:25 230

转载 了解非阻塞算法的工作原理及其在 ConcurrentLinkedQueue 中的具体实现机制

简介非阻塞算法在更细粒度的层面协调争用,它比传统的锁有更高的并发性。随着非阻塞算法在 Java 中的应用越来越广泛,java.concurrent 包中用非阻塞算法实现的并发容器也越来越多,ConcurrentLinkedQueue 就是其中的一个重要成员。鉴于 ConcurrentLinkedQueue 的非阻塞算法实现在并发容器中具有代表性,本文将结合 JDK Update23 的源代码来分析它在当前的实现。由于非阻塞算法本身比较复杂,阅读本文的读者需要对 CAS 原子指令和非阻塞同步机制有所了解。

2021-01-05 18:28:59 226

原创 即时响应场景下java序列化框架的性能测试

简介序列化就是将对象转化为字节序列的过程,反序列化则是将字节序列转化为对象的过程。序列化框架广泛的应用在分布式系统通信、存储等相关场景中。例如在网络通信中,不同的计算机进行相互通信主要的方式就是将数据流从一台机器传输给另外一台计算机,当客户端将需要请求的数据封装好了之后就需要进行转换为二进制格式再转换为流进行传输,当服务端接收到流之后再将数据解析为二进制格式的内容,再按照约定好的协议进行处理解析。最常见的场景就是rpc远程调用的时候,对发送数据和接收数据时候的处理。常见的序列化和反序列化方式

2021-01-05 11:41:18 700 3

转载 虚拟内存与物理内存的联系与区别

操作系统有虚拟内存与物理内存的概念。在很久以前,还没有虚拟内存概念的时候,程序寻址用的都是物理地址。程序能寻址的范围是有限的,这取决于CPU的地址线条数。比如在32位平台下,寻址的范围是2^32也就是4G。并且这是固定的,如果没有虚拟内存,且每次开启一个进程都给4G的物理内存,就可能会出现很多问题:因为我的物理内存时有限的,当有多个进程要执行的时候,都要给4G内存,很显然你内存小一点,这很快就分...

2019-04-03 10:33:50 404

转载 PCB与进程分配资源

PCB(progress control block),进程控制块。这里先不讨论PCB是什么,其实进程这个概念本身就是一个很难理解的概念,当一个可执行程序被系统执行了以后,就变成了一个进程。那么这个进程中到底有什么东西呢,系统究竟给这个进程分配了哪些资源?另外,进程在内存中的存储是怎么样的?...

2019-04-03 10:29:44 665

转载 【Linux】Linux的内核空间(低端内存、高端内存)

内核也是程序,也应该具有自己的虚存空间,但是作为一种为用户程序服务的程序,内核空间有它自己的特点。 内核空间与用户空间的关系在一个32位系统中,一个程序的虚拟空间最大可以是4GB,那么最直接的做法就是,把内核也看作是一个程序,使它和其他程序一样也具有4GB空间。但是这种做法会使系统不断的切换用...

2019-04-03 10:06:41 598

原创 HyperSQL调研学习文档(二)

最近调研HyperSQL,把整理的资料记录一下,并分享给大家,由于时间略紧,内容肯定有遗漏和谬误的地方,欢迎大家指正。本人也会持续的修改更新。2. HyperSQL架构介绍2.1 通信层次架构2.1.1 socket层涉及到的类:ServerSocket, Socket, HttpURLConnection在非In-Processing模式下,HyperSQL服务端与客户端底层通过socket或h...

2018-02-08 10:50:18 1638

转载 深入分析Parquet列式存储格式

原文地址:http://www.infoq.com/cn/articles/in-depth-analysis-of-parquet-column-storage-format?utm_source=infoq&utm_campaign=user_page&utm_medium=link深入分析Parquet列式存储格式Parquet是面向分析型业务的列式存储格式,由Twitt

2018-02-05 11:13:30 532

转载 经典算法系列之(一) - BitMap

原文地址:https://www.jianshu.com/p/6082a2f7df8e一、问题引入 BitMap从字面的意思,很多人认为是位图,其实准确的来说,翻译成基于位的映射,怎么理解呢?举一个例子,有一个无序有界int数组{1,2,5,7},初步估计占用内存44=16字节,这倒是没什么奇怪的,但是假如有10亿个这样的数呢,10亿4/(1024*1024*1024)=3.72G左右。如...

2018-02-02 10:53:26 444

原创 HyperSQL调研学习文档(四)

最近调研HyperSQL,把整理的资料记录一下,并分享给大家,由于时间略紧,内容肯定有遗漏和谬误的地方,欢迎大家指正。本人也会持续的修改更新。5. 核心概念及数据结构5.1 database, catalog, schema与schema对象schema代表了一组schema对象及相应权限的概念,是在catalog之下又进行的一层逻辑划分。而schema对象,根据文档定义,是指用来包含数据或者管理...

2018-01-22 17:02:59 1285 1

原创 HyperSQL调研学习文档(三)

最近调研HyperSQL,把整理的资料记录一下,并分享给大家,由于时间略紧,内容肯定有遗漏和谬误的地方,欢迎大家指正。本人也会持续的修改更新。4. 数据库启动与建立连接流程4.1 Server启动流程当我们使用: Server server = new Server(); server.setPort(8743); server.setDatabaseName(0, "test"); ...

2018-01-22 13:36:16 1614

原创 HyperSQL调研学习文档(一)

最近调研HyperSQL,把整理的资料记录一下,并分享给大家,由于时间略紧,内容肯定有遗漏和谬误的地方,欢迎大家指正。本人也会持续的修改更新。1.HyperSQL使用简介1.1 HyperSQL数据库存储方式说明每一个HyperSQL的数据库被称为一个目录(catalog),根据数据库存储方式不同分为几种:• mem: 整个的保存在RAM内存中-在JVM进程的生命周期之外不做任何的持久化。mem:...

2018-01-22 11:19:50 1871

原创 SpringAOP基本概念及实现原理(三)

面向切面编程(AOP)是针对面向对象编程(OOP)的补充,可以非侵入式的为多个不具有继承关系的对象引入相同的公共行为例如日志、安全、事务、性能监控等等。SpringAOP允许将公共行为从业务逻辑中抽离出来,并将这些行为以一种非侵入的方式织入到所有需要的业务逻辑中,相较于OOP纵向模式的业务逻辑实现,其关注的方向是横向的切面。从Spring2.0开始,引入AspectJ注释来对POJO进行标注,支持...

2017-12-20 21:00:11 1227 1

原创 SpringAOP基本概念及实现原理(二)

面向切面编程(AOP)是针对面向对象编程(OOP)的补充,可以非侵入式的为多个不具有继承关系的对象引入相同的公共行为例如日志、安全、事务、性能监控等等。SpringAOP允许将公共行为从业务逻辑中抽离出来,并将这些行为以一种非侵入的方式织入到所有需要的业务逻辑中,相较于OOP纵向模式的业务逻辑实现,其关注的方向是横向的切面。从Spring2.0开始,引入AspectJ注释来对POJO进行标注,支持...

2017-12-17 16:54:32 875

原创 SpringAOP基本概念及实现原理(一)

面向切面编程(AOP)是针对面向对象编程(OOP)的补充,可以非侵入式的为多个不具有继承关系的对象引入相同的公共行为例如日志、安全、事务、性能监控等等。SpringAOP允许将公共行为从业务逻辑中抽离出来,并将这些行为以一种非侵入的方式织入到所有需要的业务逻辑中,相较于OOP纵向模式的业务逻辑实现,其关注的方向是横向的切面。从Spring2.0开始,引入AspectJ注释来对POJO进行标注,

2017-12-16 14:51:32 733

原创 SpringCache实现原理及核心业务逻辑(二)

SpringCache是SpringFramework3.1引入的新特性,提供了基于注解的缓存配置方法。它本质上不是一个具体的缓存实现方案(例如EHCache),而是一个对缓存使用的抽象,通过在已有代码中打上几个预定义的注释,就可以实现我们希望达到的缓存效果。SpringCache支持跟第三方缓存例如EHCache集成;另外也提供了开箱即用的默认实现,可以直接拿来使用。SpringCache支持使用SpEL(Spring Expression Language)来定义缓存的key和各种condition,

2017-12-01 23:52:20 4505

原创 Java Security Architecture--Java安全体系技术文档翻译目录贴

Java Security Architecture--Java安全体系技术文档翻译(一)一 介绍1.1 原始的沙盒模型1.2 沙盒模型的进化二 新保护机制 -- 基本概念概览Java Security Architecture--Java安全体系技术文档翻译(二)三 许可和安全规则3.1 Permission类Java Security Architecture-

2017-11-16 17:41:13 491

原创 Linux对磁盘的查看、分区、格式化、挂载及IO性能测试

linux磁盘分区分为“主分区”、“扩展分区”和“逻辑分区”三种类型,一个硬盘主分区至少有1个,最多4个,扩展分区可以没有,最多1个。且主分区+扩展分区总共不能超过4个。扩展分区是不能直接用的,他是以逻辑分区的方式来使用的,扩展分区可分成若干逻辑分区。他们的关系是包含的关系,所有的逻辑分区都是扩展分区的一部分。在linux中所有的分区(主分区和逻辑分区)都是挂载在某个路径下的,例如:/;

2017-11-14 13:20:06 6021

转载 Spring Cache抽象详解

原文地址:http://jinnianshilongnian.iteye.com/blog/2001040缓存简介缓存,我的理解是:让数据更接近于使用者;工作机制是:先从缓存中读取数据,如果没有再从慢速设备上读取实际数据(数据也会存入缓存);缓存什么:那些经常读取且不经常修改的数据/那些昂贵(CPU/IO)的且对于相同的请求有相同的计算结果的数据。如CPU--L1/L2--内存--磁盘就是一个典型...

2017-11-07 09:18:18 1093

原创 JavaSecurity和JAAS——Java标准安全体系概述(下)

java标准安全体系分为两大部分,一个是在JDK1.0引入并在JDK2进行了重构的代表着以代码为中心的授权体系。此体系下,关注的重点在于“这段代码能访问哪些系统资源”;另一个是在JDK1.3以扩展的形式引入,并在JDK1.4作为核心集成进来的以用户为中心的认证与授权体系JAAS。此时,关注的重点变成了“运行这段代码的用户的访问权限是什么”。其中JAAS是在java security基础上对组件进行...

2017-11-01 15:28:52 3363

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除