1: eden、 servicorFrom 复制到 ServicorTo,年龄+1 2:清空 eden、 servicorFrom 3: ServicorTo 和 ServicorFrom 互换
等待阻塞( o.wait->等待对列): 同步阻塞(lock->锁池) 其他阻塞(sleep/join)
正常结束 异常结束 调用 stop
自旋锁的优缺点 自旋锁时间阈值( 1.6 引入了适应性自旋锁) 自旋锁的开启
Synchronized 作用范围 Synchronized 核心组件 Synchronized 实现
Lock 接口的主要方法 非公平锁 公平锁 ReentrantLock 与 synchronized ReentrantLock 实现 Condition 类和 Object 类锁方法区别区别 tryLock 和 lock 和 lockInterruptibly 的区别
实现互斥锁(计数器为 1) 代码实现 Semaphore 与 ReentrantLock
公平锁(Fair) 非公平锁(Nonfair)
读锁 写锁
独占锁 共享锁
锁升级
减少锁持有时间 减小锁粒度 锁分离 锁粗化 锁消除
插入操作: 获取数据操作:
变量可见性 禁止重排序 比 sychronized 更轻量级的同步锁 适用场景
将数据抽象成一个类,并将数据的操作作为这个类的方法 Runnable 对象作为一个类的内部类
ThreadLocalMap(线程的一个属性) 使用场景
ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成
Exclusive 独占资源-ReentrantLock Share 共享资源-Semaphore/CountDownLatch 同步器的实现是 ABS 核心(state 资源状态计数) ReentrantReadWriteLock 实现独占和共享两种方式
Error Exception(RuntimeException、 CheckedException)
遇到问题不进行具体处理,而是继续抛给调用者 (throw,throws) try catch 捕获异常针对性处理方式
位置不同 功能不同:
编译时类型和运行时类型 的编译时类型无法获取具体方法
反射 API 用来生成 JVM 中的类、接口或则对象的信息。
调用某个对象的 getClass()方法 调用某个类的 class 属性来获取该类对应的 Class 对象 使用 Class 类中的 forName()静态方法(最安全/性能最好)
Class 对象的 newInstance() 调用 Constructor 对象的 newInstance()
@Target 修饰的对象范围 @Retention 定义 被保留的时间长短 @Documented 描述-javadoc @Inherited 阐述了某个被标注的类型是被继承的
保存(持久化)对象及其状态到内存或者磁盘 序列化对象以字节数组保持-静态成员不保存 序列化用户远程对象传输 Serializable 实现序列化 ObjectOutputStream 和 ObjectInputStream 对对象进行序列化及反序列化 writeObject 和 readObject 自定义序列化策略 序列化 ID 序列化并不保存静态变量 序列化子父类说明 Transient 关键字阻止该变量被序列化到文件中
BeanFactory-框架基础设施
ApplicationContext 面向开发应用 WebApplication 体系架构
singleton:单例模式(多线程下不安全) prototype:原型模式每次使用时创建 Request:一次 request 一个实例 session global Session
实例化 IOC 依赖注入 setBeanName 实现 BeanFactoryAware 实现 ApplicationContextAware 实现 postProcessBeforeInitialization 接口实现-初始化预处理 init-method postProcessAfterInitialization Destroy 过期自动清理阶段 destroy-method 自配置清理
构造器注入 setter 方法注入 静态工厂注入 实例工厂
JDK 动态接口代理 CGLib 动态代理
Http 请求到 DispatcherServlet HandlerMapping 寻找处理器 调用处理器 Controller Controller 调用业务逻辑处理后,返回 ModelAndView DispatcherServlet 查询 ModelAndView ModelAndView 反馈浏览器 HTTP
- 创建独立的 Spring 应用程序
- 嵌入的 Tomcat,无需部署 WAR 文件
- 简化 Maven 配置
- 自动配置 Spring
- 提供生产就绪型功能,如指标,健康检查和外部配置
- 绝对没有代码生成和对 XML 没有要求配置 [1]
1 准备阶段 2 提交阶段:
具体使用需要配置:
Reactor 单线程模型 Reactor 多线程模型 主从 Reactor 多线程模型
小包封大包,防止网络阻塞 软中断 Hash 值和 CPU 绑定
息数据结构(接口名称+方法名+参数类型和参数值+超时时间+ requestID) 序列化
核心问题(线程暂停、消息乱序) 通讯流程 requestID 生成-AtomicLong 存放回调对象 callback 到全局 ConcurrentHashMap synchronized 获取回调对象 callback 的锁并自旋 wait 监听消息的线程收到消息,找到 callback 上的锁并唤醒
1:地址解析 2:封装 HTTP 请求数据包 3:封装成 TCP 包并建立连接 4:客户机发送请求命 5:服务器响应 6:服务器关闭 TCP 连接
建立连接获取证书 证书验证 数据加密和传输
事务编号 Zxid(事务请求计数器+ epoch) epoch Zab 协议有两种模式-恢复模式(选主)、广播模式(同步) ZAB 协议 4 阶段 Leader election(选举阶段-选出准 Leader) Discovery(发现阶段-接受提议、生成 epoch、接受 epoch) Synchronization(同步阶段-同步 follower 副本) Broadcast(广播阶段-leader 消息广播) ZAB 协议 JAVA 实现(FLE-发现阶段和同步合并为 Recovery Phase(恢复阶段) )
获取 RegionServer 请求写 Hlog 请求写 MemStore
全局内存控制 MemStore 达到上限 RegionServer 的 Hlog 数量达到上限 手工触发 关闭 RegionServer 触发 Region 使用 HLOG 恢复完数据后触发
Key Space(对应 SQL 数据库中的 database) Key(对应 SQL 数据库中的主键) column(对应 SQL 数据库中的列) super column(SQL 数据库不支持) Standard Column Family(相对应 SQL 数据库中的 table) Super Column Family(SQL 数据库不支持)
一致性 Hash(多米诺 down 机) 虚拟节点(down 机多节点托管)
Gossip 节点的通信方式及收敛性 Gossip 两个节点(A、 B)之间存在三种通信方式(push、 pull、 push&pull) gossip 的协议和 seed list(防止集群分列)
Partitioners(计算 primary key token 的 hash 函数) 两种可用的复制策略: SimpleStrategy:仅用于单数据中心, 将第一个 replica 放在由 partitioner 确定的节点中,其余的 replicas 放在上述节点顺时针方向的后续节 点中。 NetworkTopologyStrategy:可用于较复杂的多数据中心。 可以指定在每个数据中心分别存储多少份 replicas。
协调者(coordinator)
SSTable 文件构成( BloomFilter、 index、 data、 static)
数据写入和更新(数据追加) 数据的写和删除效率极高 错误恢复简单 读的复杂度高 数据删除( column 的墓碑) 墓碑 垃圾回收 compaction 数据读取(memtable+SStables) 行缓存和键缓存请求流程图 Row Cache( SSTables 中频繁被访问的数据) Bloom Filter(查找数据可能对应的 SSTable) Partition Key Cache(查找数据可能对应的 Partition key) Partition Summary(内存中存储一些 partition index 的样本) Partition Index(磁盘中) Compression offset map(磁盘中)
F5:硬件负载均衡器,功能很好,但是成本很高。 lvs:重量级的四层负载软件。 nginx:轻量级的四层负载软件,带缓存功能,正则表达式较灵活。 haproxy:模拟四层转发,较灵活。
haproxy:天生负载均衡技能,全面支持七层代理,会话保持,标记,路径转移; nginx:只在 http 协议和 mail 协议上功能比较好,性能与 haproxy 差不多; apache:功能较差 Mysql proxy:功能尚可。
IPVS
1.选择唯一性索引 2.为经常需要排序、分组和联合操作的字段建立索引: 3.为常作为查询条件的字段建立索引。 4.限制索引的数目: 尽量使用数据量少的索引 尽量使用前缀来索引 7.删除不再使用或者很少使用的索引 8 . 最左前缀匹配原则,非常重要的原则。 10 . 尽量选择区分度高的列作为索引 11 .索引列不能参与计算,保持列“干净”:带函数的查询不参与索引。 12 .尽量的扩展索引,不要新建索引。
原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 永久性(Durability)
存储过程优化思路:
垂直切分(按照功能模块) 水平切分(按照规则划分存储)
同步阻塞问题 单点故障 数据不一致(脑裂问题) 二阶段无法解决的问题(数据状态不确定)
两阶段型 补偿型 异步确保型 最大努力通知型(多次尝试)
一致性(C): 可用性(A): 分区容忍性(P) :
Paxos 三种角色: Proposer, Acceptor, Learners Proposer: Acceptor: Learner: Paxos 算法分为两个阶段。具体如下: 阶段一(准 leader 确定 ): 阶段二(leader 确认):
1.崩溃恢复:主要就是 Leader 选举过程
2.数据同步: Leader 服务器与其他服务器进行数据同步
3.消息广播: Leader 服务器将数据发送给其他服务器
Leader(领导者-日志管理) Follower(追随者-日志同步) Candidate(候选者-负责选票)
选举定时器
N:在分布式存储系统中,有多少份备份数据 W:代表一次成功的更新操作要求至少有 w 份数据写入成功 R: 代表一次成功的读数据操作要求至少有 R 份数据成功读取
1.建构环形 hash 空间:
2.把需要缓存的内容(对象)映射到 hash 空间
3.把服务器(节点)映射到 hash 空间
4.把对象映射到服务节点
考察 cache 的变动 虚拟节点
1.作业提交与初始化
2.任务调度与监控。
3.任务运行环境准备
4.任务执行
5.作业完成。
Spark Core Spark SQL Spark Streaming Mllib GraphX
Cluster Manager-制整个集群,监控 worker Worker 节点-负责控制计算节点 Driver: 运行 Application 的 main()函数 Executor:执行器,是为某个 Application 运行在 worker node 上的一个进程
- 构建 Spark Application 的运行环境,启动 SparkContext
- SparkContext 向资源管理器(可以是 Standalone, Mesos, Yarn)申请运行 Executor 资源,并启 动 StandaloneExecutorbackend,
- Executor 向 SparkContext 申请 Task
- SparkContext 将应用程序分发给 Executor
- SparkContext 构建成 DAG 图,将 DAG 图分解成 Stage、将 Taskset 发送给 Task Scheduler,最 后由 Task Scheduler 将 Task 发送给 Executor 运行
- Task 在 Executor 上运行,运行完释放所有资源
(1) RDD 的创建方式 (2) RDD 的两种操作算子(转换(Transformation)与行动(Action) )
(1). Worker(进程) (2). Executor(线程) (3). Task