- 博客(15)
- 资源 (9)
- 收藏
- 关注
原创 数据库事务的四大特性&事务隔离级别介绍
事务概念:事务是指的满足ACID特性的一系列操作。四大特性(ACID)介绍如下:原子性(Atomicity): 事务被视为不可分割的最小单元,要么全部提交成功,要不都失败回滚到最初状态。一致性(Consistency):一般的一致性分为强一致性、弱一致性以及最终一致性,不同的一致性级别实现起来的难度不一样,最好的当然是强一致性。持久性(Durability):一旦事务提交,对事务所做过的...
2019-04-28 15:21:25 242
原创 Java四种线程池原理&应用分析
线程池种类线程池的实现分为四类:Executors.newCachedThreadPool()Executors.newFixedThreadPool(int size)Executors.newScheduledThreadPool(int size)Executors.newSingleThreadExecutor()ThreadPoolExecutor构造参数四个线程池类都是...
2019-04-24 23:34:19 282
原创 ZAB协议
为了保证写操作的一致性,zookeeper专门设计了原子广播协议(zab,zookeeper atomic broadcast),通过这种协议以及zookeeper的主从架构模式,来保证集群中各个副本之间的数据一致性。1. zab协议理论先来介绍一下单纯zab协议的理论,首先是zab协议中会给各个服务器定义不同的状态,分别为:Looking:表示当前集群没有Leader节点,进入领导选举过...
2019-04-19 15:49:40 407
原创 zookeeper基本概念
1. 什么是ZooKeeperZooKeeper是一种高可用的一致性协调框架,可以理解为一个轻量级的分布式内存文件系统,它内部使用ZAB协议作为一致性算法。它的内部提供了多层级的节点名空间(称为znode),客户端可以对znode进行监听,常见的应用场景主要为:分布式协调、分布式锁、元数据/配置信息管理、HA高可用等。2. 文件系统的四种znode在第一节中已经介绍ZooKeeper内部文件...
2019-04-19 15:39:28 234
原创 Spark Streaming window函数源码解析
概述 首先,对于window函数的作用可以参考官网介绍,不过官网只是对使用进行了简单的介绍,而对于内部如何实现我们今天想来进行一探究竟!因为只是个人也只是简单的用过,但是依据之前看Spark Streaming实现相关的源码,个人在看源码之前会思考其中应该会怎么实现,window函数的作用就是(窗口范围:windowDuration,滑动频率:slideDuration)每隔slideDura...
2019-04-12 17:04:30 896
原创 Redis内存优化の内存淘汰策略
公司服务由于实时计算跨度过大,前文说过需要用redis来进行状态管理,暂未发现一种数据修改但是不改变expire时间的做法,所以记录的数据全部未设置过期时间,计划通过脚本和一个大key来每天凌晨对redis前一天的状态数据进行清理,但是在24小时运行过程中,可能会出现数据量过大,导致内存消耗过大的问题,考虑到业务只需要记录top 100的记录,可以理解为top 100就是所谓的热点数据,而对于...
2019-04-09 12:42:12 2389
原创 ArrayList源码分析
本系列的所有源码主要是针对JDK 1.8的版本来探讨,部分容器源码在1.7和1.8又较大变动(例如HashMap)才会进行对比。 首先我们来看一下ArrayList的类图结构: 其中Cloneable、Serializable、RandomAccess分别是属于给该类添加某个属性的接口,而核心内容应该是List和AbstractList的类继承和接口实现。 接下来我们主要来围绕关...
2019-04-09 12:39:18 166
原创 ThreadLocal原理
参考:https://juejin.im/post/5a5efb1b518825732b19dca4 ThreadLocal用于提供线程级的全局变量,所谓线程级的全局变量意思就是这个变量只在当前线程内部是任意位置都可以获取到的,所以有部分同学就会用它来进行一些线程内的传参。 实际对于ThreadLocal而言,它的实现原理较为简单,就是每个线程在new Thread()创建的时候,内部都会...
2019-04-09 12:24:37 162
原创 Java内存模型和物理架构详解
1. 概述 我们常说的Java虚拟机具有很好的跨平台性,之所以强调所谓的跨平台性是因为不同的系统底层架构是会有区别的,而Java虚拟机的跨平台性就是它帮助我们把不同系统的底层区别给KO掉了,使得我们通过Java虚拟机编写的代码可以忽略不同平台底层的区别。而这其中关键的一点就是Java虚拟机的Java内存模型,内存模型其实就是JVM内部自己设计了一套规则,这套规则会规定不同线程之间信息同步的规则...
2019-04-09 12:23:09 589
原创 CountDownLatch和join的区别
蚂蚁一面被问到这个问题,当时实在是想不到两者在实现相同功能时的区别,回来百度了一下,发现其实还是蛮简单的问题哈。 首先,两者都能够实现阻塞线程等待完成后,再继续进行后续逻辑,对于两者相同的功能这里不再赘述,我们直接说说它们之间的区别,考虑一个场景,我们的主线程阻塞到某处,等待其它线程完成某些操作之后再继续后续操作,具体就是主线程M,等待子线程T1和T2完成某项操作,但是子线程T1和T2中的...
2019-04-09 12:21:11 748
原创 聊一聊Spark资源动态分配
1. 提出问题 相信很多面试也会问道类似的问题,那么这篇文章就是要围绕这个问题来进行展开进行分析Spark的资源动态分配。 通常我们在通过spark-submit提交Spark应用到yarn集群的时候,都会配置num-executors来指定分配多少个Executor,但是对于经验不足的新手而言,经常会不知道如何分配合适的资源数,所以经常会选择尽量多分配资源,认为资源分配的越多任务运行的就...
2019-04-08 11:12:54 1569 1
原创 Spark yarn-client和yarn-cluster的区别
之前面试遇到过一次这个问题,回答的很不好,这次专门记录下来,进行深入的解析两者区别。 首先,最简单也十分浅显的一种说法是:yarn-cluster是用于生产环境,这种模式下客户端client在提交了任务以后,任务就托管给yarn了,这个时候client就可以断开连接不需要再管后续事情了,这种情况下无法直接查看到application运行的日志,查看日志较为麻烦;而yarn-clien...
2019-04-08 11:09:16 2391 1
原创 Spark Core DAG生成源码分析
前提回顾 之前分析了Spark Streaming关于DAG的生成,对于Spark Streaming而言,先是通过自己代码中的各种transform方法来构造各个DStream之间的关联关系,然后再通过最后调用action操作的算子处进行回溯,action算子操作的DStream作为outputStream存储到DStreamGraph中的数组中,回溯过程中会找到数据来源处的DStream,...
2019-04-08 11:06:55 448
原创 SparkStreamingのCheckpoint源码分析
本文主要介绍SparkStreaming容错措施中的Checkpoint源码,为了保障应用的容错性,CheckPoint是十分重要的一环,本文来详细介绍SparkStreaming在进行CheckPoint的地方。 首先,我们从任务提交部分开始介绍,我们知道每个批次的任务是通过jobGenerator来生成的,我们围绕任务提交到结束的这个周期中来看哪些地方用到了CheckPoint,之前已...
2019-04-08 11:03:05 337
原创 Spark Streaming + Kafka + Redis状态管理 top100场景 Exactly Once
最近面试蚂蚁金服一面的时候,和面试官聊项目问题的时候,发现我这边业务实现的top100场景好像没有实现exactly once语义,我们项目的offset是存储在zk中,然后业务处理完毕后,最后再提交offset更新到zk,这种时候就会出现一个问题就是如果业务处理完毕,数据已经更新到redis中进行了累加,然后offset更新zk没成功宕机了,再次重启的时候就会读取老的offset导致数据重复...
2019-04-08 10:45:20 777
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人