自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 收藏
  • 关注

原创 滑动窗口题目总结(持续更新中)

给定一个字符串,维护一个窗口,满足窗口内的字符不重复,输出窗口的最长长度。注意的是本题窗口右侧(又名右区间)每次移动一位,而对于窗口左侧(左区间),当右区间碰到重复字符时,将左区间移动到该重复字符上一次出现的索引位置的下一位来保证窗口中字符不重复。给定一个字符串,维护一个窗口,满足如果窗口长度-最高频字符数量不大于k,输出满足要求的窗口的最长长度。注意的是本题窗口右侧每次移动一位,而对于窗口左侧(左区间),当窗口长度-最高频字符数量大于k,那么就需要移动一位。这题和不能说很像,只能说一模一样。

2023-11-17 19:57:32 287

原创 二分查找常见需求(持续更新中)

当然如果不存在就返回tmp.length。①首先为什么用l

2023-11-07 14:44:44 215

原创 动态规划总结(持续更新中……)

dp[i][j]表示第i个字符到第j个字符组成的子字符串是否是回文串(这里i,j都是从1开始的)(n是字符串长度)通常我们定义都是n+1空间,这里定义n+2,是因为后面区间内dp文件中,右区间刚好为n了,但是需要划分n-1和n+1两部分,如果不定义为n+2,那么n+1这部分作为索引就会越界。dp[i][j]表示从第i到第j区间的数确保能获胜的最小金额(不管选哪个数字),自然最后结果是返回dp[1][n]了dp[i]表示前i个字符组成的字符串的解码方式数(n是字符串长度)

2023-09-12 14:47:24 367

原创 基于transfomer架构的模型[GPT、BERT、VIT、ST、MAE等等]总结

本文主要讲述近些年来基于transformer结构的比较知名的模型,例如GPT、BERT、VIT、Swin Transformer以及MAE

2023-01-16 07:30:00 1991 1

原创 Spark源码(启动ApplicationMaster和Driver线程)-第二期

上一期指路上一期我们分析到了YarnClusterApplication的start,我们继续从这里分析。 override def start(args: Array[String], conf: SparkConf): Unit = { // SparkSubmit would use yarn cache to distribute files & jars in yarn mode, // so remove them from sparkConf here

2022-08-23 07:30:00 1240

原创 Spark源码(创建与yarn集群交互的client并运行)-第一期

决定从这一期开始写基于yarn模式部署的spark集群,将用户编写的代码(以WordCount为例子)提交到该集群上运行的一系列流程。object Spark03_WordCount { def main(args: Array[String]): Unit = { val sparConf: SparkConf = new SparkConf().setMaster("local").setAppName("WordCount") val sc = new SparkConte

2022-08-21 11:04:09 933

原创 Flink源码系列(JobMaster提交任务给TaskExecutor并执行)-第十二期

上一期指路:从第八期讲到的JobMaster的启动,直到后面第九期到第十一期都是基于下图的分支①,那么我们继续分析分支②,也就是说TaskExecutor向SlotManager注册slot后,SlotManager分配slot告诉TaskExecutor去提供slot给JobMaster,JobMaster就可以提交执行任务到TaskExecutor的slot中去执行了。1.一系列套娃般的跳转JobMaster#resetAndStartScheduler->JobMaster

2022-05-26 07:45:00 740

原创 Flink源码系列(slot在TaskExecutor、SlotManager、SlotPool之间的关系)-第十一期

上一期指路上一期讲到taskExecutor向resourceManager发起注册,这次接着上次分析的注册成功后回调TaskExecutor中的onRegistrationSuccess方法。1.TaskExecutor的内部类ResourceManagerRegistrationListener#onRegistrationSuccess->TaskExecutor#establishResourceManagerConnection private void establish

2022-05-19 07:48:20 579

原创 Flink源码系列(TaskExecutor向ResourceManager发起注册[flink内部,非yarn中rm])-第十期

上一期指路:承接上一期讲到YarnTaskExecutorRunner的main方法,我们继续往下分析。1.YarnTaskExecutorRunner#main->YarnTaskExecutorRunner#runTaskManagerSecurely->TaskManagerRunner#runTaskManagerSecurely public static void runTaskManagerSecurely(Configuration configuration)

2022-05-12 08:00:00 1045

原创 Flink源码系列(YarnTaskExecutorRunner启动)-第九期

上一期指路接着上一期讲到JobMaster的启动,其中又启动了slotPool,如下:那么接下来slotPool寻回rm并向其请求slot。1.StandaloneLeaderRetrievalService#start->JobMaster的内部类ResourceManagerLeaderListener#notifyLeaderAddress->JobMaster#notifyOfNewResourceManagerLeader private void notif

2022-05-09 07:45:00 1372 1

原创 Flink源码系列(ResourceManager启动、JobMaster启动)-第八期

上一期指路上上一期和上一期主要讲Flink内部的组件rm、jm、Dispatcher介绍,但其实rm和jm的启动还没有分析,只是在上上一期分析了rm的创建以及上一期分析的jm的创建,所以这一期主要是一个善后的内容,主要用于补充rm和jm的真正启动。从之前的我们分析到的这个函数,即DefaultDispatcherResourceManagerComponentFactory中的create开始1.DefaultDispatcherResourceManagerComponentFacto

2022-05-08 07:45:00 666

原创 Flink源码系列(创建JobMaster并生成ExecutionGraph)-第七期

上一期指路:上一期主要讲了flink内部的rm的创建,Dispatcher的创建与启动,之前也说过在Dispatcher的启动过程中会涉及JobMaster的创建与启动,那么这一期的主题是创建JobMaster并生成ExecutionGraph。承接上一期分析到Dispatcher的onStart函数1.Dispatcher#startRecoveredJobs->Dispatcher#runRecoveredJob->Dispatcher#runJob private

2022-05-07 07:45:00 599

原创 Flink源码系列(创建ResourceManager[Flink内部,非yarn中rm]、创建并启动Dispatcher)-第六期

上一期指路上一期已经分析到了执行YarnJobClusterEntrypoint中的main方法,我们深入其runClusterEntrypoint继续分析。

2022-05-05 07:45:00 754

原创 Flink源码系列(启动ApplicationMaster以及YarnJobClusterEntrypoint进程启动)-第五期

上一期指路上一期已经分析了作业图生成,这一期主要分析上传jar包和配置、封装参数以及启动命令并把应用提交给yarn集群中的rm,然后会在nm上启动ApplicationMaster以及YarnJobClusterEntrypoint。从上一期分析的这个图开始,生成作业图已经分析完了,接下来主要看部署集群1.YarnClusterDescriptor#deployJobCluster public ClusterClientProvider<ApplicationId>.

2022-05-03 07:45:00 1323

原创 Flink源码系列(生成JobGraph)-第四期

上一期指路我们上一期分析完了如下代码的getStreamGraph函数,这一期主要从execute起分析作业的生成。 public JobExecutionResult execute(String jobName) throws Exception { Preconditions.checkNotNull(jobName, "Streaming Job name should not be null."); return execute(getStreamGraph(jobName

2022-05-01 07:45:00 715

原创 Flink源码系列(生成StreamGraph)-第三期

上一期指路:上一期我们分析完了用户代码,其核心是把相关算子加入transformations中,这个对于生成流图很重要。我们在编写用户代码时,最后一步肯定会写env.execute这一步,如果不写的话,那么程序其实并没有真正意义上的运行。于是我们接着从execute函数开始进行源码分析1.StreamExecutionEnvironment#execute public JobExecutionResult execute(String jobName) throws Exception

2022-04-30 07:45:00 607

原创 Flink源码系列(执行用户代码)-第二期

上一期指路:第一期首先承接上一期分析到了执行用户编写的SocketWindowWordCount1.SocketWindowWordCount#main public static void main(String[] args) throws Exception { // the host and the port to connect to final String hostname; final int port; try { final ParameterT

2022-04-29 07:45:00 588 1

原创 Flink源码解析(从CliFrontend提交开始)-第一期

序言经过一段时间对于flink学习且画了一些源码流程相关的图,决定开一个flink源码分析的专栏,该专栏以flink on yarn的 Per-job模式为基础,基于flink1.12.0,以官方SocketWindowWordCount例子来分析一个任务从提交到运行的流程源码分析。那么话不多,直接开始吧。首先我们正常情况下,在该模式下的提交flink任务的脚本入下:flink run -t yarn-per-job -c org.apache.flink.streaming.example.

2022-04-27 16:31:56 3103

原创 Spark3.0.3-Worker的启动流程源码分析

Worker对于Master,其启动脚本就是通过java mainClass的方式调用main方法启动Worker的java进程。自然调用的就是org.apache.spark.deploy.worker.Worker的main方法。于是就从org.apache.spark.deploy.worker.Worker中的main方法开始看起。1.Worker#main...

2022-04-11 09:43:43 741

原创 Spark3.0.3-Master的启动流程源码分析

Master对于Master,其启动脚本就是通过java mainClass的方式调用main方法启动Master的java进程。自然调用的就是org.apache.spark.deploy.Master的main方法。于是就从org.apache.spark.deploy.Master中的main方法开始看起1.Master#mainnew SparkConfSpark应用程序的配置,将spark的各种参数设置为键值对 ;new MasterArguments(argSt

2022-04-10 17:03:28 1481 1

原创 SparkSQL-用户自定义函数(UDF)

1.准备工作读取文件数据如下:2.基本用法2.1直接注册udf

2022-02-23 10:33:21 1810

原创 Vue开发小芝士记录

作为一个后端,前端使用得比较少,但是由于毕设需要,也只能尽量去学习,记录一下易忘的、重要的、常用的一些知识点。1.路由跳转使用router-link<router-link to="/home">首页</router-link>使用push方法//普通用法this.$router.push("/home")//带参数,万能写法,推荐!this.$router.push({ name: "search", params:...

2022-02-22 09:29:09 2497

原创 Spark中的RDD、DataFrame、DataSet简单总结

三者概念RDD(Resilient Distributed DataSet)弹性分布式数据集,是Spark中最基本的数据处理模型。在代码中是抽象类,代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。弹性存储的弹性:内存与磁盘的自动切换;容错的弹性:数据丢失可以自动恢复;计算的弹性:计算出错重试机制;分片的弹性:可按需重新分片不可变RDD封装了计算逻辑不可改变,只能通过产生新的RDD并在新的RDD里面封装计算逻辑以此来改变数据抽象是一个抽象类,需要子类具体

2022-02-05 12:55:03 2546

原创 Flume-Kafka-SparkStreaming对接案例实操

1.准备工作①一个java程序,需要有一些操作能够打印特定log日志,并打成jar包;②在linux服务器上安装flume、zookeeper、kafka;2.案例思路当我在jar包程序部署在linux服务器上时,每当我访问特定接口,就会产生特定日志文件,这时候flume监听该日志文件,然后并且对日志进行过滤,一些springboot应用启动日志需要过滤,然后对接到kafka,kafka对日志进行格式化清洗,最后对接SparkStreaming就可以进行相关业务处理了3.案例流程图

2022-01-23 15:30:47 2226

原创 hadoop-MapReduce总结

1.定义是一个分布式运算程序的编程框架,能将用户编写的业务逻辑代码和自带默认组件整合成一个完成的分布式运算程序。2.优缺点2.1优点2.1.1易于编程只需要简单的实现一些接口,就可以完成一个分布式程序。2.1.2高容错性mr程序可以部署在多台机器上,其中一台挂了,可以把上面的计算任务转移到另外一个节点上运行,由hadoop内部自动完成。2.1.3良好的扩展性可以通过增加机器来有效扩展其计算能力。2.1.4海量数据的离线处理实现千台服务器集群并发工作,提供数据处理能

2022-01-22 09:11:35 1303

原创 hadoop-深入理解MapReduce(二)-MapTask与ReduceTask

1.MapTask1.1机制流程图接着上一篇的job提交流程来继续分析画图1.2源码分析从一个应用程序的map中context.write开始继续进入mapContext.write继续进入output.write这里找到了collector.collect,与上面流程图对应,然后其中还包含getPartition通过分区器以分区的形式收集数据到环形缓冲区。继续进入collect函数我们可以发现我们存储的数据结构是一部分是元数据,一部分是实际数据...

2022-01-21 16:35:34 1824

原创 hadoop-深入理解MapReduce(一)-Job提交流程

1.Job提交先图解大致流程,心里有大概框架。首先第一步进入waitForCompletion函数中的submit函数进入sumit函数,重点关注connect函数初始化总结来说,上面过程就是建立连接,创建提交job的代理,判断是local还是yarn客户端然后我们回到submit函数,继续看connect下面的部分进入submitJobInternal函数分析checkSpecs函数 ,检查输出路径是否有问题。其中checkOutP...

2022-01-20 20:39:54 1892

原创 hadoop-HDFS(重点总结)

1.定义全称(Hadoop Distributed File System),是一种分布式文件管理系统。2.诞生背景如今时代数据量越来越大,一个操作系统存不下所有的数据,就需要分配到更多的操作系统管理的磁盘中,但是涉及到多个机器就难以管理维护,需要一种系统来管理多台机器上的文件。3.优缺点高容错性、适用于大数据、可构建在廉价机器上。不适合低延时数据访问,对大量小文件存储不友好、不支持并发写入和文件随机修改(仅支持追加)。4.组成架构4.1NameNode可以理解为主要

2022-01-03 16:41:21 944

原创 NameNode和SecondaryNameNode的关系(HDFS)

1.引言首先我们对比一下这两的名字,就一个区别,后者多了个Secondary,即次要的意思,可以理解为次要的NameNode;那么我们先不谈其他的,就只看字面意思,那么第一想法就是SNN是NN的候补,即NN挂了那么SNN就继承它的衣钵;又或者SNN是NN的“秘书”,帮忙它做事。NameNode是干嘛的?它负责管理整个文件系统的元数据。那么元数据我们存在哪?内存或者磁盘?假设我们存在内存中,那存取速度很快啊,不过一旦断电,数据就丢失了,可靠性差;那么如果存在磁盘,可靠性起来了,但是效率又低了。

2022-01-02 15:17:21 1121

原创 浅谈推荐系统(一)

实际生活小例子我们平常去商店买瓶水,我们比较熟悉之后知道在哪个货架,一下子就能找到。我们想买手机的时候,去某宝或者并夕夕搜索华为xx然后选择合适的购买。但这有一个前提,都建立在客户有明确需求的情况下。另外一个因素是当今时代“信息过载”,可能一个便利店的商品不多,你逛几次就熟悉得差不多了,但是中百仓储那么多货品,对我这种路盲来说,不迷路就算成功。即使某宝和并夕夕的搜索引擎很强大速度也快,但是偌多的商品却只是让用户去主动搜索购买,未免对用户的主动性有太多要求;搜索引擎也表示.

2021-12-17 16:25:02 808

原创 Java后端对接微信支付(微信小程序、APP、PC端扫码)非常全,包含查单、退款

首先我们要明确目标,我们点击微信支付官网,我们主要聚焦于这三种支付方式,其中JSPAI与APP主要与uniapp开发微信小程序与APP对接,而NATIVE主要与网页端扫码支付对接1.三种支付统一准备工作建议导入这个jar,里面一些提供map和xml互转以及生成签名的函数,使用非常方便。<dependency> <groupId>com.github.wxpay</groupId> <artifactId>wxpay-sdk&l

2021-12-14 14:54:24 8195 7

原创 剑指Offer(第二版)-思路简述-第二期(中等难度)

本文章旨在用较少且通俗的话说明这些题的做题思路(题目链接直接点击各题目标题即可)。只有思路,不放代码,主要是方便以后的复习和二刷、三刷。以思路为主,答案次之。读者如果想避免边看答案边做的方式,以思路为起点动手学习,这也是个不错的学习资源。中等难度1.二维数组中的查找使用双指针,定义l=0,r=n-1,也就是说从矩阵的右上角开始,如果当前位置值大于目标值,就左移即--r,如果小于目标值,就下移,即++l。直到找到为止。2.矩阵中的路径经典的回溯题。①选择一个实例画图,略。②确定结束

2021-12-07 13:30:01 417

原创 SparkCore-常用转换算子总结

主要是分为三个类型:Value 类型、双 Value 类型和 Key-Value 类型。这一篇主要介绍value类型的1.Value类型1.1map传递一个对象,返回一个对象源码中给的解释机翻如下:通过对这个RDD的所有元素应用一个函数,返回一个新的RDD。说人话就是:将处理的数据逐条进行映射转换,可以是类型的转换,也可以是值的转换。值的转换,即里面每个数据*2val mapRDD: RDD[Int] = rdd.map( _ * 2)类型转换,转.

2021-11-27 13:24:32 586

原创 Kafka简单学习总结

1.定义Kafka是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域。这个定义已经暗示得很明确了。适用于大数据的实时处理领域,并且一般是搭建集群来使用,是消息队列的一种。大数据技术栈生态:kafka位于数据传输层和数据存储层,是为数不多的覆盖超过一层的技术。2.回顾消息队列①解耦:允许独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。②可恢复性:系统的部分组件失效不会影响整个系统,由于消息队列降低了进程间的耦合度,所以即使一个处理消息的..

2021-11-23 13:18:59 1888

原创 Flume简单学习总结

1.定义flume是一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。它是基于流式架构的,灵活简单。很明显从这个定义中就能看出其具备:3个特点:①高可用的;②高可靠的;③分布式的。3个作用:①采集;②聚合;③传输。2.应用其实从其定义中来看,就知道它能够使用在大数据相关领域,因为大数据最直观的连接就是数据多(大),那么“海量”能够很好的契合。并且很明显它是处理大数据领域数据采集、存储、计算中的采集这一环大数据技术栈生态体系:①一个面向消费者的网站,可以通过收

2021-11-17 13:27:19 1785

原创 MongoDB简单学习总结

1.定义一个非关系型数据库,也称为文档型数据库。虽然是非关系数据库,但是其实在使用过程,我觉得这玩意是最想关系型数据库的nosql了,因为相对于另一种常见的非关系数据库redis来说,至少它还有点关系型数据库的影子。2.结构对于其支持的数据结构,称为BSON,和JSON不能说很像,只能说一模一样,不过BSON有JSON没有的一些数据类型,如Date和BinData类型。2.1与mysql对比SQL MongoDB 解释 database database

2021-11-12 17:51:11 788

原创 虚拟机网络配置-踩坑记录一

由于毕设需要,我最近在学大数据相关,就先学hadoop,需要通过虚拟机搭建hadoop的环境,同时要以静态ip的形式设置网卡,这样的话不至于我几天后打开ip又变了。无论是虚拟机网络环境net的设置,还是给/etc/sysconfig/network-scripts/ifcfg-ens33下的网卡配置静态ip和网关,以及在window网络连接中的vmnet8中的ipv4配置默认网关和DNS服务器,但是还是用远程连接工具连不上。 在网上搜了很多,基本我上面的三件套配置完是不...

2021-11-05 09:38:47 1119

原创 剑指Offer(第二版)-思路简述-第一期(简单难度)

简单难度1.用两个栈实现队列定义两个栈,一个大栈,一个小栈,入队列的数直接放入小栈,然后出队的数直接从大栈弹栈,如果大栈为空,就把小栈中所有元素出栈并入栈到大栈中然后大栈弹栈。2.斐波那契数列这题比较简单,递归或者动态规划,推荐动态规划,不容易出错且运行更快。f[i]=f[i-1]+f[i-2]3.数组中重复的数字使用unordered_map记录数字出现次数,次数大于1即是结果。4.青蛙跳台阶问题动态规划,设置dp[i]为跳上i级台阶的跳法,由于只有跳一步或者两步的方式,所

2021-10-31 10:54:27 180

原创 LeetCode-腾讯精选练习 50 题-思路简述

本文章旨在用较少且通俗的话说明这50道题的做题思路。只有思路,不放代码,主要是方便以后的复习和二刷、三刷。以思路为主,答案次之。(部分难以用文字理解的题会画图)。简单难度中等难度困难难度...

2021-10-20 21:57:13 701

原创 设计模式(四)-正篇-原型模式、建造者模式、适配器模式

原型模式定义用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象。是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节。例子有一只羊,现在需要我们再克隆属性完全相同的四只羊。传统方法使用四次new方法//传统的方法 Sheep sheep = new Sheep("tom", 1, "白色"); Sheep sheep2 = new Sheep(sheep.getName(), sheep.getAge

2021-10-10 21:20:27 180

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除