
JAVA学习笔记
文章平均质量分 82
JAVA学习笔记
长臂人猿
进阶的猿猴
展开
-
简用JAVA正则表达式匹配API
Matcher类提供了start(),end(),group()分别用于返回字符串的起始索引,结束索引,以及匹配到到的字符串。原创 2023-07-17 15:37:48 · 351 阅读 · 0 评论 -
简用前后端的JSON格式注解:@DateTimeFormat、@JsonFormat、@JsonProperty
【后端到前端】在实体类属性上面使用@JsonFormat注解了,要注意的是,它只会在声明返回类型为json时,比如使用@ResponseBody返回json数据的时候,才会返回格式化的yyyy-MM-dd HH:mm:ss时间,如果直接使用System.out.println()输出的话,仍然是类似“Fri Dec 01 21:05:20 CST 2017”这样的时间样式。原创 2023-07-17 10:06:49 · 607 阅读 · 0 评论 -
FlinkSql开窗实例:消费kafka写入文本
以前写Flink从kafka入hdfs因为业务需求和老版本缘故都是自定义BucketSink入动态目录中,对于简单的需求可以直接用Flink SQL API进行输出。Flink版本1.13.1。原创 2022-12-27 16:35:57 · 1866 阅读 · 0 评论 -
Mybatis源码(三)如何操作数据库
接着environmentElement获取数据源信息后,同级执行代码的mappersElement。里面参杂了mybatis缓存。原创 2022-12-27 16:01:37 · 1069 阅读 · 0 评论 -
MyBatis源码(二)如何执行sql
接着environmentElement获取数据源信息后,同级执行代码的mappersElement。原创 2022-12-27 15:41:11 · 812 阅读 · 0 评论 -
Mybatis源码(一)获取数据源
Mybatis做为一种半ORM框架(半:需要手动写sql)。ORM(Object Relational Mapping)的技术本质是:ORM框架将对象的值映射到对应数据库类型: 如 String -> varchar。且mybatis分为两种实现方式:基于xml和基于注解,本文为xml。原创 2022-12-27 15:34:15 · 1944 阅读 · 0 评论 -
SpringCache缓存简用验证码
开发需求背景:Hibernate JPA项目的短信和扫码登陆验证需求,五码合一。使用spring cache做验证码生成和存储。原创 2022-10-24 18:30:00 · 477 阅读 · 0 评论 -
SpringBoot整合Swagger3和Knife4j及使用
开发api提供对应的接口规范进行联调或并行开发,api文档管理必不可少。常用的Knife4j基于swagger(依赖已经compile),可以进行管理。原创 2022-08-09 23:30:00 · 2236 阅读 · 0 评论 -
快速掌握排序算法——快速排序(图解)
前言 八大排序算法中我们最常用的还是快排,其效率和代码实现难度上都符合使用情况。可是知道其原理,但是手撸代码很久没有实现后,总是会难免磕磕绊绊,故作此文快速回顾,引入图解页方便新学同学快速理解。代码与搭配食用更佳噢。排序之插入排序(直接插入、折半插入、希尔排序)堆排序(源码C)简述简单的说,快排本质上是一个个寻找数组中每个元素的正确位置的过程,这个过程中暂叫确定的元素叫标准位。首先寻找到标准位在目标排序中的正确位置——通过双指针Left和Right,以排序数组为区间,二者相向运动。具体为通过原创 2022-03-07 18:13:54 · 2696 阅读 · 1 评论 -
EasyExcel解析简易动态表头列及其简用
前言项目组祖传的POI代码,是基于entity实体类来固定格式解析,对应EXCEL是多少表头展示解析多少表头,需要改祖传代码,比较麻烦,时间不够。故用二次封装POI的EasyExcel来进行简易实现。使用EasyExcel的优点是基于POI进行的封装,其特点是:占用内存少。3M的excel用POI sax依然需要100M,而easyExcel只是KB级别。简洁。poi代码臃肿,easyExcel只需几行代码。处理流程读取Excel文件输入流:InputStream;将数据输入流原创 2022-02-12 14:57:03 · 7704 阅读 · 1 评论 -
或非和java的移位操作符
MECE 原则,提升逻辑思维水平MECE 原则(Mutually Exclusive Collectively Exhaustive)的中文意思是“相互独立,完全穷尽”,简而言之,能够做到不重叠、不遗漏,兼顾排他性和完整性。MECE 原则是麦肯锡提出的一种结构化思考方式,无论是报告撰写,提案演讲,业务分析,它是一种很好的思维方式。LeetCode.剑指56:Ipublic class _56_I数组中数字出现的次数 { public static void main(String原创 2022-01-24 19:26:03 · 705 阅读 · 0 评论 -
设计模式——代理模式:CGLIB动态代理
前言关于jdk实现代理模式的AOP代理和详解主要放在本文中:设计模式——代理模式:JDK静态代理和动态代理的实例和实现。本文相对于jdk的代理模式,内容较为少,主要体现cglib代理模式实现动态代理AOP和cglib实现动态代理AOP的区别以及实例Demo。CGLIB和JDK实现AOP的区别JDK动态代理只能为接口实现动态代理。而不能对没有通过接口定义业务方法的类动态代理(因为jdk代理实现的实例对象会继承Proxy类,java的单继承原则使得他不能代理实现继承类对象);JDK的动态代理通过Pro原创 2022-01-08 18:22:04 · 781 阅读 · 0 评论 -
设计模式——工厂模式(简单、工厂方法、抽象工厂)详解
为什么要用工厂模式 为什么要使用工厂模式创建工厂对象?在业务实现过程中创建的对象可能是简单的对象,也可能需要进行复杂的逻辑加工来进行赋值逻辑处理等操作。为了解耦生成复杂对象(需要逻辑加工)和主业务逻辑之间的耦合度,采用工厂模式来解耦,使得逻辑加工在工厂中进行。 追加功能的时候不用修改代码,直接新增;比如说一个computer新增一个light。工厂模式的类别工厂模式我们可以由简到难分为:简单工厂工厂方法抽象工厂简单工厂 抽象化产品,工厂中有逻辑加工用于具体判断生成哪一个产品,进行原创 2022-01-08 16:46:57 · 812 阅读 · 0 评论 -
自定义类加载器和双亲委托机制
类加载器简述类加载器继承加载类路径(引导)Bootstrap ClassLoader%JAVA_HOME%\jre\lib\下的jar(jre核心库)(扩展)ExtClassLoaderextends URLClassLoader%JAVA_HOME%\jre\lib\ext目录下的jar(应用)AppClassLoaderextends URLClassLoader加载当前引用的classpath的所有类*Bootstrap ClassLoader是由原创 2021-11-11 19:12:38 · 606 阅读 · 0 评论 -
泛型和不定项参数详解(Java)
前言 泛型是基础,主要这次是记录下不定项参数,顺便记一下泛型,是比较简单的记录。 我们无法动态生成类,但是可以用多态生成不同的类对象。 值得提及的是:泛型和不定项参数都是JDK 5 中引入的新特性。泛型简单的使用public class GenericClass{ String str; public <T> GenericClass(T arg) { str = String.valueOf(arg); }}java 中泛型标原创 2021-10-22 14:20:36 · 1462 阅读 · 0 评论 -
MyBatisPlus的整合(springboot)和使用
简介Mybatis-plus是国产的第三方插件,它封装了许多常用的CURDapi,免去了我们写mapper.xml的重复劳动,这里介绍了基本的整合SpringBoot和基础用法,这个整合过程遇到的常见问题见:。至于lombok,可以用,可以不用,最好还是慎重考虑一些。如何查看对应的依赖关系如果使用的是mybatis-spring-boot-starter则需要多查看一个MyBatis Spring Boot AutoConfigure相关依赖。依赖引入免去spring- boot项目已经存在的s原创 2021-10-22 14:18:56 · 1048 阅读 · 0 评论 -
SpringBoot升级Mybatis为MybatisPlus遇到的问题及解决
前言 MP的安装使用正如他官网说的异常简单,但是在原有的Mybatis项目兼容Mybatis-Plus还是遇到了些许问题:MyBatisPlus的整合(springboot)和使用。 先说结论: 检测依赖是否正确引入; 检测使用的BaseMapper是否正确的依赖; 检查POJO对应表名称,字段名称是否对应,若表存在主键,需要指定POJO中对应主键(用注解 @TableId 注解表 ID 主键); 检查是否被扫描到Dao:@MapperScan; a原创 2021-10-22 14:17:44 · 4497 阅读 · 0 评论 -
FlinkSQL动态语法验证器提取
前言本文编写2021.2.25从官网的资料来看,DDL数据源到运行流程如下:图片来源官网那么关于建立动态表后,执行的FlinkSQL语句的语法是否正确,我们应当在Planning中进行。生产消费者FlinkSQL使用DDL创建Kafka生产和消费者Git项目的SQL语句语法校验缺点:无上下文环境,单纯的语法校验。https://github.com/zhp8341/flink-streaming-platform-web关于该部分代码:https://www.jianshu.com原创 2021-09-28 16:38:19 · 990 阅读 · 0 评论 -
字符串三种方式切割:split、substring、StringTokenizer
前言在进行JSON数据采集的时候,对于单个节点数据,可能存在多个分隔符分隔数据。那么对于数据1,2,3|4,5,6我们需要依据分隔符的来进行分割切分。有三种方法:String.split方法StringToken方法subString拼接方法split存在的问题split方法本质上是使用正则表达式来进行切割的,所以我们在使用他的时候对于像:|这种转义字符进行切割的时候就出现问题了:String str = "1|6|9";System.err.println( Arrays.toSt原创 2021-09-05 14:48:48 · 25720 阅读 · 2 评论 -
设计模式——代理模式:JDK静态代理和动态代理的实例和实现
前言 代理模式,我们这里结合JAVA的静态代理和动态代理来说明,类比Spring AOP面向切面编程:增强消息,也是代理模式。 而我们的静态代理和动态代理,与(service)接口和(serviceImpl)接口实现类有什么区别呢?静态代理的概念与其在理解上类似,可以说静态代理是实现类的增强消息。而且,静态代理针对的是所以实现接口的实现类(通过向上转型实现)。静态代理实现简述 本质上是一接口一代理,对该接口的所有实现类进行"增强"(额外)操作: 如下例:human接口有两个实现类:m原创 2021-08-22 13:24:55 · 728 阅读 · 1 评论 -
自定义比较器Comparator接口和Comparable接口及详解String.compareTo方法的使用
前言 Comparator是一个位于java.util包的接口(interface),一般由Collections.sort()方法和Arrays.sort()实现:使用主要实现它的compare方法:new Comparator<Object>() { @Override public int compare(Object o1, Object o2) { .... }} 其中如果数组为对象数组原创 2021-08-02 14:12:26 · 1618 阅读 · 1 评论 -
简记fastjson和gson两种json的java解析
前言本文简单随手记业务遇到的需求,后续可能会更新。fastjsonalibaba的fastjsonJSONObject jsonObject = JSONObject.parseObject(result);String status = jsonObject.getJSONObject("rtResponse").getString("rt_code");List转SON字符串//List<T>->JSON字符串List<Node> list = ne原创 2021-07-23 17:59:56 · 430 阅读 · 2 评论 -
Json万能匹配模板获取末端key+value数据
前言源码来自利用fastjson的:fastjson 解析无线层级json的所在级数及其key:value。本文进行实操记录以及分析说明和使用意见:最终解析的是所有的key:value形式。对于实际的多层级结构json的节点数据定位并不友善,建议采用jsonPath去定位获取:JSON串任意层级数据的获取:jsonpath。且jsonpath亦可解析出这种数据不过会多很多完整的父类层级的数据,需要筛选。源码 public static void parseJsonMap(Map.Entry<S原创 2021-07-23 17:54:29 · 685 阅读 · 0 评论 -
JSON串任意层级数据的获取:jsonpath
前言 使用背景:前端输入模板json串,使用ztree展示,用户构选节点,解析指定的四种格式JSON串数据(发送kafka)。 如何定位到选中的节点的数据呢?我们这里采用一个jsonpath来存储定位,jsonpath的选择有:1、fastjson;2、jaywayJsonPath。fastJsonfastJson也ok:官方JSONPath介绍fastjson 1.2.0之后的版本支持JSONPath。这是一个很强大的功能,可以在java框架中当作对象查询语言(OQL)来使用。原创 2021-07-23 17:45:25 · 4833 阅读 · 2 评论 -
Lombok的使用和安装
文章目录前言安装Lombokeclipse下载lombok插件选择安装的sts程序Idea下载lombok插件引入依赖包含注解类上使用两层作用@Setter & @Getter属性上使用参考前言每次使用类对象进行mybatis操作,新增/修改,总要重复的重新自动生成get、set、toString方法,使用lombo使其自动化生成简化无效劳动。需要做两点操作:安装对应IDE的Lombo插件引入相关Maven依赖安装Lombokeclipse下载lombok插件https://pr原创 2021-05-21 15:33:21 · 734 阅读 · 2 评论 -
Spring自定义注解
前言注解本身能够包含元注解,元注解被用来注解其它注解。注解的生命周期有三个阶段:1、Java源文件阶段;2、编译到class文件阶段;3、运行期阶段。四种元注解@Retention注解: 只能用于修饰一个Annotation定义,用于指定该Annotation的生命周期。RetentionPolicy取值为SOURCE,CLASS,RUNTIME。RetentionPolicy.SOURCE: 只能保存在源代码(.java文件)中,当编译时,会被丢弃;RetentionPolicy.CLASS原创 2021-05-18 18:26:48 · 657 阅读 · 0 评论 -
Lambda表达式分析和使用
Lambda表达式接口 Lambda是一个匿名函数,作用是返回一个接口的实现对象。其中使用Lambda表达式可以对某些接口进行简单的实现,这里的某些指的是:Lambda 规定接口中只能有一个需要被实现的方法,不是规定接口中只能有一个方法。这里额外注意JDK8比较与先前版本的特性:default方法。default修饰的方法就不用必须被实现。default修饰方法只能在接口中使用,在接口种被default标记的方法为普通方法,可以直接写方法体。也正因为他不是抽象方法(为普通方法)。所以接口A和B有原创 2021-01-22 10:02:25 · 1019 阅读 · 2 评论 -
布隆过滤器及demo代码(含redis布隆过滤器demo)
前言首先我们先了解,布隆过滤器存在的主要存在意义:在极端处理数据量下(海量数据)仍旧保持一种可用的集合判断方案。结构构造位(Bit):即比特,非0即1,是一个二进制数据单位。那么我们判断集合中的数据是否存在也可以用这么个“是否”的单位来存储,类似的在Redis中有Bitmap数据类型:Redis(四)Redis的三种特殊数据类型:GEO、Hyperloglog和Bitmap。这里举个例子: 0-9十个数字,我们有一百个数字(0-9),随机抽出,如何快速判断凑齐了0-9,建立一个十个位置来存放原创 2020-12-01 17:47:01 · 990 阅读 · 0 评论 -
SprinBoot配置拦截器和拦截情况分析
依赖需要引入web依赖,无论是HandlerInterceptor还是WebMvcConfigurer接口均在这个包里面,是不是又回到了SSM数据的控制参数。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> .原创 2020-11-20 12:02:22 · 727 阅读 · 2 评论 -
匿名对象的值传递
前言在学习线程池的时候,发现采用创建匿名对象的时候,匿名对象内外的传递并非形参通用传递。这不经让我回忆起在校期间用SWING编写的一个socket音乐播放器在监听器里面也遇到过同样的问题:JList实现随意切换歌曲、更新线程以及问题分析,时间久远了,应该是采用全局变量解决的,当初以为是十天的课设,时间仓促,未来得及深究。这次来分析一下。原创 2020-11-08 14:31:55 · 755 阅读 · 4 评论 -
将后台对象集合(List)传入前台并初始化数据
进入前台加载页面ajax请求数据(类似于windows.onload):后台获取对象集合并以JSON数组的形式返回:解析数据:原创 2020-10-16 16:53:41 · 1035 阅读 · 0 评论 -
Ajax传递数组到后台的两种方式
直接传输不可行第一种将ajax参数传递修改为tradition:traditional: true$.ajax({ xhrFields: {withCredentials: true}, async: true, url: basePath + "/consumer/work", type: "post", dataType: "json", ...原创 2020-09-15 16:40:30 · 2417 阅读 · 0 评论 -
通俗的深入解析notify()/notifyAll()和wait()方法
- notify()/notifyAll()和wait()notify()/notifyAll()唤醒单个/所有使用了wait()方法的线程,他们三个一般再synchronized锁住的代码块里面使用,所以说唤醒wait()的方法可不止一个哦~...原创 2020-04-13 00:54:27 · 1772 阅读 · 2 评论 -
JAVA线程基础看这篇文章就够了
JAVA线程基础看这篇文文章就够了进程和线程生命周期和五种状态:多线程的实现多线程运行机制资源共享Thread的常用方法同步和死锁同步如何解决?死锁进程和线程进程-进程是程序的一次动态执行过程,每个进程都有自己独立的内存空间。由操作系统的知识我们知道了,单核CPU一般通过时间片轮转的方法,将CPU的不同使用时间段分配给不同的进程,这样可以使得所有程序都在同时运行一样。线程线程是进...原创 2020-04-11 23:20:16 · 338 阅读 · 2 评论 -
并发之volatile标记位为何不适合于停止线程且与interrupt中止线程原理
volatile标记位为何不适合于停止线程且与interrupt的关系Volatile解释Volatile标记位实现停止线程非一定条件下的volatile标记位Interrupt中止线程原理Volatile解释volatile 是一个类型修饰符,作为一个指令关键字使用。如: public volatile boolean is_stop = false; volatile 保证修饰数据可见性...原创 2020-04-07 13:24:32 · 575 阅读 · 2 评论 -
获取JSON文本(复嵌对象)转换指定JSON数据并Ajax实现数据初始可视化【附上echarts地图官方数据形式json文件数据】
前言这里简单采用固定数据实现了以百度地图为基准的数据映射,那么可以看到全国各地的geoCoord(经纬度),完全可以采用本地导入json文本的来减少代码量。于是乎我在网上找到了一个老哥写的json文本(后来证实不是很全。具体是哪位记不得了就不写引用了,原谅我。),它的文件格式是这样子的:PS:阿里云geoJson获取 以及http://geojson.io/[ { ...原创 2020-04-05 00:45:14 · 2661 阅读 · 5 评论 -
高级UI组件之树(JTree)
简略的说就是节点(DefaultMutableTreeNodes)加内容,内容再加内容,(前内容)便子节点。package test;import java.awt.EventQueue;import javax.swing.JFrame;import javax.swing.JPanel;import java.awt.BorderLayout;import javax.swi...原创 2018-05-12 11:13:50 · 473 阅读 · 0 评论 -
Swing高级UI之表格
注意table的参数(Object[] [],Object[])就行了。class WinTable extends JFrame implements FocusListener, java.awt.event.ActionListener{ private Container con = this.getContentPane(); private Object data[] []...原创 2018-05-12 11:11:15 · 907 阅读 · 0 评论 -
详细解析死锁形成的原因
首先,了解死锁,先简略了解,代码块的锁:synchronized (对象){} 锁住参数对象。 synchronized对象和内容访问单一; 简略扫过一下,死锁和非死锁代码:死锁:class Zhangsan{ // 定义张三类 public void say(){ System.out.println("张三对李四说:“你给我画,我就把书给你。”") ; } p...原创 2018-05-11 21:30:25 · 306 阅读 · 1 评论 -
JList实现随意切换歌曲、更新线程以及问题分析
如果在JList中添加一个ListSelectionListener,在监听到动作之后进行播放音乐。如果在播放过程中进行歌曲切换,那么先前进行播放的进程无法关闭,会造成多个播放进程同时运行。 如何解决这个问题呢? 解决方法如下: public String listener(JButton b1, JButton b2, JButton b3) { list.addListSel...原创 2018-05-11 21:14:55 · 392 阅读 · 4 评论