![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
小菜菜1223
qq846792646
展开
-
Java 获取mysql连接工具类
Spark还是平时经常会使用到mysql去读取一些配置信息,所以整理一个工具类获取或者关闭mysql的连接。1、首先编写配置文件db.properties:url=jdbc:mysql://10.driver=com.mysql.jdbc.Driverusername=rootpassword=1234562、编写工具类:package utils;import java.io.InputStream;import java.sql.*;import java.ut原创 2022-04-14 15:14:16 · 1147 阅读 · 0 评论 -
Java 读写文件工具类
今天简单写了一下读写文件用的工具类,方便后面开发或者测试时直接使用。import lombok.Cleanup;import java.io.*;import java.util.ArrayList;import java.util.List;public class FileUtils { //逐行读取文件内容返回内容列表 public static List<String> readLine(String path){ List<Str原创 2021-12-14 15:14:14 · 1822 阅读 · 0 评论 -
java Flink(四十)FlinkSql 简单Demo以及具体使用
之前FlinkSql用的比较少,今天开始简单介绍一下。首先导入依赖:<!-- 引入flink table相关依赖--><dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-table-planner_2.12</artifactId> <version>1.10.1</version>原创 2021-07-29 10:53:16 · 4200 阅读 · 0 评论 -
java Flink(三十九)官方基础篇-算子概括(基础)
今天回顾一下Flink官方对内部提供的算子的一个介绍。算子:Map 转换流:DataStream → DataStream 简单说明:取一个元素并产生一个元素。将输入流的值加倍的映射函数(必须产生数据) 使用方式:DataStream<Integer> dataStream = //...dataStream.map(new MapFunction<Integer, Integer>() { @Override public I...原创 2021-07-23 16:51:20 · 486 阅读 · 1 评论 -
java Flink(三十八)用户自定义Functions-累加器
自定义Functions官方介绍就是除了我们自定义实现Flink提供的各种算子外,还提供了累加器等。 实现比较简单,就是简单的上下文注册以及使用。 代码: import org.apache.flink.api.common.accumulators.IntCounter;import org.apache.flink.api.common.functions.RichFlatMapFunction;import org.apache.flink.configuratio...原创 2021-07-23 16:12:31 · 332 阅读 · 0 评论 -
java Flink(三十七)Flink底层ProcessFunction的常见ProcessFunction总结以及简单使用
在flink中,转换算子是无法访问事件的时间戳信息和水位线信息的。所以! flink提供了一些列的Low-Level转换算法,他们可以访问时间戳,watermark以及注册定时器。总结:ProcessFunction可以被认为是一种提供了对状态和定时器访问的FlatMapFunction,没接收到一个数据流都会进行处理,可以通过访问时间戳来进行设置定时器等操作。 flink提供了8个ProcessFunction: ProcessFunction dataStrea...原创 2021-07-23 14:20:17 · 1301 阅读 · 1 评论 -
java Flink(三十六)Flink多流合并算子UNION、CONNECT、CoGroup、Join
UNION介绍 DataStream.union()方法将两条或者多条DataStream合并成一条具有与输入流相同类型的输出DataStream.事件合流的方式为FIFO方式。操作符并不会产生一个特定顺序的事件流。union操作符也不会进行去重。每一个输入事件都被发送到了下一个操作符。说明:1.union 合并的流的元素必须是相同的2.union 可以合并多条流3.union不去重,合流顺序为先进先出具体用法:DataStream<Sensor...原创 2021-07-22 13:59:07 · 6088 阅读 · 0 评论 -
java Flink(三十五)Flink的watermark设置以及部分实现类
watermark(水位线)是Flink里边的相当重要的存在,是Flink处理乱序数据的重要组成。Flink理论上定义了三种watermark广播机制(【2种生成水印的策略】【如果生成的watermark是null,或者小于之前的watermark,则该watermark不会发往下游】)。首先看看它的组成:AssignerWithPunctuatedWatermarks(为每条消息都会尝试生成水印)AssignerWithPeriodicWatermarks(周期性的生成水印,不会针对.原创 2021-07-22 10:05:09 · 933 阅读 · 0 评论 -
java Flink(三十四)Flink ReducingState简单使用
直接上代码:import org.apache.flink.api.common.functions.ReduceFunction;import org.apache.flink.api.common.functions.RichFlatMapFunction;import org.apache.flink.api.common.state.ReducingState;import org.apache.flink.api.common.state.ReducingStateDescriptor原创 2021-07-20 11:37:44 · 394 阅读 · 0 评论 -
java Flink(三十三)Flink的广播流状态实例
实例介绍:广播状态在双流的应用,其中一个流当做另一个流的状态。DEMO:import org.apache.flink.api.common.state.MapStateDescriptor;import org.apache.flink.api.common.typeinfo.BasicTypeInfo;import org.apache.flink.configuration.Configuration;import org.apache.flink.streaming.api.da原创 2021-07-20 10:57:01 · 1157 阅读 · 0 评论 -
java Flink(三十二)Flink的异步IO访问外部数据
Flink的异步官方的介绍:当我们使用 Flink 在与外部系统进行交互时(例如:使用存储在数据库中的数据来丰富流事件),这时便需要注意Flink系统与外部系统的通信延迟了。我们使用 MapFunction() 的方式与外部数据库交互,使用的同步交互的方式。即:将请求发送到数据库,并MapFunction等待直到收到响应。在许多情况下,这种等待占据了功能的绝大部分时间。与数据库的异步交互,意味着单个并行函数实例可以同时处理许多请求并同时接收响应。这样,等待...原创 2021-07-19 15:32:08 · 1177 阅读 · 2 评论 -
java Flink(三十一)Flink分布式缓存
什么是Flink的分布式缓存? Flink提供了一个分布式缓存,类似于hadoop,可以使用户在并行函数中很方便的读取本地文件,并把它放在taskmanager节点中,防止task重复拉取。 此缓存的工作机制如下:程序注册一个文件或者目录(本地或者远程文件系统,例如hdfs或者s3),通过ExecutionEnvironment注册缓存文件并为它起一个名称。 当程序执行,Flink自动将文件或者目录复制到所有taskmanager节点的本地文件系统,仅会执行一次。用户可以通过这个指定的名称查找文..原创 2021-07-19 11:10:13 · 252 阅读 · 0 评论 -
面试准备(二十)java HashMap
为什么用红黑树解决链表过长,查询效率过低的问题为什么不直接使用红黑树红黑树插入会很慢,要维护自己的结构为什么使用红黑树的阈值是8之所以是8,是因为Java的源码贡献者在进行大量实验发现,hash碰撞发生8次的概率已经降低到了0.00000006,几乎为不可能事件,如果真的碰撞发生了8次,那么这个时候说明由于元素本身和hash函数的原因,此次操作的hash碰撞的可能性非常大了,后序可能还会继续发生hash碰撞。所以,这个时候,就应该将链表转换为红黑树了,也就是为什么链表转红黑树的阈值是8。原创 2021-07-09 14:35:59 · 71 阅读 · 0 评论 -
面试准备(十九)java常见
一、什么是面向对象?谈谈你对面向对象的理解面向过程:注重事情的每一个步骤及顺序。面向过程比较高效。面向对象:注重事情有哪些参与者(对象)、各自需要做什么。更易于复用、扩展、维护。面向对象的特性包括:封装、继承、多态。封装:明确标识出允许外部使用的所有成员函数和数据项。内部细节对外部调用透明,外部调用无需修改或者关心内部实现。继承:继承基类的方法,并做出自己的改变和扩展。多态:基于对象所属类的不同,外部对同一个方法的调用,实际执行的逻辑不同。二、JDK、JRE、JVM三者的区别和联原创 2021-07-09 10:33:02 · 67 阅读 · 0 评论 -
面试准备(十八)三角形的最大周长
贪心算法:数组先排序,排序之后以最后三个数为基准,看是否满足a+b>c,不满足则把最大值由c改成b,再从a前边找个d,看a+d是否大于c。代码:import java.util.Arrays;public class Triangles { public static void main(String[] args) { System.out.println(largestPerimeter(new int[]{3,6,2,3})); } ...原创 2021-07-06 14:40:20 · 69 阅读 · 0 评论 -
面试准备(十七)柠檬水找零
贪心算法:局部最优解不影响全局解代码:public class lemonChange { public static void main(String[] args) { System.out.println(change(new int[]{5,5,20})); } public static boolean change(int[] bills){ int five = 0,ten=0; for(int bill:..原创 2021-07-06 14:31:51 · 61 阅读 · 0 评论 -
面试准备(十六)二叉树 深度优先 广度优先
深度优先:递归,从子节点往上计算深度,计算到根节点取最小值广度优先:从根节点往下找,找到叶子结点为止代码:import java.util.LinkedList;import java.util.Queue;public class TreeDeep { static class TreeNode{ int val; TreeNode left; TreeNode right; int deep; ...原创 2021-07-06 14:10:47 · 88 阅读 · 0 评论 -
面试准备(十四)排列硬币
解题思路:迭代:循环计算和大于n之后输出二分法:牛顿迭代:代码:public class ArrangeCoin { public static void main(String[] args) { System.out.println(arrangeCoins(10)); System.out.println(arrangeCoins2(10)); System.out.println(arrangeCoins3(10))...原创 2021-07-05 17:56:08 · 86 阅读 · 0 评论 -
面试准备(十五)求两数之和
解题思路:暴力解法:双重for循环map标记法:循环一次即可,每个数据进入map进行标记,寻找target-x在不在即可代码:import java.util.Arrays;import java.util.HashMap;import java.util.Map;public class TwoSum { public static void main(String[] args) { System.out.println(Arrays.toStr...原创 2021-07-05 16:50:45 · 55 阅读 · 0 评论 -
面试准备(十三)三个数的最大乘积
考虑数组中的正负数。解题思路:排序:排序之后取值比较线性扫描:循环一遍计算比较复杂度以及具体逻辑看代码:import java.util.Arrays;public class MaxProduct { public static void main(String[] args) { System.out.println(); } //排序后输出最大值 Nlog(n) public static int sort(int[] ...原创 2021-07-05 16:36:26 · 90 阅读 · 0 评论 -
面试准备(十二)寻找数组中心下标
解题思路:双指针算法,循环数组,total(初始为0)从当前元素累加,sum(数组之和)如果不等于total,减去当前元素,继续循环。代码:import java.util.Arrays;public class ArrayCenterIndex { public static void main(String[] args) { System.out.println(pivotIndex(new int[]{1,7,3,6,5,6})); } ...原创 2021-07-05 15:23:17 · 63 阅读 · 0 评论 -
面试准备(十一)删除排序数组
不能使用set。解题思路:前提是:有序数组定义一个快指针j,定义一个慢指针i。开启循环,i,j一起往后循环,当发现i与j相等之后,i停止循环,j继续循环,直到j与i不相等之后,将i+1赋值为j,继续循环,最后返回i的值即可。代码:public class SortedArrayDuplicates { public static void main(String[] args) { System.out.println(removeDuplicates(n...原创 2021-07-05 15:12:51 · 65 阅读 · 0 评论 -
面试准备(十)素数个数统计
解题思路一:暴力解法:每个数n都计算与n-1之内的数能否整除(后期可以优化到与2-根号n之间)。解题思路二:埃筛法:利用合数的概念,素数*n必然是合数,因此可以从2开始遍历,将所有合数提前做上标记,减少计算。代码:public class PrimeNumber { public static void main(String[] args) { System.out.println(bf(100)); System.out.printl...原创 2021-07-05 14:44:40 · 72 阅读 · 0 评论 -
面试准备(八)链表反转
解题思路一:链表指向的都是下一个元素的指针,如果想链表反转,需要使用一个变量保存一下下一个元素的指针。每一次处理结果作为下一次处理的初始值。解题思路二:递归思想大问题拆成小问题,必须从最后一个元素开始才能保证链表不断。代码:public class ReverseList { //内部链表类 static class ListNode{ int val; ListNode next; p...原创 2021-07-05 11:29:26 · 105 阅读 · 0 评论 -
java groovy + spock 单元测试实例 powermock mock静态方法 以及Flink单元测试实例
具体的介绍看这篇介绍的很全面。https://blog.csdn.net/u012129558/article/details/78677357powermock mock静态方法实例1、pom依赖引入引入spock、groovy、powermock 相关依赖以及maven插件 <!-- 代码检查使用的依赖 --> <dependency> <groupId>org.apache.maven.p.原创 2021-06-28 16:41:04 · 1686 阅读 · 2 评论 -
面试准备(五) java类的初始化和实例化
首先要了解java中类的加载机制:类的加载机制网上有各种各样的讲解文章,其实通俗的概括就是首先程序运行就会启动java虚拟机JVM。1)Loading(载入)JVM 在该阶段的主要目的是将字节码从不同的数据源(可能是 class 文件、也可能是 jar 包,甚至网络)转化为二进制字节流加载到内存中,并生成一个代表该类的java.lang.Class对象。2)Verification(验证)JVM 会在该阶段对二进制字节流进行校验,只有符合 JVM 字节码规范的才能被 JVM...原创 2021-06-17 16:15:36 · 139 阅读 · 1 评论 -
java SpringBoot(二十二)Mybatis generator自动生成字段注释修改为数据库注释
承接上文,我们发现Mybatis generator自动生成的注释惨不忍睹我们自定义生成注释,注释内容是我们数据库中表中字段的注目录:新增自定义类实现DefaultCommentGenerator注解类CommentGenerator:package com.zr.mall.demo.mbg;import org.mybatis.generator.api.IntrospectedColumn;import org.mybatis.generator.api.Introspe原创 2021-06-16 16:07:40 · 570 阅读 · 0 评论 -
java SpringBoot(二十一)Mybatis generator自动生成mapper、model以及字段注释
使用Mybatis generator可以自动生成mapper、model类以及mapper.xml,可以满足基本的crud功能。目录结构:使用:1、导入依赖 以及maven插件<!--集成druid连接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId>原创 2021-06-16 15:20:16 · 1351 阅读 · 0 评论 -
java SpringBoot(二十)SpringBoot Swagger自动生成API接口文档
什么是Swagger:Swagger是一款Restful接口的文档在线自动生成和功能测试功能软件。Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化Restful风格的Web服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。pom中导入依赖: <!--Swagger-UI API文档生产工具--> <dependency> <groupId>.原创 2021-06-10 17:48:46 · 355 阅读 · 0 评论 -
java SpringBoot(十九)SpringBoot API 状态码类以及返回信息工具类
在平时SpringBoot编写网络API接口代码的时候,难免需要用到返回状态码以及返回的数据、信息。今天写一个万能的返回状态信息工具类。目录结构:IErrorCode 接口类:package com.zr.mall.demo.common.api;/** * 封装API的错误码 */public interface IErrorCode { long getCode(); String getMessage();}ResultCode...原创 2021-06-10 14:58:25 · 1992 阅读 · 0 评论 -
java SpringBoot(十八)SpringBoot的Group Id 与 Artifact Id
我们在创建Spring boot 项目的时候,会要求我们自定义Group Id 与 Artifact Id。下面来介绍一下这两个该怎么写。什么是Group Id 与 Artifact Id:Group Id 与 Artifact Id被统称为“坐标”是为了项目的唯一性而提出的。如果你做了一个maven的通用包,打包到了maven仓库,那么其它项目对你的包进行引用的时候就需要这两个ID去识别导入你的包。Group Id:Group Id一般会分为好几段,例如 org.apach.xx.原创 2021-06-10 10:37:30 · 1713 阅读 · 0 评论 -
java hadoop(六) hadoop mapreduce 规约Combiner案例
什么是规约Combiner:每一个map都可能会产生大量的本地输出,Combiner的作用就是对map端的输出先做一次合并,以减少在map和reduce节点之间的数据传输量,以提高网络IO性能。Combiner会在没一个maptask所在的节点运行。这里我们以单词统计demo为例,加入一个Combiner,减少map->reduce的传输量。编写Combiner代码:package mapreduce;import org.apache.hadoop...原创 2021-06-10 09:47:08 · 103 阅读 · 0 评论 -
java hadoop(五) hadoop mapreduce 排序和序列化案例
什么是序列化与反序列化:序列化(Serialization)是指把结构化对象转化为字节流。反序列化(Deserialization)是序列化的逆过程。把字节流转为结构化对象。mapreduce中的序列化:实现这个接口即可第一个方法是进行序列化第二个方法是反序列化mapreduce中的排序:WritableComparable 接口包含了排序以及序列化,如果我们序列化的同时还需要排序,就实现这个接口即可。需求:代码实现:目录结构:包装类:通.原创 2021-06-09 19:26:32 · 263 阅读 · 0 评论 -
java hadoop(四) hadoop mapreduce 分区案例
我们在编码步骤那章简单介绍了一下分区。其实通俗来说,分区就是根绝K的某个特征属性(可能是大小、长度以及尾号等等),将K的数据写到不同的文件里。比如我们根据ID来分区,我们可以根据尾号来分10个文件。有几个分区就有几个Reduce Task。实现分区案例:我们根据hdfs文件中的这个字段大小进行分区,大于15的一个区,小于15的一个区,最终有两个out文件。目录结构:Mapper:package partitiondemo;import org.apa..原创 2021-06-09 16:52:13 · 353 阅读 · 1 评论 -
java hadoop(三) hadoop mapreduce 编程流程(以单词统计为例)
一、首先是map层1、首先我们的文件是存储在hdfs,hdfs存储文件是按block块进行存储的,每个块的大小默认是128M。2、我们是用InputFormat下边的子类TextInputFormat进行文件按行读取成K1 V1 模式 K1:这一行的起始点在文件中的偏移量V1:读取到的内容3、每个block都会启动一个MapTask进行处理,map的主要操作就是将读取的内容转换成 K2 V2二、进入Shuffle阶段,生成新的K2 V21、对map阶段输出的k2和v...原创 2021-06-09 15:50:04 · 317 阅读 · 1 评论 -
java hadoop(二) hadoop mapreduce简单介绍以及简单实例
1、简单介绍一下mapreduceMapReduce的思想核心是“分而治之”,适用于大量复杂的任务处理场景(大规模数据处理场景)Map负责“分”,即把复杂的任务分解为若干个“简单的任务”来并行处理。可以进行拆分的前提是这些小任务可以并行计算,彼此间几乎没有依赖关系。Reduce负责“合”,即对map阶段的结果进行全局汇总。这两个阶段合起来正是MapReduce思想的体现。2、mapreduce编写步骤https://lansonli.blog.csdn.net/article/.原创 2021-06-08 11:00:01 · 696 阅读 · 1 评论 -
java hadoop(一) 连接hadoop 执行操作
1、先导入依赖:pom.xml:<dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.7.5</version> </d原创 2021-06-07 19:34:46 · 1341 阅读 · 0 评论 -
java SpringBoot(十七)自定义starter
为什么需要自定义starter:项目中经常使用的功能可以包装成自定义的starter,方便调用以及使用。SpringBoot是怎样定义starterd:以test statrt为例:我们发现我们导入test stater包之后,Spring会引入两个依赖一个是org.springframework.boot:spring-boot-test这个里边没什么东西,主要是告诉我们需要导入什么依赖另一个是org.springframework.boot:spring-boot...原创 2021-06-01 15:43:38 · 1390 阅读 · 1 评论 -
java SpringBoot(十六)Profile简单使用
为了方便多环境适配,springboot简化了profile功能。1、配置文件目录结构:原创 2021-06-01 11:15:53 · 296 阅读 · 0 评论 -
java SpringBoot(十五)JUnit5简单使用
JUnit5的注解与JUnit4的注解有所变化https://junit.org/junit5/docs/current/user-guide/#writing-tests-annotations@Test :表示方法是测试方法。但是与JUnit4的@Test不同,他的职责非常单一不能声明任何属性,拓展的测试将会由Jupiter提供额外测试 @ParameterizedTest :表示方法是参数化测试,下方会有详细介绍 @RepeatedTest :表示方法可重复执行,下方会有详细介绍 @Di原创 2021-05-31 14:58:07 · 259 阅读 · 0 评论