文件大小:9.75 MB
文件类型:pdf
发布时间:2022-12-31 11:26:44
需资源分:2
下载次数:0
Tag:JAVA 面试 整理
::资源简介::
1. 目录
2. JVM
2.1. 线程
2.2. JVM内存区域
2.2.1. 程序计数器(线程私有)
2.2.2. 虚拟机栈(线程私有)
2.2.3. 本地方法区(线程私有)
2.2.4. 堆(Heap-线程共享)-运行时数据区
2.2.5. 方法区/永久代(线程共享)
2.3. JVM运行时内存
2.3.1. 新生代
2.3.1.1. Eden区
2.3.1.2. ServivorFrom
2.3.1.3. ServivorTo
2.3.1.4. MinorGC的过程(复制->清空->互换)
1:eden、servicorFrom 复制到ServicorTo,年龄+1
2:清空eden、servicorFrom
3:ServicorTo和ServicorFrom互换
2.3.2. 老年代
2.3.3. 永久代
2.3.3.1. JAVA8与元数据
2.4. 垃圾回收与算法
2.4.1. 如何确定垃圾
2.4.1.1. 引用计数法
2.4.1.2. 可达性分析
2.4.2. 标记清除算法(Mark-Sweep)
2.4.3. 复制算法(copying)
2.4.4. 标记整理算法(Mark-Compact)
2.4.5. 分代收集算法
2.4.5.1. 新生代与复制算法
2.4.5.2. 老年代与标记复制算法
2.5. JAVA 四中引用类型
2.5.1. 强引用
2.5.2. 软引用
2.5.3. 弱引用
2.5.4. 虚引用
2.6. GC分代收集算法 VS 分区收集算法
2.6.1. 分代收集算法
2.6.1.1. 在新生代-复制算法
2.6.1.2. 在老年代-标记整理算法
2.6.2. 分区收集算法
2.7. GC垃圾收集器
2.7.1. Serial垃圾收集器(单线程、复制算法)
2.7.2. ParNew垃圾收集器(Serial+多线程)
2.7.3. Parallel Scavenge收集器(多线程复制算法、高效)
2.7.4. Serial Old收集器(单线程标记整理算法 )
2.7.5. Parallel Old收集器(多线程标记整理算法)
2.7.6. CMS收集器(多线程标记清除算法)
2.7.6.1. 初始标记
2.7.6.2. 并发标记
2.7.6.3. 重新标记
2.7.6.4. 并发清除
2.7.7. G1收集器
2.8. JAVA IO/NIO
2.8.1. 阻塞IO模型
2.8.2. 非阻塞IO模型
2.8.3. 多路复用IO模型
2.8.4. 信号驱动IO模型
2.8.5. 异步IO模型
2.8.1. JAVA IO包
2.8.2. JAVA NIO
2.8.2.1. NIO的缓冲区
2.8.2.2. NIO的非阻塞
2.8.3. Channel
2.8.4. Buffer
2.8.5. Selector
2.9. JVM 类加载机制
2.9.1.1. 加载
2.9.1.2. 验证
2.9.1.3. 准备
2.9.1.4. 解析
2.9.1.5. 符号引用
2.9.1.6. 直接引用
2.9.1.7. 初始化
2.9.1.8. 类构造器<client>
2.9.2. 类加载器
2.9.2.1. 启动类加载器(Bootstrap ClassLoader)
2.9.2.2. 扩展类加载器(Extension ClassLoader)
2.9.2.3. 应用程序类加载器(Application ClassLoader):
2.9.3. 双亲委派
2.9.4. OSGI(动态模型系统)
2.9.4.1. 动态改变构造
2.9.4.2. 模块化编程与热插拔
3. JAVA集合
3.1. 接口继承关系和实现
3.2. List
3.2.1. ArrayList(数组)
3.2.2. Vector(数组实现、线程同步)
3.2.3. LinkList(链表)
3.3. Set
3.3.1.1. HashSet(Hash表)
3.3.1.2. TreeSet(二叉树)
3.3.1.3. LinkHashSet(HashSet+LinkedHashMap)
3.4. Map
3.4.1. HashMap(数组+链表+红黑树)
3.4.1.1. JAVA7实现
3.4.1.2. JAVA8实现
3.4.2. ConcurrentHashMap
3.4.2.1. Segment段
3.4.2.2. 线程安全(Segment 继承 ReentrantLock 加锁)
3.4.2.3. 并行度(默认16)
3.4.2.4. Java8实现 (引入了红黑树)
3.4.3. HashTable(线程安全)
3.4.4. TreeMap(可排序)
3.4.5. LinkHashMap(记录插入顺序)
4. JAVA多线程并发
4.1.1. JAVA并发知识库
4.1.2. JAVA线程实现/创建方式
4.1.2.1. 继承Thread类
4.1.2.2. 实现Runnable接口。
4.1.2.3. ExecutorService、Callable<Class>、Future有返回值线程
4.1.2.4. 基于线程池的方式
4.1.3. 4种线程池
4.1.3.1. newCachedThreadPool
4.1.3.2. newFixedThreadPool
4.1.3.3. newScheduledThreadPool
4.1.3.4. newSingleThreadExecutor
4.1.4. 线程生命周期(状态)
4.1.4.1. 新建状态(NEW)
4.1.4.2. 就绪状态(RUNNABLE):
4.1.4.3. 运行状态(RUNNING):
4.1.4.4. 阻塞状态(BLOCKED):
等待阻塞(o.wait->等待对列):
同步阻塞(lock->锁池)
其他阻塞(sleep/join)
4.1.4.5. 线程死亡(DEAD)
正常结束
异常结束
调用stop
4.1.5. 终止线程4种方式
4.1.5.1. 正常运行结束
4.1.5.2. 使用退出标志退出线程
4.1.5.3. Interrupt方法结束线程
4.1.5.4. stop方法终止线程(线程不安全)
4.1.6. sleep与wait 区别
4.1.7. start与run区别
4.1.8. JAVA后台线程
4.1.9. JAVA锁
4.1.9.1. 乐观锁
4.1.9.2. 悲观锁
4.1.9.3. 自旋锁
自旋锁的优缺点
自旋锁时间阈值(1.6引入了适应性自旋锁)
自旋锁的开启
4.1.9.4. Synchronized同步锁
Synchronized作用范围
Synchronized核心组件
Synchronized实现
4.1.9.5. ReentrantLock
Lock接口的主要方法
非公平锁
公平锁
ReentrantLock 与synchronized
ReentrantLock实现
Condition类和Object类锁方法区别区别
tryLock和lock和lockInterruptibly的区别
4.1.9.6. Semaphore信号量
实现互斥锁(计数器为1)
代码实现
Semaphore 与ReentrantLock
4.1.9.7. AtomicInteger
4.1.9.8. 可重入锁(递归锁)
4.1.9.9. 公平锁与非公平锁
公平锁(Fair)
非公平锁(Nonfair)
4.1.9.10. ReadWriteLock读写锁
读锁
写锁
4.1.9.11. 共享锁和独占锁
独占锁
共享锁
4.1.9.12. 重量级锁(Mutex Lock)
4.1.9.13. 轻量级锁
锁升级
4.1.9.14. 偏向锁
4.1.9.15. 分段锁
4.1.9.16. 锁优化
减少锁持有时间
减小锁粒度
锁分离
锁粗化
锁消除
4.1.10. 线程基本方法
4.1.10.1. 线程等待(wait)
4.1.10.2. 线程睡眠(sleep)
4.1.10.3. 线程让步(yield)
4.1.10.4. 线程中断(interrupt)
4.1.10.5. Join等待其他线程终止
4.1.10.6. 为什么要用join()方法?
4.1.10.7. 线程唤醒(notify)
4.1.10.8. 其他方法:
4.1.11. 线程上下文切换
4.1.11.1. 进程
4.1.11.2. 上下文
4.1.11.3. 寄存器
4.1.11.4. 程序计数器
4.1.11.5. PCB-“切换桢”
4.1.11.6. 上下文切换的活动:
4.1.11.7. 引起线程上下文切换的原因
4.1.12. 同步锁与死锁
4.1.12.1. 同步锁
4.1.12.2. 死锁
4.1.13. 线程池原理
4.1.13.1. 线程复用
4.1.13.2. 线程池的组成
4.1.13.3. 拒绝策略
4.1.13.4. Java线程池工作过程
4.1.14. JAVA阻塞队列原理
4.1.14.1. 阻塞队列的主要方法
插入操作:
获取数据操作:
4.1.14.2. Java中的阻塞队列
4.1.14.3. ArrayBlockingQueue(公平、非公平)
4.1.14.4. LinkedBlockingQueue(两个独立锁提高并发)
4.1.14.5. PriorityBlockingQueue(compareTo排序实现优先)
4.1.14.6. DelayQueue(缓存失效、定时任务 )
4.1.14.7. SynchronousQueue(不存储数据、可用于传递数据)
4.1.14.8. LinkedTransferQueue
4.1.14.9. LinkedBlockingDeque
4.1.15. CyclicBarrier、CountDownLatch、Semaphore的用法
4.1.15.1. CountDownLatch(线程计数器 )
4.1.15.2. CyclicBarrier(回环栅栏-等待至barrier状态再全部同时执行)
4.1.15.3. Semaphore(信号量-控制同时访问的线程个数)
4.1.16. volatile关键字的作用(变量可见性、禁止重排序)
变量可见性
禁止重排序
比sychronized更轻量级的同步锁
适用场景
4.1.17. 如何在两个线程之间共享数据
将数据抽象成一个类,并将数据的操作作为这个类的方法
Runnable对象作为一个类的内部类
4.1.18. ThreadLocal作用(线程本地存储)
ThreadLocalMap(线程的一个属性)
使用场景
4.1.19. synchronized和ReentrantLock的区别
4.1.19.1. 两者的共同点:
4.1.19.2. 两者的不同点:
4.1.20. ConcurrentHashMap并发
4.1.20.1. 减小锁粒度
4.1.20.2. ConcurrentHashMap分段锁
ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成
4.1.21. Java中用到的线程调度
4.1.21.1. 抢占式调度:
4.1.21.2. 协同式调度:
4.1.21.3. JVM的线程调度实现(抢占式调度)
4.1.21.4. 线程让出cpu的情况:
4.1.22. 进程调度算法
4.1.22.1. 优先调度算法
4.1.22.2. 高优先权优先调度算法
4.1.22.3. 基于时间片的轮转调度算法
4.1.23. 什么是CAS(比较并交换-乐观锁机制-锁自旋)
4.1.23.1. 概念及特性
4.1.23.2. 原子包 java.util.concurrent.atomic(锁自旋)
4.1.23.3. ABA问题
4.1.24. 什么是 AQS(抽象的队列同步器)
Exclusive独占资源-ReentrantLock
Share共享资源-Semaphore/CountDownLatch
同步器的实现是ABS核心(state资源状态计数)
ReentrantReadWriteLock实现独占和共享两种方式
5. JAVA基础
5.1.1. JAVA异常分类及处理
5.1.1.1. 概念
5.1.1.2. 异常分类
Error
Exception(RuntimeException、CheckedException)
5.1.1.3. 异常的处理方式
遇到问题不进行具体处理,而是继续抛给调用者 (throw,throws)
try catch 捕获异常针对性处理方式
5.1.1.4. Throw和throws的区别:
位置不同
功能不同:
5.1.2. JAVA反射
5.1.2.1. 动态语言
5.1.2.2. 反射机制概念 (运行状态中知道类所有的属性和方法)
5.1.2.3. 反射的应用场合
编译时类型和运行时类型
的编译时类型无法获取具体方法
5.1.2.4. Java反射API
反射API用来生成JVM中的类、接口或则对象的信息。
5.1.2.5. 反射使用步骤(获取Class对象、调用对象方法)
5.1.2.6. 获取Class对象的3种方法
调用某个对象的getClass()方法
调用某个类的class属性来获取该类对应的Class对象
使用Class类中的forName()静态方法(最安全/性能最好)
5.1.2.7. 创建对象的两种方法
Class对象的newInstance()
调用Constructor对象的newInstance()
5.1.3. JAVA注解
5.1.3.1. 概念
5.1.3.2. 4种标准元注解
@Target修饰的对象范围
@Retention定义 被保留的时间长短
@Documented描述-javadoc
@Inherited阐述了某个被标注的类型是被继承的
5.1.3.3. 注解处理器
5.1.4. JAVA内部类
5.1.4.1. 静态内部类
5.1.4.2. 成员内部类
5.1.4.3. 局部内部类(定义在方法中的类)
5.1.4.4. 匿名内部类(要继承一个父类或者实现一个接口、直接使用new来生成一个对象的引用)
5.1.5. JAVA泛型
5.1.5.1. 泛型方法(<E>)
5.1.5.2. 泛型类<T>
5.1.5.3. 类型通配符?
5.1.5.4. 类型擦除
5.1.6. JAVA序列化(创建可复用的Java对象)
保存(持久化)对象及其状态到内存或者磁盘
序列化对象以字节数组保持-静态成员不保存
序列化用户远程对象传输
Serializable实现序列化
ObjectOutputStream和ObjectInputStream对对象进行序列化及反序列化
writeObject 和 readObject自定义序列化策略
序列化 ID
序列化并不保存静态变量
序列化子父类说明
Transient 关键字阻止该变量被序列化到文件中
5.1.7. JAVA复制
5.1.7.1. 直接赋值复制
5.1.7.2. 浅复制(复制引用但不复制引用的对象)
5.1.7.3. 深复制(复制对象和其应用对象)
5.1.7.4. 序列化(深clone一中实现)
6. Spring 原理
6.1.1. Spring 特点
6.1.1.1. 轻量级
6.1.1.2. 控制反转
6.1.1.3. 面向切面
6.1.1.4. 容器
6.1.1.5. 框架集合
6.1.2. Spring 核心组件
6.1.3. Spring 常用模块
6.1.4. Spring 主要包
6.1.5. Spring 常用注解
6.1.6. Spring 第三方结合
6.1.7. Spring IOC原理
6.1.7.1. 概念
6.1.7.2. Spring容器高层视图
6.1.7.3. IOC容器实现
BeanFactory-框架基础设施
1.1..1.1.1 BeanDefinitionRegistry注册表
1.1..1.1.2 BeanFactory 顶层接口
1.1..1.1.3 ListableBeanFactory
1.1..1.1.4 HierarchicalBeanFactory父子级联
1.1..1.1.5 ConfigurableBeanFactory
1.1..1.1.6 AutowireCapableBeanFactory自动装配
1.1..1.1.7 SingletonBeanRegistry运行期间注册单例Bean
1.1..1.1.8 依赖日志框框
ApplicationContext面向开发应用
WebApplication体系架构
6.1.7.4. Spring Bean 作用域
singleton:单例模式(多线程下不安全)
prototype:原型模式每次使用时创建
Request:一次request一个实例
session
global Session
6.1.7.5. Spring Bean 生命周期
实例化
IOC依赖注入
setBeanName实现
BeanFactoryAware实现
ApplicationContextAware实现
postProcessBeforeInitialization接口实现-初始化预处理
init-method
postProcessAfterInitialization
Destroy过期自动清理阶段
destroy-method自配置清理
6.1.7.6. Spring 依赖注入四种方式
构造器注入
setter方法注入
静态工厂注入
实例工厂
6.1.7.7. 5种不同方式的自动装配
6.1.8. Spring APO原理
6.1.8.1. 概念
6.1.8.2. AOP核心概念
6.1.8.1. AOP两种代理方式
JDK动态接口代理
CGLib动态代理
6.1.8.2. 实现原理
6.1.9. Spring MVC原理
6.1.9.1. MVC流程
Http请求到DispatcherServlet
HandlerMapping寻找处理器
调用处理器Controller
Controller调用业务逻辑处理后,返回ModelAndView
DispatcherServlet查询ModelAndView
ModelAndView反馈浏览器HTTP
6.1.9.1. MVC常用注解
6.1.10. Spring Boot原理
1. 创建独立的Spring应用程序
2. 嵌入的Tomcat,无需部署WAR文件
3. 简化Maven配置
4. 自动配置Spring
5. 提供生产就绪型功能,如指标,健康检查和外部配置
6. 绝对没有代码生成和对XML没有要求配置 [1]
6.1.11. JPA原理
6.1.11.1. 事务
6.1.11.2. 本地事务
6.1.11.1. 分布式事务
6.1.11.1. 两阶段提交
1准备阶段
2提交阶段:
6.1.12. Mybatis缓存
6.1.12.1. Mybatis的一级缓存原理(sqlsession级别)
6.1.12.2. 二级缓存原理(mapper基本)
具体使用需要配置:
6.1.13. Tomcat架构
7. 微服务
7.1.1. 服务注册发现
7.1.1.1. 客户端注册(zookeeper)
7.1.1.2. 第三方注册(独立的服务Registrar)
7.1.1.3. 客户端发现
7.1.1.4. 服务端发现
7.1.1.5. Consul
7.1.1.6. Eureka
7.1.1.7. SmartStack
7.1.1.8. Etcd
7.1.2. API 网关
7.1.2.1. 请求转发
7.1.2.2. 响应合并
7.1.2.3. 协议转换
7.1.2.4. 数据转换
7.1.2.5. 安全认证
7.1.3. 配置中心
7.1.3.1. zookeeper配置中心
7.1.3.2. 配置中心数据分类
7.1.4. 事件调度(kafka)
7.1.5. 服务跟踪(starter-sleuth)
7.1.6. 服务熔断(Hystrix)
7.1.6.1. Hystrix断路器机制
7.1.7. API管理
8. Netty 与RPC
8.1.1. Netty 原理
8.1.2. Netty 高性能
8.1.2.1. 多路复用通讯方式
8.1.2.1. 异步通讯NIO
8.1.2.2. 零拷贝(DIRECT BUFFERS使用堆外直接内存)
8.1.2.3. 内存池(基于内存池的缓冲区重用机制)
8.1.2.4. 高效的Reactor线程模型
Reactor单线程模型
Reactor多线程模型
主从Reactor多线程模型
8.1.2.5. 无锁设计、线程绑定
8.1.2.6. 高性能的序列化框架
小包封大包,防止网络阻塞
软中断Hash值和CPU绑定
8.1.3. Netty RPC实现
8.1.3.1. 概念
8.1.3.2. 关键技术
8.1.3.3. 核心流程
8.1.3.1. 消息编解码
息数据结构(接口名称+方法名+参数类型和参数值+超时时间+ requestID)
序列化
8.1.3.1. 通讯过程
核心问题(线程暂停、消息乱序)
通讯流程
requestID生成-AtomicLong
存放回调对象callback到全局ConcurrentHashMap
synchronized获取回调对象callback的锁并自旋wait
监听消息的线程收到消息,找到callback上的锁并唤醒
8.1.4. RMI实现方式
8.1.4.1. 实现步骤
8.1.5. Protoclol Buffer
8.1.5.1. 特点
8.1.6. Thrift
9. 网络
9.1.1. 网络7层架构
9.1.2. TCP/IP原理
9.1.2.1. 网络访问层(Network Access Layer)
9.1.2.2. 网络层(Internet Layer)
9.1.2.3. 传输层(Tramsport Layer-TCP/UDP)
9.1.2.4. 应用层(Application Layer)
9.1.3. TCP三次握手/四次挥手
9.1.3.1. 数据包说明
9.1.3.2. 三次握手
9.1.3.3. 四次挥手
9.1.4. HTTP原理
9.1.4.1. 传输流程
1:地址解析
2:封装HTTP请求数据包
3:封装成TCP包并建立连接
4:客户机发送请求命
5:服务器响应
6:服务器关闭TCP连接
9.1.4.2. HTTP状态
9.1.4.3. HTTPS
建立连接获取证书
证书验证
数据加密和传输
9.1.5. CDN 原理
9.1.5.1. 分发服务系统
9.1.5.2. 负载均衡系统:
9.1.5.3. 管理系统:
10. 日志
10.1.1. Slf4j
10.1.2. Log4j
10.1.3. LogBack
10.1.3.1. Logback优点
10.1.4. ELK
11. Zookeeper
11.1.1. Zookeeper概念
11.1.1. Zookeeper角色
11.1.1.1. Leader
11.1.1.2. Follower
11.1.1.3. Observer
11.1.1.1. ZAB协议
事务编号 Zxid(事务请求计数器+ epoch)
epoch
Zab协议有两种模式-恢复模式(选主)、广播模式(同步)
ZAB协议4阶段
Leader election(选举阶段-选出准Leader)
Discovery(发现阶段-接受提议、生成epoch、接受epoch)
Synchronization(同步阶段-同步follower副本)
Broadcast(广播阶段-leader消息广播)
ZAB协议JAVA实现(FLE-发现阶段和同步合并为 Recovery Phase(恢复阶段))
11.1.1.2. 投票机制
11.1.2. Zookeeper工作原理(原子广播)
11.1.3. Znode有四种形式的目录节点
12. Kafka
12.1.1. Kafka概念
12.1.2. Kafka数据存储设计
12.1.2.1. partition的数据文件(offset,MessageSize,data)
12.1.2.2. 数据文件分段segment(顺序读写、分段命令、二分查找)
12.1.2.3. 数据文件索引(分段索引、稀疏存储)
12.1.3. 生产者设计
12.1.3.1. 负载均衡(partition会均衡分布到不同broker上)
12.1.3.2. 批量发送
12.1.3.3. 压缩(GZIP或Snappy)
12.1.1. 消费者设计
12.1.1.1. Consumer Group
13. RabbitMQ
13.1.1. 概念
13.1.2. RabbitMQ架构
13.1.2.1. Message
13.1.2.2. Publisher
13.1.2.3. Exchange(将消息路由给队列 )
13.1.2.4. Binding(消息队列和交换器之间的关联)
13.1.2.5. Queue
13.1.2.6. Connection
13.1.2.7. Channel
13.1.2.8. Consumer
13.1.2.9. Virtual Host
13.1.2.10. Broker
13.1.3. Exchange 类型
13.1.3.1. Direct键(routing key)分布:
13.1.3.2. Fanout(广播分发)
13.1.3.3. topic 交换器(模式匹配)
14. Hbase
14.1.1. 概念
14.1.2. 列式存储
14.1.3. Hbase核心概念
14.1.3.1. Column Family列族
14.1.3.2. Rowkey(Rowkey查询,Rowkey范围扫描,全表扫描)
14.1.3.3. Region分区
14.1.3.4. TimeStamp多版本
14.1.4. Hbase核心架构
14.1.4.1. Client:
14.1.4.2. Zookeeper:
14.1.4.3. Hmaster
14.1.4.4. HregionServer
14.1.4.5. Region寻址方式(通过zookeeper .META)
14.1.4.6. HDFS
14.1.5. Hbase的写逻辑
14.1.5.1. Hbase的写入流程
获取RegionServer
请求写Hlog
请求写MemStore
14.1.5.2. MemStore刷盘
全局内存控制
MemStore达到上限
RegionServer的Hlog数量达到上限
手工触发
关闭RegionServer触发
Region使用HLOG恢复完数据后触发
14.1.6. HBase vs Cassandra
15. MongoDB
15.1.1. 概念
15.1.2. 特点
16. Cassandra
16.1.1. 概念
16.1.2. 数据模型
Key Space(对应SQL数据库中的database)
Key(对应SQL数据库中的主键)
column(对应SQL数据库中的列)
super column(SQL数据库不支持)
Standard Column Family(相对应SQL数据库中的table)
Super Column Family(SQL数据库不支持)
16.1.3. Cassandra一致Hash和虚拟节点
一致性Hash(多米诺down机)
虚拟节点(down机多节点托管)
16.1.4. Gossip协议
Gossip节点的通信方式及收敛性
Gossip两个节点(A、B)之间存在三种通信方式(push、pull、push&pull)
gossip的协议和seed list(防止集群分列)
16.1.5. 数据复制
Partitioners(计算primary key token的hash函数)
两种可用的复制策略:
SimpleStrategy:仅用于单数据中心,
将第一个replica放在由partitioner确定的节点中,其余的replicas放在上述节点顺时针方向的后续节点中。
NetworkTopologyStrategy:可用于较复杂的多数据中心。
可以指定在每个数据中心分别存储多少份replicas。
16.1.6. 数据写请求和协调者
协调者(coordinator)
16.1.7. 数据读请求和后台修复
16.1.8. 数据存储(CommitLog、MemTable、SSTable)
SSTable文件构成(BloomFilter、index、data、static)
16.1.9. 二级索引(对要索引的value摘要,生成RowKey)
16.1.10. 数据读写
数据写入和更新(数据追加)
数据的写和删除效率极高
错误恢复简单
读的复杂度高
数据删除(column 的墓碑)
墓碑
垃圾回收compaction
数据读取(memtable+SStables)
行缓存和键缓存请求流程图
Row Cache(SSTables中频繁被访问的数据)
Bloom Filter(查找数据可能对应的SSTable)
Partition Key Cache(查找数据可能对应的Partition key)
Partition Summary(内存中存储一些partition index的样本)
Partition Index(磁盘中)
Compression offset map(磁盘中)
17. 设计模式
17.1.1. 设计原则
17.1.2. 工厂方法模式
17.1.3. 抽象工厂模式
17.1.4. 单例模式
17.1.5. 建造者模式
17.1.6. 原型模式
17.1.7. 适配器模式
17.1.8. 装饰器模式
17.1.9. 代理模式
17.1.10. 外观模式
17.1.11. 桥接模式
17.1.12. 组合模式
17.1.13. 享元模式
17.1.14. 策略模式
17.1.15. 模板方法模式
17.1.16. 观察者模式
17.1.17. 迭代子模式
17.1.18. 责任链模式
17.1.19. 命令模式
17.1.20. 备忘录模式
17.1.21. 状态模式
17.1.22. 访问者模式
17.1.23. 中介者模式
17.1.24. 解释器模式
18. 负载均衡
18.1.1. 四层负载均衡 vs 七层负载均衡
18.1.1.1. 四层负载均衡(目标地址和端口交换)
F5:硬件负载均衡器,功能很好,但是成本很高。
lvs:重量级的四层负载软件。
nginx:轻量级的四层负载软件,带缓存功能,正则表达式较灵活。
haproxy:模拟四层转发,较灵活。
18.1.1.2. 七层负载均衡(内容交换)
haproxy:天生负载均衡技能,全面支持七层代理,会话保持,标记,路径转移;
nginx:只在http协议和mail协议上功能比较好,性能与haproxy差不多;
apache:功能较差
Mysql proxy:功能尚可。
18.1.2. 负载均衡算法/策略
18.1.2.1. 轮循均衡(Round Robin)
18.1.2.2. 权重轮循均衡(Weighted Round Robin)
18.1.2.3. 随机均衡(Random)
18.1.2.4. 权重随机均衡(Weighted Random)
18.1.2.5. 响应速度均衡(Response Time探测时间)
18.1.2.6. 最少连接数均衡(Least Connection)
18.1.2.7. 处理能力均衡(CPU、内存)
18.1.2.8. DNS响应均衡(Flash DNS)
18.1.2.9. 哈希算法
18.1.2.10. IP地址散列(保证客户端服务器对应关系稳定)
18.1.2.11. URL散列
18.1.3. LVS
18.1.3.1. LVS原理
IPVS
18.1.3.1. LVS NAT 模式
18.1.3.2. LVS DR 模式(局域网改写mac地址)
18.1.3.3. LVS TUN 模式(IP封装、跨网段)
18.1.3.4. LVS FULLNAT模式
18.1.4. Keepalive
18.1.5. Nginx反向代理负载均衡
18.1.5.1. upstream_module和健康检测
18.1.5.1. proxy_pass请求转发
18.1.6. HAProxy
19. 数据库
19.1.1. 存储引擎
19.1.1.1. 概念
19.1.1.2. InnoDB(B+树)
19.1.1.3. TokuDB(Fractal Tree-节点带数据)
19.1.1.4. MyIASM
19.1.1.5. Memory
19.1.2. 索引
19.1.2.1. 常见索引原则有
1.选择唯一性索引
2.为经常需要排序、分组和联合操作的字段建立索引:
3.为常作为查询条件的字段建立索引。
4.限制索引的数目:
尽量使用数据量少的索引
尽量使用前缀来索引
7.删除不再使用或者很少使用的索引
8 . 最左前缀匹配原则,非常重要的原则。
10 . 尽量选择区分度高的列作为索引
11 .索引列不能参与计算,保持列“干净”:带函数的查询不参与索引。
12 .尽量的扩展索引,不要新建索引。
19.1.3. 数据库三范式
19.1.3.1. 第一范式(1st NF -列都是不可再分)
19.1.3.2. 第二范式(2nd NF-每个表只描述一件事情)
19.1.3.3. 第三范式(3rd NF- 不存在对非主键列的传递依赖)
19.1.4. 数据库是事务
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
永久性(Durability)
19.1.5. 存储过程(特定功能的SQL 语句集)
存储过程优化思路:
19.1.6. 触发器(一段能自动执行的程序)
19.1.7. 数据库并发策略
19.1.7.1. 乐观锁
19.1.7.2. 悲观锁
19.1.7.3. 时间戳
19.1.8. 数据库锁
19.1.8.1. 行级锁
19.1.8.2. 表级锁
19.1.8.1. 页级锁
19.1.9. 基于Redis分布式锁
19.1.10. 分区分表
垂直切分(按照功能模块)
水平切分(按照规则划分存储)
19.1.11. 两阶段提交协议
19.1.11.1. 准备阶段
19.1.11.2. 提交阶段
19.1.11.3. 缺点
同步阻塞问题
单点故障
数据不一致(脑裂问题)
二阶段无法解决的问题(数据状态不确定)
19.1.12. 三阶段提交协议
19.1.12.1. CanCommit阶段
19.1.12.2. PreCommit阶段
19.1.12.3. doCommit阶段
19.1.13. 柔性事务
19.1.13.1. 柔性事务
两阶段型
补偿型
异步确保型
最大努力通知型(多次尝试)
19.1.14. CAP
一致性(C):
可用性(A):
分区容忍性(P):
20. 一致性算法
20.1.1. Paxos
Paxos三种角色:Proposer,Acceptor,Learners
Proposer:
Acceptor:
Learner:
Paxos算法分为两个阶段。具体如下:
阶段一(准leader确定 ):
阶段二(leader确认):
20.1.2. Zab
1.崩溃恢复:主要就是Leader选举过程
2.数据同步:Leader服务器与其他服务器进行数据同步
3.消息广播:Leader服务器将数据发送给其他服务器
20.1.3. Raft
20.1.3.1. 角色
Leader(领导者-日志管理)
Follower(追随者-日志同步)
Candidate(候选者-负责选票)
20.1.3.2. Term(任期)
20.1.3.3. 选举(Election)
选举定时器
20.1.3.4. 安全性(Safety)
20.1.3.5. raft协议和zab协议区别
20.1.4. NWR
N:在分布式存储系统中,有多少份备份数据
W:代表一次成功的更新操作要求至少有w份数据写入成功
R: 代表一次成功的读数据操作要求至少有R份数据成功读取
20.1.5. Gossip
20.1.6. 一致性Hash
20.1.6.1. 一致性Hash特性
20.1.6.2. 一致性Hash原理
1.建构环形hash 空间:
2.把需要缓存的内容(对象)映射到hash 空间
3.把服务器(节点)映射到hash 空间
4.把对象映射到服务节点
考察cache 的变动
虚拟节点
21. JAVA算法
21.1.1. 二分查找
21.1.2. 冒泡排序算法
21.1.3. 插入排序算法
21.1.4. 快速排序算法
21.1.1. 希尔排序算法
21.1.2. 归并排序算法
21.1.3. 桶排序算法
21.1.4. 基数排序算法
21.1.5. 剪枝算法
21.1.6. 回溯算法
21.1.7. 最短路径算法
21.1.8. 最大子数组算法
21.1.9. 最长公共子序算法
21.1.10. 最小生成树算法
22. 数据结构
22.1.1. 栈(stack)
22.1.2. 队列(queue)
22.1.3. 链表(Link)
22.1.4. 散列表(Hash Table)
22.1.5. 排序二叉树
22.1.5.1. 插入操作
22.1.5.2. 删除操作
22.1.5.3. 查询操作
22.1.6. 红黑树
22.1.6.1. 红黑树的特性
22.1.6.1. 左旋
22.1.6.1. 右旋
22.1.6.1. 添加
22.1.6.2. 删除
22.1.7. B-TREE
22.1.8. 位图
23. 加密算法
23.1.1. AES
23.1.2. RSA
23.1.3. CRC
23.1.4. MD5
24. 分布式缓存
24.1.1. 缓存雪崩
24.1.2. 缓存穿透
24.1.3. 缓存预热
24.1.4. 缓存更新
24.1.5. 缓存降级
25. Hadoop
25.1.1. 概念
25.1.2. HDFS
25.1.2.1. Client
25.1.2.2. NameNode
25.1.2.3. Secondary NameNode
25.1.2.4. DataNode
25.1.3. MapReduce
25.1.3.1. Client
25.1.3.2. JobTracker
25.1.3.3. TaskTracker
25.1.3.4. Task
25.1.3.5. Reduce Task 执行过程
25.1.4. Hadoop MapReduce 作业的生命周期
1.作业提交与初始化
2.任务调度与监控。
3.任务运行环境准备
4.任务执行
5.作业完成。
26. Spark
26.1.1. 概念
26.1.2. 核心架构
Spark Core
Spark SQL
Spark Streaming
Mllib
GraphX
26.1.3. 核心组件
Cluster Manager-制整个集群,监控worker
Worker节点-负责控制计算节点
Driver: 运行Application 的main()函数
Executor:执行器,是为某个Application运行在worker node上的一个进程
26.1.4. SPARK编程模型
26.1.5. SPARK计算模型
26.1.6. SPARK运行流程
1. 构建Spark Application的运行环境,启动SparkContext
2. SparkContext向资源管理器(可以是Standalone,Mesos,Yarn)申请运行Executor资源,并启动StandaloneExecutorbackend,
3. Executor向SparkContext申请Task
4. SparkContext将应用程序分发给Executor
5. SparkContext构建成DAG图,将DAG图分解成Stage、将Taskset发送给Task Scheduler,最后由Task Scheduler将Task发送给Executor运行
6. Task在Executor上运行,运行完释放所有资源
26.1.7. SPARK RDD流程
26.1.8. SPARK RDD
(1)RDD的创建方式
(2)RDD的两种操作算子(转换(Transformation)与行动(Action))
27. Storm
27.1.1. 概念
27.1.1. 集群架构
27.1.1.1. Nimbus(master-代码分发给Supervisor)
27.1.1.2. Supervisor(slave-管理Worker进程的启动和终止)
27.1.1.3. Worker(具体处理组件逻辑的进程)
27.1.1.4. Task
27.1.1.5. ZooKeeper
27.1.2. 编程模型(spout->tuple->bolt)
27.1.2.1. Topology
27.1.2.2. Spout
27.1.2.3. Bolt
27.1.2.4. Tuple
27.1.2.5. Stream
27.1.3. Topology运行
(1). Worker(进程) (2). Executor(线程) (3). Task
27.1.3.1. Worker(1个worker进程执行的是1个topology的子集)
27.1.3.2. Executor(executor是1个被worker进程启动的单独线程)
27.1.3.3. Task(最终运行spout或bolt中代码的单元)
27.1.4. Storm Streaming Grouping
27.1.4.1. huffle Grouping
27.1.4.2. Fields Grouping
27.1.4.3. All grouping :广播
27.1.4.4. Global grouping
27.1.4.5. None grouping :不分组
27.1.4.6. Direct grouping :直接分组 指定分组
28. YARN
28.1.1. 概念
28.1.2. ResourceManager
28.1.3. NodeManager
28.1.4. ApplicationMaster
28.1.5. YARN运行流程
29. 机器学习
29.1.1. 决策树
29.1.2. 随机森林算法
29.1.3. 逻辑回归
29.1.4. SVM
29.1.5. 朴素贝叶斯
29.1.6. K最近邻算法
29.1.7. K均值算法
29.1.8. Adaboost 算法
29.1.9. 神经网络
29.1.10. 马尔可夫
30. 云计算
30.1.1. SaaS
30.1.2. PaaS
30.1.3. IaaS
30.1.4. Docker
30.1.4.1. 概念
30.1.4.2. Namespaces
30.1.4.3. 进程(CLONE_NEWPID 实现的进程隔离)
30.1.4.4. Libnetwork与网络隔离
30.1.4.5. 资源隔离与CGroups
30.1.4.6. 镜像与UnionFS
30.1.4.7. 存储驱动
30.1.5. Openstack
::下载地址::
>> 评论