自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 资源 (25)
  • 收藏
  • 关注

原创 flink学习(七)——DataStream API介绍

前面我们尝试用flink写了一个WordCount程序,并且介绍了flink提供的api层级,接下来我们正式来学习flink的DataStream API。为什么先学习DataStream API,而不是ProcessFunction API,这是因为ProcessFunction API是通过DataStream API调用的,它作为DataStream API的补充,可以实现DataStream API所不能实现的一些高级功能。DataStream程序结构剖析我们回到WordCount的那个例

2021-01-13 16:36:27 630

原创 flink学习(六)——flink api层次

在前文我们写了一个WordCount程序体验了一下flink程序的编写。在本篇中我们详细学习下flink api的分类及其应用场景。Flink’s APIflink提供了4个层次的api抽象:在最下层,就是有状态流式编程,它提供了状态编程和时间编程(时间编程后面会学到)的基础能力。它通过Process Function嵌入到DataStream API中。它It is embedded into the DataStream API via the Process Function. It all

2020-12-21 22:45:46 1647

原创 flink学习(五)——浅尝WordCount

前面学了那么多,我们还没有上手写过代码,现在我们来学习如何用flink实现流式的WordCount程序。准备工作java开发环境,推荐Intellij IDEA。netcat程序。如果是windows系统,可以到https://eternallybored.org/misc/netcat/网站下载netcat,并解压配好环境变量即可;如果是centos系统,直接yum install -y nc即可;pom文件配置 <!-- Apache Flink dependencies

2020-12-19 20:26:28 369 1

原创 flink学习(四)——flink任务执行原理详解

在前文中我们学习了flink的整体架构和任务提交执行的流程。现在我们来学习flink在内部具体如何执行任务。任务执行图在flink中有四层执行图,StreamGraph -> JobGraph -> ExecutionGraph -> 物理执行图,如图所示:StreamGraph:是根据用户通过 Stream API 编写的代码生成的最初的图,用来表示程序的拓扑结构。每个转换操作会生成一个StreamNode,两个StreamNodes之间由StreamEdge连接在一起,Str

2020-12-19 15:08:59 2931 3

原创 flink学习(三)——flink整体架构

flink作为一个分布式计算引擎,它可以在所有主流集群资源管理器中,如Hadoop YARN,Apache Mesos和Kubernetes,也可以运行在独立集群中。当然,它还提供了本地运行模式,可以供我们开发测试。架构组成flink集群中最重要的两个进程组件是:JobManager 和 TaskManager。这是典型的主从架构:一个集群中只能有一个JobManager(HA部署的除外,它会有一个leader jobmager和一个standby jobmanager),但是可以有多个TaskMan

2020-12-19 00:15:07 756 1

原创 flink学习(二)——flink怎么进行流计算

Apache Flink is a framework and distributed processing engine for stateful computations over unbounded and bounded data streams.上述那句话是flink官网对flink的描述。我们可以总结出两点计算特征:分布式有状态计算分布式很好理解。在大数据时代,作为数据处理引擎,分布式是必须的能力。...

2020-12-04 16:09:20 1134

原创 flink学习(加餐)——flink-mysql-cdc设置从指定position消费

目前发布的flink-connector-mysql-cdc(version:1.1.0)不支持从指定的mysql bin-log文件的某个position开始消费。不过也不是没有办法,我们可以增加一些额外配置使其支持。参考自Support read from specific MySQL Binlog position它的原理是通过设置OFFSET_STATE_VALUE属性,解析出bin-log文件和对应的position,在启动的时候即可指定position消费。OFFSET_STATE_VA

2020-12-04 11:25:09 1174

原创 flink学习(一)——什么是流处理

流处理引入为了理解流处理,我们先来看看批处理。批处理是把我们感兴趣的数据一起搜集下来加以处理,产生结果。比如说双十一当天有多少个用户购买了商品,每个用户分别买了多少件,分别是哪些品类的商品。过去需要第二天或者几个小时后才能出统计结果,我们才能知道双十一当天或者截止到某个小时有多少人买了东西等,这些是批处理的结果。批处理的结果生成相距用户实际行为的发生间隔了很长一段时间,往往是一天或者几小时。在现在的互联网竞争下,有时候这些数据统计延迟是无法接受的,我们需要更快地知道当前最新的数据状态,这就需要流处理(也可

2020-12-03 02:27:24 530

原创 flink学习(加餐)——job任务状态变化

我们来看一下flink官网的图:光看图就头晕了,我们可以来整理一下。首先flink job任务状态总共有:CreatedRunningFinishedFailedCanceledFailingCancelingRestartingSuspended根据个人理解,我们可以把这些状态分为四大类:起始态中间态最终态过渡态起始态表示任务启动时的状态,中间态表示任务运行时的状态,最终态表示任务最后的状态,过渡态表示任务在上述这些状态转化时中间过渡的状态。这样我们就把九个状

2020-12-03 01:56:36 3389 1

原创 进程与线程(一)

我们打开一个应用程序,就是操作系统就会启动一个进程。不同的应用程序之间数据是隔离的,比如qq无法访问到浏览器的数据(保存到文件的除外),也即进程之间运行数据是隔离的。线程是进程内部的执行单元,操作系统执行程序的最小单元。进程之间数据是隔离的,但是同一个进程内的不同线程之间资源是共享的。...

2020-10-30 00:09:03 140

原创 学点算法(十一)——将二叉树转为数组

今天我们来学习如何将二叉树转为数组(填坑学点算法(九)——二叉树中序遍历算法(递归实现))。首先,我们看下面这棵二叉树,我们从根节点出发,左右孩子依次排列在根节点后面,放入数组中,然后继续以同样的方法遍历其左右孩子,如果孩子节点的位置已经被叔父节点占据,则继续排在叔父节点后面,如果遇到没有左右孩子的情况,则将没有的节点置为null,将节点排列在数组中,直至遍历结束,位于数组结尾的null(后面没有有效节点值)可去除。我们来看下这个过程:首先我们放入1及其左右孩子,得到[1, 2, 3]。取1的左

2020-09-22 02:53:21 3051 2

原创 hadoop partitioner类加载分析

在hadoop中,在map方法结束写出数据的时候需要对数据进行分区,具体分区实现由Partitioner类提供,而Partitioner类的加载逻辑如下:partitions = jobContext.getNumReduceTasks();if (partitions > 1) { // 设置的分区数(即reduce task的个数)大于1,则使用设置的分区类 partitioner = (org.apache.hadoop.mapreduce.Partitioner<K,V&gt

2020-09-11 17:40:27 250

原创 hadoop mapreduce加载ClientProtocol(JobRunner)方法解析

hadoop mapreduce加载ClientProtocol(JobRunner)使用了spi机制,具体方法在Cluster#initialize。它会使用frameworkLoader加载ClientProtocolProvider,在hadoop的jar包里配置了两个实现类:org.apache.hadoop.mapred.YarnClientProtocolProvider,配置文件见~\.m2\repository\org\apache\hadoop\hadoop-mapreduce-cli

2020-09-06 10:48:14 328

原创 学点算法(十)——二叉树中序遍历算法(迭代实现)

今天我们继续来学习二叉树的中序遍历算法。在学点算法(九)——二叉树中序遍历算法(递归实现)中我们已经学习了二叉树中序遍历的递归算法,今天我们继续来学习它的迭代算法。我们先来看整个遍历的过程,如图所示:...

2020-06-30 15:37:09 643

原创 学点算法(九)——二叉树中序遍历算法(递归实现)

今天我们来学习二叉树的中序遍历算法。二叉树有多种遍历方法,前中序遍历和层次遍历。我们今天的主角是中序遍历,它的遍历顺序为:左子树根节点右子树如下图所示:我们知道树的定义本身就是递归式的,左子树就是一棵以根节点的左孩子为根节点的树,右子树也同理,所以遍历左子树或者右子树直接是把原来的根节点换成根节点的左孩子或者右孩子即可。这样我们可以很快地写出递归的中序遍历算法。import java.util.ArrayDeque;import java.util.ArrayList;import

2020-06-29 16:02:18 2221 1

原创 学点算法(八)——括号匹配算法

今天我们来学习括号匹配算法。作为程序员应该都知道,我们在码代码的过程中,会用到各类括号,无论是{}还是()还是[]。括号都要求成对出现,要不然就会报语法错误。得益于强大的IDE,我们不需要自己去检测括号,如果多写活着漏写了括号,IDE就会提示我们有语法错误,我们改正一下就可以了。那你是否好奇过IDE的这个检测算法是如何实现的呢?接下来我们来分析分析。我们前面提到了可能会有多种括号情况:{}、()、[]等等。我们先只取一种来分析,我们这里取()。见多识广先从简单的开始:0 * (1 + 2) ——

2020-06-22 17:14:20 2622 2

原创 学点算法(七)——十进制数转换为二进制数

今天我们来学习进制转换算法。大家学习计算机或者编程,都会知道计算机处理数据都是基于二进制的,而我们在日常生活中都是使用十进制。如果要用计算机存储数据,肯定要将十进制转化为二进制,或者我们要查数据,要将二进制转换为十进制,那么问题来了:现在有一个十进制数,我们如何将其转换为二进制数呢?比如我们现在有一个数字:1024(预先给定的数字默认用十进制理解)。用十进制表示为:1024(10)=1×103+0×102+2×101+4×1001024_{(10)} = 1 \times 10^3 + 0 \time

2020-06-15 22:11:38 2570

原创 学点算法(六)——数组选择排序

今天我们来学习数组的插入排序算法。假设你是一个农场工人,收获了100个萝卜,长短不一,农场主让你从小到大排列好售卖,你应该怎么做?

2020-06-12 18:56:22 633

原创 学点算法(五)——使用归并算法求数组的逆序对数

今天来学习归并算法的一个应用,求数组中的逆序对数。首先我们需要知道逆序对是什么东西:在一个数组中,有两个元素,索引小的元素比索引大的元素大,那这两个元素就构成一个逆序对。而一个数组中所有逆序对的个数就叫做逆序对数。暴力求解法我们可以很容易地想出暴力求解的方法:遍历数组,依次取数组中的每一个数,然后与索引排在其后的元素比较,如果比它小,则逆序对数+1,遍历完毕,得到的逆序对数则是数组的逆序对数。代码如下:/** * 暴力求解法求逆序对数 * @param nums 数组 * @return 逆

2020-06-08 17:11:53 288

原创 学点算法(四)——数组插入排序

今天来学习数组的插入排序算法。再将算法之前,我们先来想象这样一个场景:我们要上体育课,体育老师要求同学们从高到矮排好队。当同学们都排好队的时候,小甲同学迟到了。这时候小甲同学随便站个地方可不行,因为这样队伍就不是排好的了,所以要将小甲同学插入到队伍中,使队伍重新又是从高到矮排好的。小甲同学对比自己和同学们的身高,找到自己的位置,排到队伍里,就完成了队伍的排序。这个将一个无序元素插入到n个元素的有序集合,使新的(n+1)个元素的集合变成重新有序的动作就是插入排序的基本思想。借助这种思想,我们就可以把一个数

2020-06-07 09:23:13 288

原创 学点算法(三)——数组归并排序

今天来学习归并排序算法。归并算法的核心思想是分而治之,就是将大问题转化为小问题,在解决小问题的基础上,再去解决大问题。讲这句话套用到排序中,就是将一个大的待排序区间分为小的待排序区间,对小的排序区间进行排序,然后再去解决大区间的排序,而如何对小排序区间进行排序的时候可以继续使用该方法,将小的待排序区间分为小小的待排序区间… …依次往复。最终将排序区间分为只有一个元素的时候,因为一个元素已经就是排好序的,无需继续切分了,然后我们再依照此结果去解决大区间的排序。假设我们现在有[53, 89, 32, 45,

2020-06-02 20:23:01 1452 2

原创 学点算法(二)——有序数组二分搜索算法

今天来学习一下二分搜索算法。二分搜索算法针对有序数组,如果数组乱序,则无法使用二分搜索法。先来看一下二分搜索算法的运行原理:判断区间是否有效,无效区间则退出循环。取待查找区间的中间位置元素与目标值对比。如果目标值小于中间位置元素,则更新待查找区间索引,到左边子区间继续查找。如果目标值大于中间位置元素,则更新待查找区间索引,到右边子区间继续查找。相等,则找到元素,返回索引。循环退出,返回区间左边索引。我们举个例子直观感受一下:有一个数组[1, 3, 4, 5, 9, 10, 11,

2020-05-27 19:56:09 309

原创 学点算法(一)——ArrayList内部数组实现元素去重

在ArrayList中,内部实际存储的元素的是数组,要实现元素去重,即是对改数组进行去重。常规思路是借助外部数据结构,如HashMap等来实现数据查找是否存在后去重,这里我们来实现一个利用内部自身数组的去重方法。为了简要说明,我们自己来实现一个ArrayList,省略泛型实现,并且只实现add和remove方法,用来添加元素和删除元素,最后再实现我们要讲解的deduplicate去重方法。MyArrayList实现public class MyArrayList { private int s

2020-05-18 23:41:09 378

原创 算法学习——算法复杂度分析

时间复杂度分析规则单端代码:只关注循环执行次数最多的一段代码多段代码:加法法则,总复杂度等于量级最大的那段代码的复杂度嵌套代码:乘法法则,嵌套代码的复杂度等于嵌套内外代码复杂度的乘积多规模代码:多个参数控制的则将多个复杂度相加常见时间复杂度O(1)O(logn)O(n)O(nlogn)O(m+n)O(m*n)空间复杂度分析略...

2019-08-04 17:44:42 799

翻译 java虚拟机栈空间

翻译自:https://www.geeksforgeeks.org/java-virtual-machine-jvm-stack-area/在线程创建的时候,JVM会为每个线程创建一个单独的栈空间。JVM的栈内存不需要是连续的。JVM在栈上会进行两个操作:压入和弹出栈帧。对于一个特定的线程来说,栈被称为运行时栈(Run - Time Stack)。这个线程调用的每个方法会被存储在响应的运行时...

2019-04-20 17:30:13 3369 1

翻译 为啥内存需要堆?

翻译自:https://www.quora.com/Why-are-heaps-used-for-memory-allocation-Why-arent-stacks-or-any-others-used我们需要知道的最重要的事情是栈的功能和堆的功能这两者是有显著区别的。在一个典型的编程语言中,在一个方法调用的时候,一个“栈帧”就会被创建出来。随后,所有的该方法的本地变量就会在这个栈帧的范...

2019-04-09 11:13:21 1433 1

原创 Maven Toolchains自定义配置文件目录

maven的toolchains插件默认的配置文件读取目录为~/.m2,但是有时候配置文件toolchains.xml不在这个目录下,会导致maven编译报错,可以在运行maven命令的时候给定--global-toolchains file参数来自定义toolchains.xml的路径。...

2019-04-02 10:17:36 2426

原创 在Mac下使用vscode远程编辑文件

vscode编辑器有一个插件Remote VSCode,可以帮助我们在本地机器上使用vscode直接编辑远程文件。安装及配置步骤本地配置1、打开vscode,安装插件Remote VSCode ,按下快捷键Shift+Command+R,搜索remote,启动命令Remote: Start Server,2、打开命令行,输入命令ssh -R 52698:127.0.0.1:52698 远...

2019-01-10 10:02:42 7443 3

原创 mac解决brew link时报Permission denied的错误

在使用brew安装mysql的时候,报了如下错误:mkdir: /usr/local/var/homebrew/locks: Permission deniedError: Can't create update lock in /usr/local/var/homebrew/locks!Fix permissions by running: sudo chown -R $(whoami...

2019-01-02 01:04:53 4328

原创 IntellijIdea创建简单JavaWeb项目

在初始页面,点击Create New Project,如下选中WebApplication,把Create web.xml勾选上,然后填入项目名,点击Finish完成项目创建。目录结构如下所示,但是这个时候还不是Maven项目,还要启用Maven。在项目名上右键,然后点击Add Framework Support,找到Maven,点击OK,然后再pom.xml文件中填...

2018-12-31 18:32:30 632

原创 scrapy学习笔记一 —— 创建jobbole小爬虫

一、安装scrapy创建虚拟环境运行命令:conda create -n scrapy python=3.7 ,会在anaconda安装目录下的envs文件夹下创建出scrapy运行环境:~/anaconda3/envs/scrapy/切换到刚刚创建的scrapy虚拟环境,运行命令:pip install scrapypycharm设置刚刚创建的解释器二、创建爬虫py文件im...

2018-10-27 15:51:48 496

原创 python将代码安装至本地仓库

在python开发过程中,有时候会写一些通用的方法,这些方法可以被多个项目共享,但是每次写项目需要copy来copy去也非常不爽,所以如果能像python其他项目一样直接import进来就好了。下面举一个例子:我们开发好了这样一个项目: 现在我们想把这个导入到python的site-packages中,在项目根目录(InstallDemo目录)下新建一个setup.py文件,填入以下内容...

2018-07-13 10:34:51 1501

原创 Python如何修改脚本运行的命令行参数

在python中,所有的命令行参数存放在一个特殊的变量中:sys.argv。该变量的第一个参数是脚本名,路径可能是全路径,也可能不是,这取决于操作系统。其他的变量存储在argv[1:]里。知道这个后,想要修改命令行参数据非常容易了,只需要修改argv列表就可以了。比如添加一个参数s,运行sys.argv.append(s),添加一系列参数l,运行sys.argv.extend(l)...

2018-07-02 19:28:05 2335

原创 Servlet中getRequestURI()和getRequestURL()方法的区别

getRequestURI()和getRequestURL()的区别

2017-10-04 17:25:02 9331

原创 XML语法

xml语法超简洁

2017-09-14 23:16:59 214

翻译 Python日志中dictConfig()方法的dict对象模式

python日志使用dictConfig()方法时所需要的dict对象模式

2017-09-01 21:11:57 8368

原创 python中实例方法、类方法、静态方法的区别

用简单的例子说明python中实例方法、类方法、静态方法的区别

2017-07-17 00:34:38 492

原创 Scrapy followlinks总结

scrapy提供的几种方便的将提取出来的链接继续爬取的方法

2017-07-16 01:03:45 1608

原创 linux(ubuntu)跳板机连接和文件传输

今天工作环境从windows换成了ubuntu,开发的时候需要连上线上主机,但是需要通过跳板机连接。如果只是连接的话可以还是容易搞定的,但是遇到了一个文件传输的问题,由于有了跳板机,需要搞两次,有点烦,于是网上搜资料,最后终于搞定了。(我公司环境是通过密钥连接的,密码连接应该也类似)在~/.ssh下新建一个文件config,输入以下内容:Host gateway HostName 192.168

2017-06-22 18:14:21 9942 1

原创 Java Integer.bitCount()方法解析

Interger.bitCount()方法解析

2017-05-25 20:16:03 3649 2

apache-zookeeper-3.5.8

apache zookeeper 3.5.8版本,包含源码包和二进制包(-bin结尾),解压即可使用

2020-11-24

hadoop-2.7.2.zip

hadoop2.7.2版本,解压可以得到tar.gz文件(可在linux上直接解压安装)及其相关的MD5,sha1,sha512等数据验证签名。

2020-11-13

zookeeper-3.4.10.zip

zookeeper 3.4.10二进制tar.gz版本,带MD5,pgp,sha1验证,下载解压即可使用

2020-10-03

hadoop-3.2.1

hadoop 3.2.1 二进制编译版本,包含二进制的tar.gz,还有用于验证的sha512,pgp未上传

2020-10-02

jdk-7u80-x64(含linux,windows,macos)

jdk-7u80-x64版本,包含linux,windows,macos三系统,下载解压出来即可使用

2020-08-27

jdk-8u261-x64(含linux,windows,macos)

jdk-8u261-x64版本,包含linux,windows,macos三系统,下载解压出来即可使用

2020-08-19

VSCodeUserSetup-x64-1.45.1.zip

VSCodeUserSetup-x64-1.45.1,码代码神器,windows版本,下载解压打开即可安装

2020-06-08

draw.io-13.0.3-windows-no-installer.exe

draw.io-13.0.3-windows-no-installer.exe,免安装版本,打开即用

2020-05-28

jdk&git.zip

jdk和git打包安装,jdk为jdk-8u251-windows-x64版本,git为Git-2.26.2-64-bit版本

2020-05-13

jdk11linux targz及其文档下载

jdk11和jdk文档下载,jdk文档解压打开index.html即可使用。文档支持方法类名搜索功能

2020-05-07

python-3.8.2官方文档

This is the documentation for Python 3.8.2. python官方文档,3.8.2版本,下载解压后打开解压目录里的index.html即可阅览

2020-04-28

scala-2.13.1.msi

scala windows安装包,下载后直接一直点下一步即可安装成功

2019-10-25

python-3.7.4官方文档

python官方文档,下载解压后打开解压目录里的index.html即可阅览

2019-08-07

jdk8-8u211

java开发工具,jdk8u211版本,windows 64位,解压后即可安装

2019-07-14

Git-2.22.0-64-bit.zip

windows git客户端,64位,解压安装即可使用,版本2.22.0

2019-07-14

Stream Processing with Apache Flink

Stream Processing with Apache Flink 高清epub版,解压后使用

2019-05-08

python3.7.2官方文档

python 官方文档3.7.2版本,解压后打开index.html即可使用

2019-01-11

servlet3.1规范

Java Servlet 3.1 Specification,同时包含中文版和英文版

2018-10-04

python3.7.0官方文档

Python 3.7.0 documentation python3.7.0原版官方文档 英文版

2018-07-01

python-3.6.4-docs-html

python3.6.4版本官方文档,下载解压后打开index.html即可使用

2018-01-17

jdk-9.0.4官方文档

jdk-9.0.4官方文档,下载解压后,打开index.html即可使用

2018-01-17

python3.6.3离线文档

python3.6.3离线文档,官网下载速度太慢,上传至csdn作备份

2017-11-28

复杂性思考第二版英文版pdf

复杂性思考第二版,注意此本书为英文原版。《复杂性思考》是一本从实践的角度讲解复杂性科学的专著,对复杂性的相关技术进行了较为系统和详细的讲解;是一本能提升Python程序员编程能力的著作,利用Python实现了大量经典的数据结构和算法,充分展现了Python的编程思想和魅力。

2017-09-13

python2.7.13离线文档

python2.7.13官网离线文档

2017-08-22

python3.6.2离线文档

python3.6.2官网离线文档

2017-08-22

空空如也

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

TA关注的人

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