- 博客(88)
- 收藏
- 关注
原创 面试常见算法汇总-链表
一、链表中的加法题1、逆序两数相加,如 1->2->3 1->2->3 321+321=642 输出链表2->4->6public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode head = new ListNode(0); ListNode node = head; //商 int div = 0;
2021-02-10 01:12:26
1011
原创 spring源码编译Idea版带依赖减少编译时间
一、https://blog.csdn.net/ganquanzhong/article/details/100401914?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.contro
2021-01-29 14:32:10
1124
原创 二叉树最大深度
求二叉树的最大深度递归实现public int maxDepth(TreeNode root) { if (root == null) { return 0; } else { int leftHeight = maxDepth(root.left); int rightHeight = maxDepth(root.right); return Math.max(leftHei
2021-01-17 16:41:22
945
原创 二叉树层序遍历
例:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7],返回其层序遍历结果:[[3],[9,20],[15,7]]一、广度优先bfs实现public List<List<Integer>> levelOrder2(TreeNode root) { List<List<Integer>> res = new ArrayList
2021-01-17 16:31:18
974
原创 回溯算法
一、子集问题(没有重复元素)给你一个整数数组 nums ,返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。示例 :输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> res = new ArrayList<&g
2021-01-17 00:34:42
854
原创 kafka入门详解及api使用
windows下zk和kafka环境搭建下载zk下载:https://zookeeper.apache.org/releases.htmlkafka下载:https://kafka.apache.org/downloadszookeeper windows闪退,修改配置文件zoo_sample.cfg改为zoo.cfg或者修改zkEnv.cmd配置文件改为zoo_sample.cfgkafka windows安装闪退,修改文件kafka-server-start.bat修改内存为256M,启动需要
2020-07-10 18:53:47
2747
原创 elasticsearch和kibana windows下载安装
前提安装jdk8并配置好环境变量es官网:https://www.elastic.co/cn/products/elasticsearch下载zip包解压,在config配置文件elasticsearch.yml中添加xpack.ml.enabled: false;jvm.options中修改-Xms512m,-Xmx512m(自己笔记本测试所以调小了一些默认是1G)运行bin下的elasticsearch.bat访问http://127.0.0.1:9200kibana安装安装node下载
2020-05-25 18:35:04
1066
原创 logback基本配置备忘
logback基本配置如果使用的是springboot,默认是带有logback依赖的,在resource下直接添加配置文件 logback-spring.xml如果是spring需要自己引入依赖,配置文件为logback.xml: <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-c
2020-05-20 22:58:17
864
原创 spark并行度设置及submit参数
–spark submit–num-executors该参数主要用于设置该应用总共需要多少executors来执行,Driver在向集群资源管理器申请资源时需要根据此参数决定分配的Executor个数,并尽量满足所需。在不带的情况下只会分配少量Executor。这个值得设置还是要看分配的队列的资源情况,太少了无法充分利用集群资源,太多了则难以分配需要的资源。–executor-memory...
2020-04-10 21:12:06
6579
原创 spark与Flink对比
批流理念不同spark准确的说是批处理,Spark streaming是微批处理,spark底层都依赖于RDDflink是流式处理,批处理看做是有限的流处理SQLsparksql支持的更好flink一般,在完善中机器学习图计算等spark有mllib和graphx等模块flink比较薄弱任务spark,driver管理,Executor执行,通过RDD分区数和shuffle划分...
2020-04-07 01:16:47
2909
原创 Flink(一)Flink基础及常用参数
目录1、Flink是什么2、Flink的特性、优点2.1、流式模型,高吞吐、低延时2.2、丰富的时间语义,支持 Event Time2.3、良好的乱序数据处理能力2.4、高度灵活的窗口2.5、exactly-once 语义2.6、带反压的连续流模型3、标题1、Flink是什么Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据...
2020-04-06 23:50:07
1445
原创 spark(六)序列化及多线程问题
一、序列化我们这里不讨论什么是序列化以及序列化有什么作用、序列化方式等问题。此处我们只讨论spark程序开发中序列化的一些问题我们都知道spark程序实际计算时是在Executor上执行,因此Driver端的对象如果Executor要使用的话需要通过网络传输,因此对象一定要实现序列化接口,否则单机测试可能没问题,但是放到集群上就报序列化错误。无论是直接使用,或通过广播发送,对象都要序列化。...
2020-04-05 22:58:02
1294
原创 spark(五)执行流程与stage划分
一、任务流程我们以生产中常用的yarn环境为例提交任务到yarnyarn申请分配资源根据RDD流程构建DAG(有向无环图)DAGsheduler将dag划分及分解stage根据分解的stage生成不同的task将task提交到不同的Executor上执行执行完毕,释放资源二、shuffle大多数spark作业的性能主要就是消耗了shuffle过程,shuffle时数据会重新...
2020-04-05 17:55:10
1246
原创 spark(四)广播变量
一、广播变量在App中经常会用到List、MaP等变量。如果不适用广播变量,默认每个task都会拉取一份副本到本地。广播变量的好处,不是每个task一份变量副本,而是变成每个节点的executor才一份副本。这样的话,就可以让变量产生的副本大大减少。 广播变量,初始的时候,就在Drvier上有一份副本。 task在运行的时候,想要使用广播变量中的数据,此时首先会在自己本地的Executor对...
2020-04-05 02:10:01
1038
原创 spark(三)缓存与checkpoint
一、应用场景缓存:将rdd所需的数据缓存到Executor的内存中,主要用于空间换时间,如某个spark任务期望执行时间在xx以内,目前达不到,此时在内存充足的情况下可以查看是否有重复利用的rdd数据,可以对该数据进行cachecheckpoint:主要用于任务容错,比如机器学习进行迭代式计算,需要计算10小时才能出结果,如果在第9个小时任务出错,重新提交需要重新跑所有数据。可以在某些节点对...
2020-04-05 01:29:10
1158
原创 spark(二)创建RDD时默认分区数
一、概述Spark的分区数对于Spark性能调优很重要,如果分区数少,那么并行执行的task就少,比如分区数为1,即使你分配的Executor很多,而实际执行的Executor只有1个,如果数据量很大的话,那么任务执行的就很慢,因此熟悉各种情况下默认的分区数对于Spark调优就很有必要了,特别是执行完算子返回的结果分区数为1的情况,更需要特别注意。二、默认最小分区数:defaultMinPar...
2020-04-04 18:32:53
2616
原创 spark(一)spark中map与mapPartitions的区别
一、map与mapPartitions的区别在 Spark 性能调优中,经常会被建议尽量用 mappartition 操作去替代 map 操作。但是也不一定是每种业务场景都是如此,我们先来说一下两者的区别map 操作:对 RDD 中的每个元素进行操作(可以理解为遍历),比如使用一个function则需要执行该 function n 次,其中 n 为元素个数;执行 1 次 function 只...
2020-04-04 17:34:56
1704
原创 jdk环境变量
都配上,配少了后期可能会遇到一些问题JAVA_HOME=D:\soft\jdk\jdk8JRE_HOME=%JAVA_HOME%\jreCLASS_PATH=%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JRE_HOME%\libPATH=%PATH%;%JAVA_HOME%\bin;%JRE_HOME%\bin...
2020-03-05 21:13:00
840
原创 Flink之侧输出流和流的拆分
一、准备数据首先构建一个DataStreamcase class Sensor(id: String, timestamp: Long, temperature: Double)传感器样例类包含,传感器id、时间戳、温度构建Streamval env = StreamExecutionEnvironment.getExecutionEnvironment env.setParal...
2020-03-01 18:12:52
5768
原创 Flink之Trigger与Evictor
一、概述在Flink中,使用event-time模式时,默认提供的window有TumblingEventTimeWindows,SlidingEventTimeWindows,EventTimeSessionWindow等,其中这些是属于window operator中的一部分,称作 window assigner。window operator包含四个组件,除了 window assigne...
2020-03-01 17:34:04
5181
原创 Hive基本操作
一、概述Hive是建立在HDFS之上的数据仓库,所以Hive的数据全部存储在HDFS上。Hive的数据分为两部分,一部分是存在HDFS上的具体数据,一部分是描述这些具体数据的元数据信息,一般Hive的元数据存在MySQL上。Hive是类SQL语法的数据查询、计算、分析工具,执行引擎默认的是MapReduce,可以设置为Spark、Tez。Hive分内部表和外部表,外部表在建...
2020-02-29 16:37:31
285
原创 Hive之insert into与insert overwrite区别
两者都可以向 hive 表中插入数据,但 insert into 操作是以追加的方式向 hive 表尾部追加数据,而 insert overwrite 操作则是直接重写数据,即先删除 hive 表的数据,再执行写入操作。注意,如果 hive 表是分区表的话,insert overwrite 操作只会重写当前分区的数据,不会重写其他分区数据。insert overwrite table xxx p...
2020-02-29 11:58:53
1135
转载 十大经典排序算法(动图演示)
一、冒泡排序冒泡排序原理:(以升序分析)循环取相邻的两个数,比较大小,其中较大的数放到右边第一次循环后最右边的数就是最大的数,之后以此类推,就像水中气泡往上冒一样,每次都把最大的数放到末尾。循环次数:6+5+4+3+2+1public static void main(String[] args) { int[] arr = new int[]{89, 32, 55, 543...
2020-02-20 12:38:03
249
原创 堆排序与其在topN案例的应用
一、堆排序概述作为选择排序的改进版,堆排序可以把每一趟元素的比较结果保存下来,以便我们在选择最小/大元素时对已经比较过的元素做出相应的调整。堆排序是一种树形选择排序,在排序过程中可以把元素看成是一颗完全二叉树,每个节点都大(小)于它的两个子节点,当每个节点都大于等于它的两个子节点时,就称为大顶堆,也叫堆有序; 当每个节点都小于等于它的两个子节点时,就称为小顶堆。算法思想(以大顶堆为例):...
2020-02-19 22:26:35
657
原创 Flink之slot、并行度、graph优化
一、Flink概述Flink运行时主要角色有两个:JobManager和TaskManager。JobManager主要是负责接受客户端的job,调度job,协调checkpoint等。TaskManager执行具体的Task。TaskManager为了对资源进行隔离和增加允许的task数,引入了slot的概念,这个slot对资源的隔离仅仅是对内存进行隔离,策略是均分,比如taskmanag...
2020-02-18 19:38:47
2465
原创 Flink之背压
一、背压概述流处理系统需要能优雅地处理反压(backpressure)问题。反压通常产生于这样的场景:短时负载高峰导致系统接收数据的速率远高于它处理数据的速率。许多日常问题都会导致反压,例如,垃圾回收停顿可能会导致流入的数据快速堆积,或者遇到大促或秒杀活动导致流量陡增。反压如果不能得到正确的处理,可能会导致资源耗尽甚至系统崩溃。目前主流的流处理系统 Storm/JStorm/Spark Str...
2020-02-18 13:37:40
2809
3
原创 Flink之Window与窗口开始时间
一、滚动窗口(TumblingEventTimeWindows)// 引入滚动窗口val streamWindow = stream.window(TumblingEventTimeWindows.of(Time.seconds(10)))二、滑动窗口(SlidingEventTimeWindows)// 引入滑动窗口,窗口10s,没5s滑动一次val streamWindow = s...
2020-02-15 22:01:19
6274
3
原创 Flink之windows下,下载及打包运行任务
下载、运行前提下载并配置好jdk,scalaflink下载地址:https://flink.apache.org/downloads.html下载对应scala版本的资源,Apache Flink 1.9.2 for Scala 2.11 (asc, sha512)/conf/flink-conf.yaml里有一些Flink的基本配置信息,如,jobmanager、taskmanager的...
2020-02-10 23:39:29
1893
原创 Flink之CEP
一、CEP是什么Flink CEP(complex event processing复杂事件处理)是其实一个Flink库,跟机器学习库是一样的。它是为了更快,更及时的发现一些我们所关心的事情,而不是需要等待几天或则几个月相当长的时间,才发现问题。比如我们的银行卡被人盗刷,如果没有CEP,那么我们即使丢了银行卡,可能也不知道,等我们发现银行卡丢失后,再去挂失等,发现银行卡里已经没钱了。有了CEP,...
2020-02-07 11:49:47
262
原创 Flink之状态一致性
一、状态一致性分类最多一次(at most once)当故障发生,什么都不干,既不恢复丢失状态,也不重播丢失的数据。至少一次(at least once)所有事件都处理了,有的事件可能被处理多次精确一次(exactly once)所有事件仅仅被处理一次二、端到端的状态一致性(1)内部保证(checkpoint)(2)source端(可重设数据的读取位置)(3)sink端(从...
2020-02-01 21:44:25
782
原创 Flink之聚合、WindowFunction
一、WindowFunctionFlink提供了四种类型Window Function,其中有ReduceFunction、AggregateFunction、FlodFunction和ProcessWindowFunction。其中ReduceFunction、AggregateFunction、FlodFunction根据计算原理,属于增量聚合函数,而ProcessWindowFunctio...
2020-02-01 21:41:17
1375
原创 Flink之ProcessFunction API(底层API)
一、产生背景转换算子是无法访问事件的时间戳信息和水位线信息的。而这在一些应用场景下,极为重要。例如MapFunction这样的map转换算子就无法访问时间戳或者当前事件的事件时间。基于此,DataStream API提供了一系列的Low-Level转换算子。可以访问时间戳、watermark以及注册定时事件。还可以输出特定的一些事件,例如超时事件等。Process Function用来构建事件...
2020-02-01 18:32:26
611
原创 Flink之容错机制
一、Checkpoint,一致性检查点flink故障恢复机制的核心就是checkpoint有状态的流应用的一致性检查点,其实就是所有任务的状态,在某个时间点的一份快照,这个时间点是指所有任务都恰好处理完一个相同的输入数据的时候如上图所示:此应用有一个source task,消费一个递增数的流,如1,2,3等等。流中的数据被分区到一个奇数流,一个偶数流。在一个sum operator中,...
2020-01-31 00:19:21
1635
原创 Flink之watermark和allowedLateness区别
一、两者区别------写在最前面watermark和allowedLateness区别watermark 通过additional的时间戳来控制窗口激活的时间,主要是为了解决数据乱序到达的问题,allowedLateness 用来控制窗口的销毁时间,解决窗口触发后数据迟到后的问题。二、watermarkwatermark在Flink中也称为 水位线或水印,它为流式数据每隔一段时间打...
2020-01-28 23:09:31
3177
原创 分布式事务
一、概述面试时经常被问到分布式事务问题,今天我们就来谈一谈常见的分布式环境下的解决方案,大家重点理解文中提到的思想,案例并非真实案例只是为了举例说明基本原理。另外并没有什么方案和技术是最好的,要看自己的业务适合用什么方案来实现。常用的一般是后四种。常用的分布式事务解决方案:XA 方案TCC 方案本地消息表可靠消息最终一致性方案最大努力通知方案二、XA所谓的 XA 方案,即:两...
2020-01-12 20:31:37
2700
原创 Spring中@Transcation原理、注意事项
一、原理spring事务有两种实现方式,基于jdk动态代理实现、基于cglib实现。spring默认基于jdk动态代理,springboot貌似2.x以后默认是使用cglib,当然选择使用哪种方式都是可配置的。无论使用哪种方式其原理简单来说就是运行时动态生成代理类、加载该类、执行增强后的代理类的方法。jdk动态代理是基于接口生成接口的实现类,接口没有的方法或者private、protect...
2020-01-12 15:43:18
3021
1
原创 java强引用、软引用、弱引用、虚引用
一、概述从JDK1.2开始,就提供了四种类型的引用:强引用、软引用、弱引用和虚引用。Java中提供这四种引用类型主要有两个目的:第一是可以让程序员通过代码的方式决定某些对象的生命周期;第二是有利于JVM进行垃圾回收。二、强引用Object object = new Object(); 就是一个强引用,只有当gcroot不可达时,gc才会回收三、软引用软引用是用来描述一些有用但并不是...
2020-01-11 21:41:50
203
原创 java泛型
一、概述java使用类型擦除来实现泛型,类型擦除是指:Java编译器将源码编译成字节码的时候会将你在源码中声明的类型进行擦除比如:List list = new ArrayList<>();编译后:ArrayList list = new ArrayList();如果代码里在泛型是Integer类型的集合中添加字符创,编译期间就会报错,以此来保证代码类型的安全性。二、深入了...
2020-01-07 16:34:04
135
原创 elastic search(二)常用命令
ES的document核心元数据:_index,_type,_id,_source分片数一单指定就无法修改,mapping一但确定只能新增属性不能修改1.查看集群全部索引curl -XGET "http://192.168.137.201:9200/_cat/indices"返回结果health index pri rep docs.count docs.deleted ...
2019-12-08 22:48:51
439
原创 elastic search(一)概述
一、分段存储elastic search以下统称es底层使用Lucene,lucene使用基于倒排索引和分段(segment)存储的方式完成数据索引。将一个索引文件分成了许多子文件,每个子文件就叫做段(索引中最小存储单元),段具有不变性,一旦索引数据被写入到硬盘就不可再修改1.1数据操作过程:新增:新增索引数据时,由于段的不变性,所以会新建一个段存储新数据。删除:删除索引数据时,由于段...
2019-12-08 14:15:21
1711
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人