diff --git a/flink/TableAPI.md b/flink/TableAPI.md new file mode 100644 index 0000000..081df08 --- /dev/null +++ b/flink/TableAPI.md @@ -0,0 +1 @@ +UDF自定义函数 \ No newline at end of file diff --git a/flink/checkpoint.md b/flink/checkpoint.md new file mode 100644 index 0000000..7e5c492 --- /dev/null +++ b/flink/checkpoint.md @@ -0,0 +1,18 @@ +## checkpoint + +分布式快照,应对失败后重新开始 + +1. 批计算是否需要checkpoint?否 +2. 流计算 + 1. 任务7*24小时运行,重启能够无缝重启 + 2. exactly-once 恰好一次,at-most-once至多一次 +3. source读取来的数据,必须让整个链路执行成功处理完成才会将state持久化到外部存储(checkpoint) + 1. source数据源必须支持再次消费 + 2. 必须等到所有的算子处理完才checkpoint,否则at-most-once +4. 吞吐量不高,battier(广播分发)栅栏,按批次checkpoint,可能引起重复数据落盘 + 1. 幂等处理id + 2. checkpoint和mysql事物结合在一起 + 3. source允许再消费,sink幂等或者事务 +5. 失败后恢复checkpoint快照. +6. savepoint->手动checkpoint +7. 设置uid,方便代码升级s \ No newline at end of file diff --git a/flink/flink.md b/flink/flink.md new file mode 100644 index 0000000..50e0c83 --- /dev/null +++ b/flink/flink.md @@ -0,0 +1,257 @@ +## Hadoop生态圈 + +### Yarn资源调度 + +MR on Yarn + +Storm on Yarn + +Spark on Yarn + +Flink on Yarn + +### HDFS + +### MR + +分而治之 + +## Lambda架构 + +离线计算 MapReduce,Hive: + +实时计算 + +## Apache Spark + +生态圈完善 + +Spark core 批计算 取代MR, + +1. 预先申请资源Spark申请资源的粗粒度的资源申请,启动任务速度快,task完毕executor 不会立即释放.MR细粒度资源申请,执行完毕后立即释放. + +2. Spark基于内存计算cache persisit内存计算pipline,RDD存储逻辑,partion + +Spark streaming 流计算 取代storm + +1. 微批 +2. 无状态,batch +3. 有状态计算updateStateByKey(checkpoint),flink +4. 无界有界,window窗口和水位线处理顺序问题 + +spark sql sql + +Spark mlib 机器学习 + +批处理只是流数据的一个极限特例而已. + +## Flink + +1. 支持高吞吐,低延迟,高性能\ +2. 支持时间时间(Event Time)概念,结合WaterMark处理乱序数据. + 1. spark基于系统时间,数据到系统的时间, + 2. flink基于用户带来的时间 +3. 支持有状态计算,并且支持多种状态 内存,文件,RocksDB +4. 支持高度灵活的窗口,time,count,session +5. 基于轻量级分布式快照(CheckPoint)实现容错保证exactly-once语义 +6. 基于JVM实现独立内存管理 +7. Save points 保存点,方便代码升级 + +## Flink与Spark对比 + +### spark + +pipline + +spark与MR速度原因 + +有界与无界流 + +集群 + +1. master,管理集群中所有Worker进而管理了集群资源 +2. worker管理各个节点上的资源mem core + 1. WORKER_MEMORY + 2. WORKER_CORE +3. Driver任务调度 +4. Executor执行task + +### Flink集群 + +1. JobManager(JVM进程)master + 1. 资源调度 + 2. 任务调度,触发集群进行checkpoint, +2. TaskManager(JVM进程)slaver + 1. TaskManager向JobManager注册资源 + 2. TackManager中资源使用Task slot进行隔离,隔离内存无法隔离核. + 3. TaskManager 3G 3Core + 4. 设置3个task slot 平分TaskManager + 5. task slot 一组固定资源 + +## 开发 + +1. 准备环境,创建/获取 +2. 数据处理逻辑 +3. 启动Flink任务 + +## 提交集群 + +1. Yarn-Session + 1. 提交前,需要yarn去启动一个flink集群(yarn-session) + 2. 启动成功后,通过flink run 这个命令去往flink集群中提交任务 + 3. 当job执行完毕,yarn-session集群并不会关闭,等待下一个job提交,一直占用集群资源(JobManager),好处job启动时间变短 +2. Run a flink job on yarn + 1. 直接去yarn中提交一个flink job,在job执行之前,先去启动一个flink集群,集群启动成功,job在执行,当job执行完毕,flink集群一同关闭,释放资源 + 2. 每个job执行完,集群关闭,但是每个job启动时间变长. + +### 搭建高可用集群 + +flink JobManager元数据checkpoint,数据存储,hadoop插件. + +### JobManager分担压力Flink on yarn + +1. jobManager任务管理,yarn资源管理.分担jobManager压力 +2. 降低维护成本yarn + +### 运行流程 + +RM,NM,yarn运行需要hdfs + +1. 上传jar及配置文件 +2. 为applicationMaster申请资源 +3. 分配node资源,启动applicationmaster,下载jar及配置文件 +4. applicationMaster为taskmanager申请资源 +5. yarn分配node并启动TaskManager +6. 分配任务taskManager中运行 +7. taskManager下载文件. + +## HA + +1. 主备 +2. 重启 + +## 算子并行度 + +1. 配置文件中设置 +2. 提交job的时候,通过-p选项来设置 +3. 代码中设置parallelism +4. 算子上设置 + +## 任务调度算子链 + + 本地化级别:PROCESS_LOCAL + +1. 不同的Task下的subtask要分发到相同的TaskSlot中.降低数据传输,提高执行效率.尽可能实现算子链 +2. 相同的Task下的subtask要分发到不同的TaskSlot中充分利用集群资源. +3. TaskSlot个数决定了job未来执行的并行度,job数不能大于TaskSlot数. + +### 算子->函数 + +1. Stateful Stream Processing=========Low-level building block (streams,state[event]time) +2. DataStream/DataSetApi============Core Api +3. Table Api========================Declaretive DSL +4. sql=============================High-level Language + +### flatMap代替filter + +map,flat(扁平) + +union 数据流何工,数据流中的数据必须一致. + +connect假合并,数据流中数据可以不一样,comap + +split 可以根据一定的条件拆分数据流. + +side out + +## 卡口数据 + +相同key的数据一定是由某一个subtask处理,一个subtask可能会处理多个key所对应的数据. + +### 统计每分钟卡口流量 + +时间映射成分钟字段,直接count + +每分钟每个卡口,组合key + +富函数可获取上下文及生命周期. + +process底层api + +广播流 + +## 分区策略 + +1. shuffle==================增大分区,数据倾斜,增加并行度使用 +2. rebalance================增大分区,数据倾斜,增加并行度使用 +3. rescale==================减少分区,防止大量网络传输,降低并行度. +4. broadcast================广播,大量数据冗余,映射表 +5. Forward=================上游分区与下游分区一一对应的分发,窄依赖 +6. global===================上游中所有数据分发到下游中第一个分区中. +7. keyby===================可以根据用户指定的字段来分发 +8. partiooncustom===========自定义分区策略 + +DataFlow + +1. source +2. transformation +3. sink + +## 恰好一次 + +幂等处理 + +## Flink State + +会持久化到远端 + +1. Keyed State + 1. value state + 2. list state + 3. map state + 4. ReducingState + 5. AggregationState替代FoldingState +2. No-Keyed State(Operator State) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flink/窗口.md b/flink/窗口.md new file mode 100644 index 0000000..85a19cb --- /dev/null +++ b/flink/窗口.md @@ -0,0 +1,65 @@ +## 窗口 + +1. flink中窗口就是将无界流变为有界流 +2. 支持基于时间分流未分流和元素个数 + +## 12种窗口 + +触发计算上一个窗口的数据 + +新窗口接收数据 + +### 滚动窗口 + +### 滑动窗口 + +### session窗口 + + + + ### 增量聚和函数 + +reduce + +aggregate + +### 全量聚和函数(排序) + +process + +### Flink中支持三种时间语义 + +1. Process Time 当前元素进入窗口的系统时间(算子处理时间),默认时间语义 +2. Event Time 事件时间,当前元素在数据源中产生的时间(数据自定义时间) +3. Ingestion time 摄取时间,元素进入flink source 的系统时间(元素进入source时间) + +### 左闭右开 + +### 打水印 + +1. 周期性生成水印 +2. 间歇性生成水印 + +### 添加水印后,只有水印能触发计算 + +1. window 触发 watermark>=window end +2. window触发 eventime>=window end + +## AllowedLateness + +延时多长时间能够再次执行上次窗口. + +CacheFile + +定时器定时拉取文件 + +readfile + +MateStateDescription 管理员在修改配置文件的时候,需要将更改的信息同步值kafka配置到topic中,然后将kafka的配置流信息变成广播流,广播到业务流的各个线程中. + + + + + + + diff --git a/jvm/JVM垃圾收集器深入解析5-6.md b/jvm/JVM垃圾收集器深入解析5-6.md new file mode 100644 index 0000000..e69de29 diff --git a/jvm/jvm调优之深入理解jvm底层原理1.18.md b/jvm/jvm调优之深入理解jvm底层原理1.18.md new file mode 100644 index 0000000..e8ab088 --- /dev/null +++ b/jvm/jvm调优之深入理解jvm底层原理1.18.md @@ -0,0 +1,51 @@ +方法区:类 + +堆:对象 + +## 装载: + +class文件->字节流->类加载器(代码模块) 自定义类加载器 字节码增强 java agent + +将一个字节流代表的静态存储结构转化成方法区运行时数据结构 + +在java堆中生成一个代表这个类的java.lang.Class对象,作为方法区 的数据访问入口 + +## 链接 + +### 验证 + +文件格式验证,class文件,jvm版本 + +元数据验证,对于java语法的验证 + +字节码验证,数据流和控制流验证,运行时检查,栈数据类型和操作码 + +符号引用验证,将符号引用转为直接引用.(链接) + +### 准备 + +常量赋值 + +### 解析 + +从运行时常量池中的符号引用动态确定具体值的过程(符号引用->直接引用). + +对解析的结果进行缓存. + +## 初始化 + +执行类构造器方法的过程. + +声明类变量为定制的初始化值 + +使用静态代码块为类变量赋值 + +## 对象几种状态 + +1. 创建阶段 +2. 应用阶段 +3. 不可见阶段 +4. 不可达阶段 +5. 收集阶段 +6. 终结阶段 +7. 空间重分配阶段 \ No newline at end of file diff --git a/jvm/垃圾收集算法.md b/jvm/垃圾收集算法.md new file mode 100644 index 0000000..cdaff96 --- /dev/null +++ b/jvm/垃圾收集算法.md @@ -0,0 +1,45 @@ +## 垃圾收集算法 + +### 标记清除算法 + +首次适应算法,最佳适应算法,最差适应算法,邻近算法 + +### 标记复制算法 + +两个相同大小 + +空间利用率低 + +### 标记-清除-整理(压缩)算法 + +随机整理, + +线性整理, + +滑动整理 + + + +双指针,头尾对撞强依赖对象大小相同.第一次移动位置不更新标记,第二次更新标记 + +## 分代回收三大假说 + +### 弱代带假说 + +绝大多数对象朝生夕死 + +### 强分代假说 + +活得越久的对象,也就是熬过很多次垃圾回收的对象是越来越难以消亡的 + +### 跨代引用假说 + +部分收集:不是完整的收集整个垃圾区域,而是只回收想要的一部分 + +新生代收集 + +老年代收集 + +Mixed GC:回收整个新生代,以及部分老年代的一种回收方式. + +记忆集 \ No newline at end of file diff --git a/jvm/类加载特性.md b/jvm/类加载特性.md new file mode 100644 index 0000000..8c34daf --- /dev/null +++ b/jvm/类加载特性.md @@ -0,0 +1,36 @@ +# 类加载特性 + +### 类加载器 + +1. 负责读取java字节代码,并转换成java.long.class类的一个实例的代码模块 +2. 类加载器除了用于加载类外,还可以用于确定类在java虚拟机中的唯一性. + +全盘委托 + +父类委托 + +### 打破双亲委派 + +自定义类加载器 + +SPI(servie provider interface) + +OSGI + +### 运行时数据区 + +1. 程序计数器 +2. 栈 + 1. 局部变量表 + 2. 操作数栈 + 3. 动态链接,将符号方法引用变为具体方法引用 + 4. 返回地址 + 5. 附加信息 +3. 堆 +4. 方法区 +5. 运行时常量池 +6. 本地方法栈 + +### 常量池 + +静态常量池,运行时常量池,字符串常量池 \ No newline at end of file diff --git a/算法/learn/体系/10.排序总结、链表相关面试题.md b/算法/learn/体系/10.排序总结、链表相关面试题.md new file mode 100644 index 0000000..4db45b3 --- /dev/null +++ b/算法/learn/体系/10.排序总结、链表相关面试题.md @@ -0,0 +1,8 @@ + 快慢指针. + +回文 + +面试 + 1. 链表遍历与弹栈. +笔试 +2. 修改右边指针往回指,分别从左右 开始遍历查看是否相同. \ No newline at end of file diff --git a/算法/learn/体系/11.二叉树基本算法(上).md b/算法/learn/体系/11.二叉树基本算法(上).md new file mode 100644 index 0000000..54058fd --- /dev/null +++ b/算法/learn/体系/11.二叉树基本算法(上).md @@ -0,0 +1,8 @@ +单链表环问题. + ## 二叉树 + ### 先序 + 头左右 + ### 中序 + 左头右 + ### 后续 + 左右头 \ No newline at end of file diff --git a/算法/learn/体系/12.二叉树基本算法(下).md b/算法/learn/体系/12.二叉树基本算法(下).md new file mode 100644 index 0000000..5fac575 --- /dev/null +++ b/算法/learn/体系/12.二叉树基本算法(下).md @@ -0,0 +1,9 @@ +## 用队列栈实现宽度优先遍历 +1. 队列弹出一个car并打印 +2. car有左入左,有右入右. +## 用栈实现深度优先遍历. +1. 栈中弹出一个car并打印. +2. 有右入右,有做入左. + + + \ No newline at end of file diff --git a/算法/learn/体系/13.二叉树的基本算法+二叉树的递归套路.md b/算法/learn/体系/13.二叉树的基本算法+二叉树的递归套路.md new file mode 100644 index 0000000..9a160d5 --- /dev/null +++ b/算法/learn/体系/13.二叉树的基本算法+二叉树的递归套路.md @@ -0,0 +1,14 @@ +从一个节点开始,叶子节点都要,称作子树,否则称作拓扑. + +### 二叉树递归套路 +1. 假设以x节点为头,假设可以向x左树和x右树要任何信息 +2. 在上一步的假设下,讨论以x为头节点的数,得到答案的可能性 +3. 列出所有可能性后,确定到底需要向左树和右树要什么样的信息 +4. 把左树信息和右树信息求全集,就是任何一颗子树都需要返回的信息S +5. 递归函数返回S,每一颗子树都这么要求 +6. 写代码,在代码中考虑如何把左树信息和右树信息整合出整课数的信息 + + + +1. 思想边界提醒 +2. 代码模板化 \ No newline at end of file diff --git a/算法/learn/体系/14.贪心算法(上).md b/算法/learn/体系/14.贪心算法(上).md new file mode 100644 index 0000000..3b56df3 --- /dev/null +++ b/算法/learn/体系/14.贪心算法(上).md @@ -0,0 +1,2 @@ +理清楚问题,在做..declare问题. + \ No newline at end of file diff --git a/算法/learn/体系/15.贪心算法(下).md b/算法/learn/体系/15.贪心算法(下).md new file mode 100644 index 0000000..e69de29 diff --git a/算法/learn/体系/16.并查集及其相关题目.md b/算法/learn/体系/16.并查集及其相关题目.md new file mode 100644 index 0000000..b774468 --- /dev/null +++ b/算法/learn/体系/16.并查集及其相关题目.md @@ -0,0 +1,5 @@ + 并查集:两个是否是同一个,两个联合。 + 往上到不能再往上,找父类. + 并查集扫雷,感染并查集。 + + 先写整体逻辑后分开写各各子实现。 \ No newline at end of file diff --git a/算法/learn/体系/17.图.md b/算法/learn/体系/17.图.md new file mode 100644 index 0000000..e69de29 diff --git a/算法/learn/体系/18.认识一些经典递归过程.md b/算法/learn/体系/18.认识一些经典递归过程.md new file mode 100644 index 0000000..52b598a --- /dev/null +++ b/算法/learn/体系/18.认识一些经典递归过程.md @@ -0,0 +1,7 @@ +### 暴力递归 +1. 把问题转换为规模缩小了的同类问题的子问题. +2. 有明确的不需要继续进行递归的条件 +3. 有当得到了子问题的结果之后的决策过程 +4. 不记录每一个子问题的解. + +恢复现场 \ No newline at end of file diff --git a/算法/learn/体系/19.暴力递归到动态规划(一).md b/算法/learn/体系/19.暴力递归到动态规划(一).md new file mode 100644 index 0000000..2ccb7a0 --- /dev/null +++ b/算法/learn/体系/19.暴力递归到动态规划(一).md @@ -0,0 +1,3 @@ +记忆化搜索 +尝试策略,状态转移 +1:28 \ No newline at end of file diff --git a/算法/learn/体系/8.加强堆.md b/算法/learn/体系/8.加强堆.md new file mode 100644 index 0000000..9441f7f --- /dev/null +++ b/算法/learn/体系/8.加强堆.md @@ -0,0 +1,2 @@ +重复线段问题. +1. 取.5判断多少线段包含. \ No newline at end of file diff --git a/算法/learn/体系/9.前缀树、不基于比较的排序、排序稳定性.md b/算法/learn/体系/9.前缀树、不基于比较的排序、排序稳定性.md new file mode 100644 index 0000000..602466b --- /dev/null +++ b/算法/learn/体系/9.前缀树、不基于比较的排序、排序稳定性.md @@ -0,0 +1,3 @@ + 前缀数:记录字符串出现频率.pass,end + 桶排序 + 基数排序,按照个十百钱位 排序 \ No newline at end of file diff --git a/算法/learn/体系/img/二叉树排序.png b/算法/learn/体系/img/二叉树排序.png new file mode 100644 index 0000000..95ef543 Binary files /dev/null and b/算法/learn/体系/img/二叉树排序.png differ diff --git a/算法/learn/体系/img/人员能力.png b/算法/learn/体系/img/人员能力.png new file mode 100644 index 0000000..5625f47 Binary files /dev/null and b/算法/learn/体系/img/人员能力.png differ diff --git a/算法/learn/体系/img/排序算法总结.png b/算法/learn/体系/img/排序算法总结.png new file mode 100644 index 0000000..778bfe0 Binary files /dev/null and b/算法/learn/体系/img/排序算法总结.png differ diff --git a/算法/learn/体系/堆和堆排序.md b/算法/learn/体系/堆和堆排序.md new file mode 100644 index 0000000..34c1ae6 --- /dev/null +++ b/算法/learn/体系/堆和堆排序.md @@ -0,0 +1,10 @@ +比较器返回为负数,第一个在前. +左节点2*i+1 +右节点2*i+2 +父节点(i-1)/2 +## 堆 +完全二叉树. + +PriorityQueue默认小根堆 + + \ No newline at end of file diff --git a/算法/learn/体系/快排.md b/算法/learn/体系/快排.md new file mode 100644 index 0000000..5980ab3 --- /dev/null +++ b/算法/learn/体系/快排.md @@ -0,0 +1 @@ +指针指向及移动. \ No newline at end of file