收藏 分销(赏)

JAVA核心面试知识整理.pdf

上传人:二*** 文档编号:4479338 上传时间:2024-09-24 格式:PDF 页数:283 大小:10.65MB
下载 相关 举报
JAVA核心面试知识整理.pdf_第1页
第1页 / 共283页
本文档共283页,全文阅读请下载到手机保存,查看更方便
资源描述
1.目录目录 1.目录目录.1 2.JVM.19 2.1.线程.20 2.2.JVM 内存区域.21 2.2.1.程序计数器(线程私有).22 2.2.2.虚拟机栈(线程私有).22 2.2.3.本地方法区(线程私有).23 2.2.4.堆(Heap-线程共享)-运行时数据区.23 2.2.5.方法区/永久代(线程共享).23 2.3.JVM 运行时内存.24 2.3.1.新生代.24 2.3.1.1.Eden 区.24 2.3.1.2.ServivorFrom.24 2.3.1.3.ServivorTo.24 2.3.1.4.MinorGC 的过程(复制-清空-互换).24 1:eden、servicorFrom 复制到 ServicorTo,年龄+1.25 2:清空 eden、servicorFrom.25 3:ServicorTo 和 ServicorFrom 互换.25 2.3.2.老年代.25 2.3.3.永久代.25 2.3.3.1.JAVA8 与元数据.25 2.4.垃圾回收与算法.26 2.4.1.如何确定垃圾.26 2.4.1.1.引用计数法.26 2.4.1.2.可达性分析.26 2.4.2.标记清除算法(Mark-Sweep).27 2.4.3.复制算法(copying).27 2.4.4.标记整理算法(Mark-Compact).28 2.4.5.分代收集算法.29 2.4.5.1.新生代与复制算法.29 2.4.5.2.老年代与标记复制算法.29 2.5.JAVA 四中引用类型.30 2.5.1.强引用.30 2.5.2.软引用.30 2.5.3.弱引用.30 2.5.4.虚引用.30 2.6.GC 分代收集算法 VS 分区收集算法.30 2.6.1.分代收集算法.30 2.6.1.1.在新生代-复制算法.30 2.6.1.2.在老年代-标记整理算法.30 2.6.2.分区收集算法.31 2.7.GC 垃圾收集器.31 2.7.1.Serial垃圾收集器(单线程、复制算法).31 2.7.2.ParNew垃圾收集器(Serial+多线程).31 2.7.3.Parallel Scavenge收集器(多线程复制算法、高效).32 2.7.4.Serial Old收集器(单线程标记整理算法).32 2.7.5.Parallel Old收集器(多线程标记整理算法).33 2.7.6.CMS收集器(多线程标记清除算法).33 2.7.6.1.初始标记.33 13/04/2018 Page 2 of 283 2.7.6.2.并发标记.34 2.7.6.3.重新标记.34 2.7.6.4.并发清除.34 2.7.7.G1收集器.34 2.8.JAVA IO/NIO.34 2.8.1.阻塞IO模型.34 2.8.2.非阻塞IO模型.35 2.8.3.多路复用IO模型.35 2.8.4.信号驱动IO模型.36 2.8.5.异步IO模型.36 2.8.1.JAVA IO包.36 2.8.2.JAVA NIO.37 2.8.2.1.NIO 的缓冲区.38 2.8.2.2.NIO 的非阻塞.38 2.8.3.Channel.40 2.8.4.Buffer.40 2.8.5.Selector.40 2.9.JVM 类加载机制.41 2.9.1.1.加载.41 2.9.1.2.验证.41 2.9.1.3.准备.41 2.9.1.4.解析.41 2.9.1.5.符号引用.42 2.9.1.6.直接引用.42 2.9.1.7.初始化.42 2.9.1.8.类构造器.42 2.9.2.类加载器.42 2.9.2.1.启动类加载器(Bootstrap ClassLoader).43 2.9.2.2.扩展类加载器(Extension ClassLoader).43 2.9.2.3.应用程序类加载器(Application ClassLoader):.43 2.9.3.双亲委派.43 2.9.4.OSGI(动态模型系统).44 2.9.4.1.动态改变构造.44 2.9.4.2.模块化编程与热插拔.44 3.JAVA 集合集合.45 3.1.接口继承关系和实现.45 3.2.LIST.47 3.2.1.ArrayList(数组).47 3.2.2.Vector(数组实现、线程同步).47 3.2.3.LinkList(链表).47 3.3.SET.48 3.3.1.1.HashSet(Hash 表).48 3.3.1.2.TreeSet(二叉树).49 3.3.1.3.LinkHashSet(HashSet+LinkedHashMap).49 3.4.MAP.50 3.4.1.HashMap(数组+链表+红黑树).50 3.4.1.1.JAVA7 实现.50 3.4.1.2.JAVA8 实现.51 3.4.2.ConcurrentHashMap.51 3.4.2.1.Segment 段.51 3.4.2.2.线程安全(Segment 继承 ReentrantLock 加锁).51 3.4.2.3.并行度(默认 16).52 3.4.2.4.Java8 实现(引入了红黑树).52 13/04/2018 Page 3 of 283 3.4.3.HashTable(线程安全).53 3.4.4.TreeMap(可排序).53 3.4.5.LinkHashMap(记录插入顺序).53 4.JAVA 多线程并发多线程并发.54 4.1.1.JAVA并发知识库.54 4.1.2.JAVA线程实现/创建方式.54 4.1.2.1.继承 Thread 类.54 4.1.2.2.实现 Runnable 接口。.54 4.1.2.3.ExecutorService、Callable、Future 有返回值线程.55 4.1.2.4.基于线程池的方式.56 4.1.3.4种线程池.56 4.1.3.1.newCachedThreadPool.57 4.1.3.2.newFixedThreadPool.57 4.1.3.3.newScheduledThreadPool.58 4.1.3.4.newSingleThreadExecutor.58 4.1.4.线程生命周期(状态).58 4.1.4.1.新建状态(NEW).58 4.1.4.2.就绪状态(RUNNABLE):.59 4.1.4.3.运行状态(RUNNING):.59 4.1.4.4.阻塞状态(BLOCKED):.59 等待阻塞(o.wait-等待对列):.59 同步阻塞(lock-锁池).59 其他阻塞(sleep/join).59 4.1.4.5.线程死亡(DEAD).59 正常结束.59 异常结束.59 调用 stop.59 4.1.5.终止线程4种方式.60 4.1.5.1.正常运行结束.60 4.1.5.2.使用退出标志退出线程.60 4.1.5.3.Interrupt 方法结束线程.60 4.1.5.4.stop 方法终止线程(线程不安全).61 4.1.6.sleep与wait 区别.61 4.1.7.start与run区别.62 4.1.8.JAVA后台线程.62 4.1.9.JAVA锁.63 4.1.9.1.乐观锁.63 4.1.9.2.悲观锁.63 4.1.9.3.自旋锁.63 自旋锁的优缺点.63 自旋锁时间阈值(1.6 引入了适应性自旋锁).63 自旋锁的开启.64 4.1.9.4.Synchronized 同步锁.64 Synchronized 作用范围.64 Synchronized 核心组件.64 Synchronized 实现.64 4.1.9.5.ReentrantLock.66 Lock 接口的主要方法.66 非公平锁.66 公平锁.67 ReentrantLock 与 synchronized.67 ReentrantLock 实现.67 Condition 类和 Object 类锁方法区别区别.68 tryLock 和 lock 和 lockInterruptibly 的区别.68 4.1.9.6.Semaphore 信号量.68 实现互斥锁(计数器为 1).68 代码实现.68 Semaphore 与 ReentrantLock.69 4.1.9.7.AtomicInteger.69 13/04/2018 Page 4 of 283 4.1.9.8.可重入锁(递归锁).69 4.1.9.9.公平锁与非公平锁.70 公平锁(Fair).70 非公平锁(Nonfair).70 4.1.9.10.ReadWriteLock 读写锁.70 读锁.70 写锁.70 4.1.9.11.共享锁和独占锁.70 独占锁.70 共享锁.70 4.1.9.12.重量级锁(Mutex Lock).71 4.1.9.13.轻量级锁.71 锁升级.71 4.1.9.14.偏向锁.71 4.1.9.15.分段锁.71 4.1.9.16.锁优化.71 减少锁持有时间.72 减小锁粒度.72 锁分离.72 锁粗化.72 锁消除.72 4.1.10.线程基本方法.72 4.1.10.1.线程等待(wait).73 4.1.10.2.线程睡眠(sleep).73 4.1.10.3.线程让步(yield).73 4.1.10.4.线程中断(interrupt).73 4.1.10.5.Join 等待其他线程终止.74 4.1.10.6.为什么要用 join()方法?.74 4.1.10.7.线程唤醒(notify).74 4.1.10.8.其他方法:.74 4.1.11.线程上下文切换.75 4.1.11.1.进程.75 4.1.11.2.上下文.75 4.1.11.3.寄存器.75 4.1.11.4.程序计数器.75 4.1.11.5.PCB-“切换桢”.75 4.1.11.6.上下文切换的活动:.76 4.1.11.7.引起线程上下文切换的原因.76 4.1.12.同步锁与死锁.76 4.1.12.1.同步锁.76 4.1.12.2.死锁.76 4.1.13.线程池原理.76 4.1.13.1.线程复用.76 4.1.13.2.线程池的组成.76 4.1.13.3.拒绝策略.78 4.1.13.4.Java 线程池工作过程.78 4.1.14.JAVA阻塞队列原理.79 4.1.14.1.阻塞队列的主要方法.80 插入操作:.80 获取数据操作:.81 4.1.14.2.Java 中的阻塞队列.81 4.1.14.3.ArrayBlockingQueue(公平、非公平).82 4.1.14.4.LinkedBlockingQueue(两个独立锁提高并发).82 4.1.14.5.PriorityBlockingQueue(compareTo 排序实现优先).82 4.1.14.6.DelayQueue(缓存失效、定时任务).82 4.1.14.7.SynchronousQueue(不存储数据、可用于传递数据).83 4.1.14.8.LinkedTransferQueue.83 13/04/2018 Page 5 of 283 4.1.14.9.LinkedBlockingDeque.83 4.1.15.CyclicBarrier、CountDownLatch、Semaphore的用法.84 4.1.15.1.CountDownLatch(线程计数器).84 4.1.15.2.CyclicBarrier(回环栅栏-等待至 barrier 状态再全部同时执行).84 4.1.15.3.Semaphore(信号量-控制同时访问的线程个数).85 4.1.16.volatile关键字的作用(变量可见性、禁止重排序).87 变量可见性.87 禁止重排序.87 比 sychronized 更轻量级的同步锁.87 适用场景.87 4.1.17.如何在两个线程之间共享数据.88 将数据抽象成一个类,并将数据的操作作为这个类的方法.88 Runnable 对象作为一个类的内部类.89 4.1.18.ThreadLocal作用(线程本地存储).90 ThreadLocalMap(线程的一个属性).90 使用场景.91 4.1.19.synchronized和ReentrantLock的区别.91 4.1.19.1.两者的共同点:.91 4.1.19.2.两者的不同点:.92 4.1.20.ConcurrentHashMap并发.92 4.1.20.1.减小锁粒度.92 4.1.20.2.ConcurrentHashMap 分段锁.92 ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成.93 4.1.21.Java中用到的线程调度.93 4.1.21.1.抢占式调度:.93 4.1.21.2.协同式调度:.93 4.1.21.3.JVM 的线程调度实现(抢占式调度).94 4.1.21.4.线程让出 cpu 的情况:.94 4.1.22.进程调度算法.94 4.1.22.1.优先调度算法.94 4.1.22.2.高优先权优先调度算法.95 4.1.22.3.基于时间片的轮转调度算法.96 4.1.23.什么是CAS(比较并交换-乐观锁机制-锁自旋).96 4.1.23.1.概念及特性.96 4.1.23.2.原子包 java.util.concurrent.atomic(锁自旋).97 4.1.23.3.ABA 问题.98 4.1.24.什么是 AQS(抽象的队列同步器).98 Exclusive 独占资源-ReentrantLock.99 Share 共享资源-Semaphore/CountDownLatch.99 同步器的实现是 ABS 核心(state 资源状态计数).100 ReentrantReadWriteLock 实现独占和共享两种方式.100 5.JAVA 基础基础.101 5.1.1.JAVA异常分类及处理.101 5.1.1.1.概念.101 5.1.1.2.异常分类.101 Error.101 Exception(RuntimeException、CheckedException).101 5.1.1.3.异常的处理方式.102 遇到问题不进行具体处理,而是继续抛给调用者(throw,throws).102 try catch 捕获异常针对性处理方式.102 5.1.1.4.Throw 和 throws 的区别:.102 13/04/2018 Page 6 of 283 位置不同.102 功能不同:.102 5.1.2.JAVA反射.103 5.1.2.1.动态语言.103 5.1.2.2.反射机制概念(运行状态中知道类所有的属性和方法).103 5.1.2.3.反射的应用场合.103 编译时类型和运行时类型.103 的编译时类型无法获取具体方法.104 5.1.2.4.Java 反射 API.104 反射 API 用来生成 JVM 中的类、接口或则对象的信息。.104 5.1.2.5.反射使用步骤(获取 Class 对象、调用对象方法).104 5.1.2.6.获取 Class 对象的 3 种方法.104 调用某个对象的 getClass()方法.104 调用某个类的 class 属性来获取该类对应的 Class 对象.104 使用 Class 类中的 forName()静态方法(最安全/性能最好).104 5.1.2.7.创建对象的两种方法.105 Class 对象的 newInstance().105 调用 Constructor 对象的 newInstance().105 5.1.3.JAVA注解.106 5.1.3.1.概念.106 5.1.3.2.4 种标准元注解.106 Target 修饰的对象范围.106 Retention 定义 被保留的时间长短.106 Documented 描述-javadoc.106 Inherited 阐述了某个被标注的类型是被继承的.106 5.1.3.3.注解处理器.107 5.1.4.JAVA内部类.109 5.1.4.1.静态内部类.109 5.1.4.2.成员内部类.110 5.1.4.3.局部内部类(定义在方法中的类).110 5.1.4.4.匿名内部类(要继承一个父类或者实现一个接口、直接使用 new 来生成一个对象的引用).111 5.1.5.JAVA泛型.112 5.1.5.1.泛型方法().112 5.1.5.2.泛型类.112 5.1.5.3.类型通配符?.113 5.1.5.4.类型擦除.113 5.1.6.JAVA序列化(创建可复用的Java对象).113 保存(持久化)对象及其状态到内存或者磁盘.113 序列化对象以字节数组保持-静态成员不保存.113 序列化用户远程对象传输.113 Serializable 实现序列化.113 ObjectOutputStream 和 ObjectInputStream 对对象进行序列化及反序列化.113 writeObject 和 readObject 自定义序列化策略.113 序列化 ID.113 序列化并不保存静态变量.114 序列化子父类说明.114 Transient 关键字阻止该变量被序列化到文件中.114 5.1.7.JAVA复制.114 5.1.7.1.直接赋值复制.114 5.1.7.2.浅复制(复制引用但不复制引用的对象).114 5.1.7.3.深复制(复制对象和其应用对象).115 5.1.7.4.序列化(深 clone 一中实现).115 6.SPRING 原理原理.116 6.1.1.Spring 特点.116 6.1.1.1.轻量级.116 13/04/2018 Page 7 of 283 6.1.1.2.控制反转.116 6.1.1.3.面向切面.116 6.1.1.4.容器.116 6.1.1.5.框架集合.116 6.1.2.Spring 核心组件.117 6.1.3.Spring 常用模块.117 6.1.4.Spring 主要包.118 6.1.5.Spring 常用注解.118 6.1.6.Spring 第三方结合.119 6.1.7.Spring IOC原理.120 6.1.7.1.概念.120 6.1.7.2.Spring 容器高层视图.120 6.1.7.3.IOC 容器实现.120 BeanFactory-框架基础设施.120 1.1.1.1.1 BeanDefinitionRegistry 注册表.121 1.1.1.1.2 BeanFactory 顶层接口.121 1.1.1.1.3 ListableBeanFactory.121 1.1.1.1.4 HierarchicalBeanFactory 父子级联.121 1.1.1.1.5 ConfigurableBeanFactory.121 1.1.1.1.6 AutowireCapableBeanFactory 自动装配.122 1.1.1.1.7 SingletonBeanRegistry 运行期间注册单例 Bean.122 1.1.1.1.8 依赖日志框框.122 ApplicationContext 面向开发应用.122 WebApplication 体系架构.123 6.1.7.4.Spring Bean 作用域.123 singleton:单例模式(多线程下不安全).123 prototype:原型模式每次使用时创建.124 Request:一次 request 一个实例.124 session.124 global Session.124 6.1.7.5.Spring Bean 生命周期.124 实例化.124 IOC 依赖注入.124 setBeanName 实现.124 BeanFactoryAware 实现.124 ApplicationContextAware 实现.125 postProcessBeforeInitialization 接口实现-初始化预处理.125 init-method.125 postProcessAfterInitialization.125 Destroy 过期自动清理阶段.125 destroy-method 自配置清理.125 6.1.7.6.Spring 依赖注入四种方式.126 构造器注入.126 setter 方法注入.127 静态工厂注入.127 实例工厂.127 6.1.7.7.5 种不同方式的自动装配.128 6.1.8.Spring APO原理.129 6.1.8.1.概念.129 6.1.8.2.AOP 核心概念.129 6.1.8.1.AOP 两种代理方式.130 JDK 动态接口代理.130 CGLib 动态代理.131 6.1.8.2.实现原理.131 6.1.9.Spring MVC原理.132 6.1.9.1.MVC 流程.132 Http 请求到 DispatcherServlet.133 HandlerMapping 寻找处理器.133 调用处理器 Controller.133 13/04/2018 Page 8 of 283 Controller 调用业务逻辑处理后,返回 ModelAndView.133 DispatcherServlet 查询 ModelAndView.133 ModelAndView 反馈浏览器 HTTP.133 6.1.9.1.MVC 常用注解.133 6.1.10.Spring Boot原理.134 1.创建独立的 Spring 应用程序.134 2.嵌入的 Tomcat,无需部署 WAR 文件.134 3.简化 Maven 配置.134 4.自动配置 Spring.134 5.提供生产就绪型功能,如指标,健康检查和外部配置.134 6.绝对没有代码生成和对 XML 没有要求配置 1.134 6.1.11.JPA原理.134 6.1.11.1.事务.134 6.1.11.2.本地事务.134 6.1.11.1.分布式事务.135 6.1.11.1.两阶段提交.136 1 准备阶段.136 2 提交阶段:.136 6.1.12.Mybatis缓存.137 6.1.12.1.Mybatis 的一级缓存原理(sqlsession 级别).138 6.1.12.2.二级缓存原理(mapper 基本).138 具体使用需要配置:.139 6.1.13.Tomcat架构.139 7.微服务微服务.140 7.1.1.服务注册发现.140 7.1.1.1.客户端注册(zookeeper).140 7.1.1.2.第三方注册(独立的服务 Registrar).140 7.1.1.3.客户端发现.141 7.1.1.4.服务端发现.142 7.1.1.5.Consul.142 7.1.1.6.Eureka.142 7.1.1.7.SmartStack.142 7.1.1.8.Etcd.142 7.1.2.API 网关.142 7.1.2.1.请求转发.143 7.1.2.2.响应合并.143 7.1.2.3.协议转换.143 7.1.2.4.数据转换.143 7.1.2.5.安全认证.144 7.1.3.配置中心.144 7.1.3.1.zookeeper 配置中心.144 7.1.3.2.配置中心数据分类.144 7.1.4.事件调度(kafka).144 7.1.5.服务跟踪(starter-sleuth).144 7.1.6.服务熔断(Hystrix).145 7.1.6.1.Hystrix 断路器机制.146 7.1.7.API管理.146 8.NETTY 与与 RPC.147 8.1.1.Netty 原理.147 8.1.2.Netty 高性能.147 8.1.2.1.多路复用通讯方式.147 8.1.2.1.异步通讯 NIO.148 8.1.2.2.零拷贝(DIRECT BUFFERS 使用堆外直接内存).149 8.1.2.3.内存池(基于内存池的缓冲区重用机制).149 8.1.2.4.高效的 Reactor 线程模型.149 Reactor 单线程模型.149 Reactor 多线程模型.150 13/04/2018 Page 9 of 283 主从 Reactor 多线程模型.150 8.1.2.5.无锁设计、线程绑定.151 8.1.2.6.高性能的序列化框架.151 小包封大包,防止网络阻塞.152 软中断 Hash 值和 CPU 绑定.152 8.1.3.Netty RPC实现.152 8.1.3.1.概念.152 8.1.3.2.关键技术.152 8.1.3.3.核心流程.152 8.1.3.1.消息编解码.153 息数据结构(接口名称+方法名+参数类型和参数值+超时时间+requestID).153 序列化.154 8.1.3.1.通讯过程.154 核心问题(线程暂停、消息乱序).154 通讯流程.154 requestID 生成-AtomicLong.154 存放回调对象 callback 到全局 ConcurrentHashMap.154 synchronized 获取回调对象 callback 的锁并自旋 wait.154 监听消息的线程收到消息,找到 callback 上的锁并唤醒.155 8.1.4.RMI实现方式.155 8.1.4.1.实现步骤.155 8.1.5.Protoclol Buffer.156 8.1.5.1.特点.157 8.1.6.Thrift.157 9.网络网络.159 9.1.1.网络7层架构.159 9.1.2.TCP/IP原理.160 9.1.2.1.网络访问层(Network Access Layer).160 9.1.2.2.网络层(Internet Layer).160 9.1.2.3.传输层(Tramsport Layer-TCP/UDP).160 9.1.2.4.应用层(Application Layer).160 9.1.3.TCP三次握手/四次挥手.161 9.1.3.1.数据包说明.161 9.1.3.2.三次握手.162 9.1.3.3.四次挥手.163 9.1.4.HTTP原理.164 9.1.4.1.传输流程.164 1:地址解析.164 2:封装 HTTP 请求数据包.165 3:封装成 TCP 包并建立连接.165 4:客户机发送请求命.165 5:服务器响应.165 6:服务器关闭 TCP 连接.165 9.1.4.2.HTTP 状态.165 9.1.4.3.HTTPS.166 建立连接获取证书.167 证书验证.167 数据加密和传输.167 9.1.5.CDN 原理.167 9.1.5.1.分发服务系统.167 9.1.5.2.负载均衡系统:.168 9.1.5.3.管理系统:.168 10.日志日志.169 10.1.1.Slf4j.169 10.1.2.Log4j.169 10.1.3.LogBack.169 10.1.3.1.Logback 优点.169 10.1.4.ELK.170 13/04/2018 Page 10 of 283 11.ZOOKEEPER.171 11.1.1.Zookeeper概念.171 11.1.1.Zookeeper角色.171 11.1.1.1.Leader.171 11.1.1.2.Follower.171 11.1.1.3.Observer.171 11.1.1.1.ZAB 协议.172 事务编号 Zxid(事务请求计数器+epoch).172 epoch.172 Zab 协议有两种模式-恢复模式(选主)、广播模式(同步).172 ZAB 协议 4 阶段.172 Leader election(选举阶段-选出准 Leader).172 Discovery(发现阶段-接受提议、生成 epoch、接受 epoch).173 Synchronization(同步阶段-同步 follower 副本).173 Broadcast(广播阶段-leader 消息广播).173 ZAB 协议 JAVA 实现(FLE-发现阶段和同步合并为 Recovery Phase(恢复阶段).173 11.1.1.2.投票机制.173 11.1.2.Zookeeper工作原理(原子广播).174 11.1.3.Znode有四种形式的目录节点.174 12.KAFKA.175 12.1.1.Kafka概念.175 12.1.2.Kafka数据存储设计.175 12.1.2.1.partition 的数据文件(offset,MessageSize,data).175 12.1.2.2.数据文件分段 segment(顺序读写、分段命令、二分查找).176 12.1.2.3.数据文件索引(分段索引、稀疏存储).176 12.1.3.生产者设计.176 12.1.3.1.负载均衡(partition 会均衡分布到不同 broker 上).176 12.1.3.2.批量发送.177 12.1.3.3.压缩(GZIP 或 Snappy).177 12.1.1.消费者设计.177 12.1.1.1.Consumer Group.178 13.RABBITMQ.179 13.1.1.概念.179 13.1.2.RabbitMQ架构.179 13.1.2.1.Message.180 13.1.2.2.Publisher.180 13.1.2.3.Exchange(将消息路由给队列).180 13.1.2.4.Binding(消息队列和交换器之间的关联).180 13.1.2.5.Queue.180 13.1.2.6.Connection.180 13.1.2.7.Channel.180 13.1.2.8.Consumer.180 13.1.2.9.Virtual Host.180 13.1.2.10.Broker.181 13.1.3.Exchange 类型.181 13.1.3.1.Direct 键(routing key)分布:.181 13.1.3.2.Fanout(广播分发).181 13.1.3.3.topic 交换器(模式匹配).182 13/04/2018 Page 11 of 283 14.HBASE.183 14.1.1.概念.183 14.1.2.列式存储.183 14.1.3.Hbase核心概念.184 14.1.3.1.Column Family 列族.184 14.1.3.2.Rowkey(Rowkey 查询,Rowkey 范围扫描,全表扫描).184 14.1.3.3.Region 分区.184 14.1.3.4.TimeStamp 多版本.184 14.1.4.Hbase核心架构.184 14.1.4.1.Client:.185 14.1.4.2.Zookeeper:.185 14.1.4.3.Hmaster.185 14.1.4.4.HregionServer.185 14.1.4.5.Region 寻址方式(通过 zookeeper.META).186 14.1.4.6.HDFS.186 14.1.5.Hbase的写逻辑.187 14.1.5.1.Hbase 的写入流程.187 获取 RegionServer.187 请求写 Hlog.187 请求写 MemStore.187 14.1.5.2.MemStore 刷盘.187 全局内存控制.188 MemStore 达到上限.188 RegionServer 的 Hlog 数量达到上限.188 手工触发.188 关闭 RegionServer 触发.188 Region 使用 HLOG 恢复完数据后触发.188 14.1.6.HBase vs Cassandra.188 15.MONGODB.190 15.1.1.概念.190 15.1.2.特点.190 16.CASSANDRA.192 16.1.1.概念.192 16.1.2.数据模型.192 Key Space(对应 SQL 数据库中的 database).192 Key(对应 SQL 数据库中的主键).192 column(对应 SQL 数据库中的列).192 super column(SQL 数据库不支持).192 Standard Column Family(相对应 SQL 数据库中的 table).192 Super Column Family(SQL 数据库不支持).192 16.1.3.Cassandra一致Hash和虚拟节点.192 一致性 Hash(多米诺 down 机).192 虚拟节点(down 机多节点托管).193 16.1.4.Gossip协议.193 Gossip 节点的通信方式及收敛性.194 Gossip 两个节点(A、B)之间存在三种通信方式(push、pull、push&pull).194 gossip 的协议和 seed list(防止集群分列).194 16.1.5.数据复制.194 Partitioners(计算 primary key token 的 hash 函数).194 两种可用的复制策略:.194 SimpleStrategy:仅用于单数据中心,.194 将第一个 replica 放在由 partitioner 确定的节点中,其余的 replicas 放在上述节点顺时针方向的后续节点中。.194 13/04/2018 Page 12 of 283 NetworkTopologyStrategy:可用于较复杂的多数据中心。.194 可以指定在每个数据中心分别存储多少份 replicas。.194 16.1.6.数据写请求和协调者.195 协调者(coordinator).195 16.1.7.数据读请求和后台修复.195 16.1.8.数据存储(CommitLog、MemTable、SSTable).196 SSTable 文件构成(BloomFilter、index、data、static).196 16.1.9.二级索引(对要索引的value摘要,生成RowKey).196 16.1.10.数据读写.197 数据写入和更新(数据追加).197 数据的写和删除效率极高.197 错误恢复简单.197 读的复杂度高.197 数据删除(column 的墓碑).197 墓碑.198 垃圾回收 compaction.198 数据读取(memtable+SStables).198 行缓存和键缓存请求流程图.199 Row Cache(SSTables 中频繁被访问的数据).199 Bloom Filter(查找数据可能对应的 SSTable).200 Partition Key Cache(查找数据可能对应的 Partition key).200 Partition Summary(内存中存储一些 partition index 的样本).200 Partition Index(磁盘中).200 Compression offset map(磁盘中).200 17.设计模式设计模式.201 17.1.1.设计原则.201 17.1.2.工厂方法模式.201 17.1.3.抽象工厂模式.201 17.1.4.单例模式.201 17.1.5.建造者模式.201 17.1.6.原型模式.201 17.1.7.适配器模式.201 17.1.8.装饰器模式.201 17.1.9.代理模式.201 17.1.10.外观模式.201 17.1.11.桥接模式.201 17.1.12.组合模式.201 17.1.13.享元模式.201 17.1.14.策略模式.201 17.1.15.模板方法模式.201 17.1.16.观察者模式.201 17.1.17.迭代子模式.201 17
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 考试专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服