自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

跟心爱的人一起浪迹天涯

生命的意义在于拼搏

  • 博客(111)
  • 资源 (15)
  • 收藏
  • 关注

原创 JUC 多线程并发同步工具类原理及源码解析 聚合

**JUC(java.util.concurrent)**包下的类都是用于高并发, 多线程的, 包含了ConcurrentHashMap, 原子操作类, ReentrantLock, AQS等. 也是面试过程中最常问的java基础题. 搞清楚各工具类的原理有助于我们编程水平的提升, 也在面试的过程中增加自信心.ConcurrentHashMapHashMap的线程安全方式, 与1.7有不同, 使用cas和synchronize关键字实现线程安全ConcurrentHashMap原理解析Atomic原

2020-11-20 18:56:01 104

原创 Flink通过滚动窗口达到滑动窗口目的 节省内存和CPU资源(背压)

Flink在实时处理滑动窗口数据时, 由于窗口时间长, 滑动较为频繁, 导致算子计算压力过大, 下游算子计算速度抵不上上游数据产生速度, 会出现背压现象.需求: 统计6小时用户设备共同用户数, 每10min统计一次公共类@Data@AllArgsConstructor// flatMap转换对象private static class UserDevice { private final String userId; private final String deviceId;

2021-10-15 15:27:27 9

原创 Flink通过本地文件持久化算子状态并重启恢复数据

Flink在运行过程中, 难免会因为一些异常导致服务终止, 因为Flink的优势在于处理实时数据, 所以重启的话, 可能会导致部分数据指标不正确, 会丢失部分数据, 比如统计最近一小时数据, 运行半小时终止, 再次重启, 也只能重新开启统计. 但Flink可以通过state来解决这个问题, 将状态保存在内存, 文件系统或者db中, 持久化后, 即可实现故障后重启继续计算.以下示例是通过kafka作为数据源, 统计各message出现的次数, 利用keyBy, process和窗口富函数实现state初始化

2021-10-15 14:56:15 9

原创 使用elk监控文件根据ip地址在map地图上分布显示

ELK版本 7.13.1kibana.ymlmap.tilemap.url: 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}'下载geoIphttps://www.maxmind.com/en/accounts/596018/geoip/downloads解压到指定目录logstash.confinput

2021-08-18 12:11:16 49

原创 Flink从kafka消费消息并Sink消息到kafka

场景flink上游一般使用kafka, 因为可以充分利用flink的checkPoint保存状态, 实现高可用. 而由于Sink输出端数据量可能也比较大, 所以部分场景还是要Sink到kafka, 降低数据库或者其他组件压力代码import org.apache.flink.api.common.functions.FlatMapFunction;import org.apache.flink.api.common.serialization.SimpleStringSchema;import o

2021-07-25 19:29:37 51 1

原创 Flink消费Kafka并统计报警

模拟场景服务端异常时, 向kafka推送一条ALERT消息, flink解析消息, 如果连续10s钟有3次alert消息, 则发出报警消息实现方法在首次获取到alert消息后, 注册一个10s后的timer事件, 后续alert消息, 校验当前时间是否在timer有效期内, 如果不在则重置timer, 待timer到期时, 校验个数是否满足, 如果满足发出报警代码import org.apache.flink.api.common.functions.FlatMapFunction;import

2021-07-25 19:23:21 48

原创 Flink使用自定义Source Sink reduce aggregate统计最小值及平均值

模拟设备上报温度, 获取最低温度pom.xml<dependencies> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>1.12.4</version> </dependency> &

2021-07-20 16:40:57 93

原创 Windows下使用Grafana和Prometheus实现对SpringBoot项目的JVM实时检测

添加Prometheus支持pom.xml<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency> <groupId>io.micrometer</groupId

2021-07-15 11:33:29 43

原创 Windows下安装flink服务

下载点击链接到下载页 https://flink.apache.org/zh/downloads.html选择对应文件下载后解压启动下载包中没有启动bat文件, 所以需要创建对应文件flink.bat 用于执行task::###############################################################################:: Licensed to the Apache Software Foundation (A

2021-07-08 17:27:39 67

原创 Spring框架下使用策略模式

策略模式, 即根据不同的参数, 调用不同业务流程, 但各流程的逻辑基本类似.真实场景:支付路由, 根据不同的渠道参数, 进行不同的调用. 但具有类似逻辑: 参数校验->本地创建订单->发送请求->根据结果做不同的处理.AbstractChannel抽象类, 定义了各渠道的整体架构public abstract class AbstractChannel { public void handle() { check(); createOrd

2021-04-29 12:31:17 44 1

原创 Java使用easyexcel实现导入导出功能

Easyexcel是阿里开源的, 简单, 可快速集成的excel文件导入导出工具, 能够有效的节省内存, 避免出现OOM问题. 原理: 不是一次性将内容全部读取, 而是一行行读取, 从而降低内存的使用.pom.xml<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.7</versio

2021-04-28 10:25:40 155

原创 Elasticsearch基础知识笔记

Elasticsearch是一种基于Lucene开发的高性能,可扩展的分布式搜索引擎。与常用数据库索引不同,采用倒序索引(全文索引)方式实现,将内容信息进行分词拆装成关键字,然后对每个关键字建立索引。广泛应用在搜索,电商及各类资源型网站中。ES提供了Restful API及java开发接口,隐藏了原有Lucene的复杂性。实现了近乎实时的搜索功能,延迟控制在秒级内,可以使用集群方式达到大数据量的快速检索。类似数据库,ES也有与库、表及字段相对应的存储结构,分别为index,type,document。

2021-04-25 00:04:17 157 2

原创 SpringBoot整合ElasticSearch及MySQL实现简单插入/搜索/分页及排序

pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/mav

2021-04-20 18:19:01 92

原创 记一次开发BUG Sharding读写分离事务下使用select for update导致死锁

死锁场景select for update 为悲观锁,只有当前会话才能过去到锁,其他事务访问加锁数据会被阻塞。代码如下@Transactionalpublic void test() {userService.selectByIdForUpdate(1L);userService.increaseAmountById(1L, 10);}使用Sharding JDBC读写分离时,导致死锁。死锁原因使用Sharding JDBC后,当前事务第一个写之前的所有读操作都会优先读取从库,而事务内第

2021-03-30 21:45:43 129

原创 RocketMQ消息生产过程 源码解析

示例首先写一个生产消息的实例, 代码入口@Autowiredprivate RocketMQTemplate rocketMQTemplate;public String sendMsg(String topic, String msg) { Message<String> message = MessageBuilder.withPayload(msg).build(); SendResult result = rocketMQTemplate.syncSend(to

2021-02-28 13:17:47 108

原创 RocketMQ 基本原理及知识点

简介RocketMQ 是阿里旗下(后来被纳入到Apache旗下), 使用java语言开发, 支持集群高并发, 高吞吐量的开源消息队列.角色NameServer 保存了topic及broker的信息, 各NameServer间不通信, 功能类似于ZooKeeperBroker 保存消息的服务, 与NameServer保持长连接Queue 存放消息的队列, 实际存放的是消息的offsetProducer 消息生产者, 从NameServer获取broker信息, 将消息存入queue中Consum

2021-02-27 20:58:52 149 2

原创 自己手写一个starter完成方法异步调用 非代理方式 线程池

SpringBoot架构下, 默认开启了自动配置, 在启动后会自动扫描包下的/META-INF/spring.factories文件, 自动加载文件中配置的类.async-spring-boot-starterpom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSche

2021-02-04 20:14:35 62 1

原创 SpringBoot 自动配置启动流程 为什么没有执行selectImports方法

SpringBoot main方法所在类添加了注解@SpringBootApplication, 在此注解中添加了注解@EnableAutoConfiguration, 默认开启了自动配置@Import(AutoConfigurationImportSelector.class)public @interface EnableAutoConfiguration { ...}AutoConfigurationImportSelector实现了DeferredImportSelector接口,

2021-02-03 19:32:27 545 2

原创 Spring和JDK中观察者设计模式 Event事件监听

观察者设计模式特性被观察者有观察者的引用观察者不能主动发起操作, 需要等被观察者通知在JDK中通过继承Observable类作为一个被观察者, 实现Observer接口作为一个观察者模拟场景 天气变化, 任何狗做出不同反应public class WeatherObservable extends Observable { private int temperature; public int getTemperature() { return temperat

2021-01-27 10:48:03 92

原创 SpringBoot通过websocket实现web即时聊天

websocket通常用于即时通讯场景中, 在SpringBoot下也提供了jar支持spring-boot-starter-websocketpom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:

2021-01-24 00:10:11 190

原创 SpringBoot 自动配置启动 tomcat

SpringBoot之所以能有使用java -jar命令启动, 是因为内部嵌入了web容器jar包, 如tomcat, jetty… 分析下SpringBoot中tomcat加载流程.SpringBoot自动依赖spring-boot-autoconfigure-2.1.2.RELEASE.jar(参考版本), 在META-INF文件夹spring.factories文件, 开启了自动装配类ServletWebServerFactoryAutoConfigurationorg.springframewo

2021-01-22 18:00:39 558

原创 Spring Async注解 方法异步调用 用法 源码解析 以及错误使用解决方法

Async是Spring新加入的一种异步机制, 大多开发者也只是停留在会用的水平, 对其原理不太了解, 作为一名开发人员, 我们不仅要知其然, 更要知其所以然, 才能在项目开发过程中不会踩到不必要的坑.用法1.在SpringBoot启动类添加注解@EnableAsync@EnableAsync@SpringBootApplicationpublic class WebApplication { public static void main(String[] args) {

2021-01-17 01:27:08 148

原创 MySQL递归查询 获取某节点的各层父集和子集

表结构DROP TABLE IF EXISTS `s_menu`;CREATE TABLE `s_menu` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `parent_id` bigint(20) DEFAULT NULL COMMENT '父级菜单', `title` varchar(100) NOT NULL COMMENT '名称', `url` varchar(255) NOT NULL COMMENT '链接

2021-01-16 18:20:03 360 1

原创 解决java@RequestBody中枚举不匹配问题 空字符串转枚举异常

异常org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type *.**.**.TaskStatusEnum from String “”: value not one of declared Enum instance names: [0, 1, 2]; nested exception is com.fasterxml.jac

2021-01-15 13:16:08 1491 2

原创 利用Spring模拟FeignClient自己实现RMI远程调用

首先应了解FeignClient的原理, 参考文章 Feign远程调用过程 初始化/动态代理/负载均衡原理:在Application启动类中注入Enable,注解中Import导入ImportBeanDefinitionRegistrar实现类,在实现类中即可完成对BeanDefinition的注入,然后BeanDefinition的BeanClass设置成Feign的代理类,当调用方法时,调用代理对象的方法,完成http远程调用。本文直接用了POST发起远程请求,并且服务发起方和提供方在同一个服务中,

2021-01-04 20:15:17 206

原创 Spring核心类ConfigurationClassPostProcessor解析:Spring初始化 Bean扫描、Configuration类动态代理

Spring在初始化时会向容器添加6个BeanPostProcessor,其中最为重要的就是ConfigurationClassPostProcessor。ConfigurationClassPostProcessor是Spring容器初始化的核心类,实现了BeanPostProcessor的子接口BeanDefinitionRegistryPostProcessor。postProcessBeanDefinitionRegistry用来扫描并解析指定路径的类,生成对应的BeanDefinition,解

2021-01-04 11:21:22 137

原创 MySQL explain语法与各字段含义解析及示例

explain 用于MySQL中查询性能分析的工具, 可判断是否使用索引, 扫描记录数等使用语法explain sql语句;返回信息| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |id 查询序列号, 也代表了查询顺序 id越大越先执行select_type 查询类型SIMPLE

2020-12-03 11:51:38 58

原创 JVM GC 收集器 类加载 性能调优笔记

对象可回收引用计数法 循环引用可达性分析法 GC Roots对象栈中对象方法区中常量/静态属性对象本地方法栈中对象可回收区域新生代 老年代 永久区(废弃的常量/类)回收算法 标记不被回收的对象标记清除算法 碎片复制算法 浪费一半空间标记整理算法分代回收算法 新生代(分代/标记清理) 老年代(标记整理)收集器Serial 单线程 复制算法 stw 没有线程切换 效率高ParNew Serial多线程版本 可通过-XX:ParallelGCThreads限制线程个数Paral

2020-12-02 20:33:01 42

原创 SpringBoot添加Swagger2支持 可直接供前端及测试使用 生产环境禁用

pom.xml<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.7.0</version></dependency><dependency> <groupId>io.springfox</grou

2020-12-02 16:49:49 103

原创 idea和jvisualvm工具模拟sql查询导致OOM问题排查过程 经典面试

idea配置配置application启动参数, 记录发生OOM时dump一下堆信息-Xms100m -Xmx100m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof -Dfile.encoding=utf-8数据库添加数据delimiter $$SET AUTOCOMMIT = 0$$create procedure insert_data()begindeclare insert_count d

2020-12-01 17:34:35 83

原创 Spring解决循环依赖-源码分析

首先从doGetBean开始分析, 此时容器已初始化完成, 开始执行bean的初始化protected <T> T doGetBean( final String name, final Class<T> requiredType, final Object[] args, boolean typeCheckOnly) throws BeansException ...

2020-11-27 17:32:44 44

原创 Java自己实现一个LRU算法

LRU(Least Recently Used) 最近最少使用算法 在指定空间内, 存入元素时, 判断是否存在, 将其放置队列一端(如有取代旧元素). 当队满, 再添加新的元素时, 删除队列另一端的元素.由于元素会频繁移动, 所以不能使用Array, 应考虑使用链表实现.方案一LinkedHashMap 是一个保存了元素插入顺序的HashMap.accessOrder属性, 插入或获取元素时, 都会将其放入队尾.removeEldestEntry方法, 是否删除最老的元素, 每次插入元素时都会被执

2020-11-27 12:48:28 195

原创 ConcurrentHashMap原理解析

ConcurrentHashMap是HashMap在多线程下使用方式,采用分段锁原理。在JDK7和JDK8中实现原理不同, JDK7中使用标准分段锁,默认为16段,可设置,一旦设置不可修改,锁粒度大,通过ReentrantLock实现锁。JDK8中通过使用CAS和synchronize关键字实现,本文我们通过源码来解析ConcurrentHashMap的原理。数据结构ConcurrentHashMapd的组成是有数组+链表+红黑树实现的,JDK8中HashMap和ConcurrentHashMap结构类

2020-11-20 17:54:10 47

原创 Feign远程调用过程 初始化/动态代理/负载均衡

Feign Invoke 远程调用, 底层使用了ribbon, 对ribbon进行封装, 编程过程中不需要主要调用细节.EnableFeignClients在SpringCloud启动类中添加注解 EnableFeignClients@Import(FeignClientsRegistrar.class)public @interface EnableFeignClients { ...}FeignClientsRegistrarclass FeignClientsRegistrar

2020-11-19 12:55:57 589

原创 Eureka客户端源码解析 注册/心跳/本地刷新/下线

Eureka服务端与客户端交互是通过发送http请求完成的. 使用JerseyClient进行服务间通讯, Jersey是一个RESTFUL请求服务JAVA框架, 与常规的JAVA编程使用的struts框架类似, 它主要用于处理业务逻辑层.入口在Client包中找到启动类 重点EurekaClientAutoConfigurationorg.springframework.boot.autoconfigure.EnableAutoConfiguration=\org.springframework.

2020-11-18 20:01:04 158

原创 Eureka服务端源码解析 入口/注册/刷新/下线

Eureka服务端与客户端交互是通过发送http请求完成的. 使用JerseyClient进行服务间通讯, Jersey是一个RESTFUL请求服务JAVA框架, 与常规的JAVA编程使用的struts框架类似, 它主要用于处理业务逻辑层.入口在Server包中设置了启动类 spring.factororg.springframework.boot.autoconfigure.EnableAutoConfiguration=org.springframework.cloud.netflix.eure

2020-11-18 19:40:47 208

原创 ReentrantReadWriteLock可重入读写锁源码解析

ReentrantReadWriteLock 可重入读写锁,内部维持了ReadLock和WriteLock,分为公平锁和非公平锁,由于读锁和写锁使用了同一个Sync对象,所以如果第一次获取锁失败,都会被放入同一个队列中。底层使用了AQS,state高16位表示共享锁-读锁,低16位表示独占锁-写锁。1. 如果一个线程持有了读锁,不能再持有写锁2. 说明如果一个线程持有了写锁 可以再持有读锁3. 锁可以降级(写锁->读锁) 不能升级(读锁->写锁)源码public class Reent

2020-11-17 16:12:22 27

原创 Semaphore信号量使用及源码分析

Semaphore 信号量控制,用于动态指定同时执行线程个数。比如行车,指定总共10车道,有的车占2个车道,有的占1个,当车道被释放后其他车辆才能进入。Semaphore 底层是用AQS共享锁实现,通过改变state和线程占用信号量大小判断是否获取锁,有公平和非公平两个机制。公平锁效率低,不会出现线程饥饿现象,非公平锁并发量高,可能会出现线程饥饿现象。示例public static void main(String[] args) { int[] threadCount = new int[]

2020-11-17 12:35:48 46

原创 ReentrantLock可重入锁、公平锁、非公平锁源码分析

ReentrantLock 可重入锁,实现了公平锁和非公平锁两种机制,主要区别就是非公平锁会先获取锁,如果成功,会插队执行,而非公平锁会直接进入队列,依次执行。非公平锁并发量大,性能高,但是有可能出现线程饥饿现象。ReentrantLock 底层使用AQS独占锁为基础实现同步机制,重写了tryAcquire和tryRelease方法,分别用来获取锁和释放锁。可重入是通过exclusiveOwnerThread和state值来控制的,获取锁时判断是否是持有锁线程,如果是,获取成功,否则入队列。源码pub

2020-11-17 11:04:02 58

原创 CyclicBarrier和CountDownLatch源码解析

CyclicBarrier 循环内存屏障,对象可重复使用,用作多个线程同时满足一个条件,然后一起运行,比如打车,司机和乘客都到达之后,才能启动订单。底层使用了可重入锁,维护一个count,每次执行await方法,count减1,至0后,执行主线程,唤醒阻塞线程,并重置CyclicBarrier 对象。属性// 重入锁private final ReentrantLock lock = new ReentrantLock();// 释放锁条件private final Condition trip

2020-11-16 16:57:28 26

数据库实现学生成绩管理系统选课管理及ER图

使用数据库实现了学生成绩管理系统,包含了选修课程管理,用viso画出了数据库对应的E-R图,数据库sql文件直接导入到数据库即可

2014-07-13

解决动软代码生成器mysql下没有备注

完美解决动软代码生成器mysql下生成word或html文档时没有备注的情况。

2015-11-12

Web微信, SpringMVC使用Socket做聊天链接

使用WebSocket作为前后端连接方式, SpringMVC+JSP+WebSocket, 即时通讯, 最近聊天记录, 好友列表. 需要配置D盘下创建好对应文件, 图片需要配置nginx才可以访问: server { listen 8888; server_name localhost; location / { alias D://itchat4j/; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }

2018-07-27

通过ip查询当地天气信息

Java通过访问的ip获取城市信息,根据城市信息查询天气信息

2015-10-19

SpringCloud及SpringBoot整合使用, 包含zuul, eureka服务, mybatis做持久层

SpringCloud及SpringBoot整合使用, 包含zuul, eureka服务, mybatis做持久层, Maven模块划分: boot-test父模块, admin, remote-server, eureka-server, ruul-server, commons-api模块; 其中admin用来提供web服务模块; remote-server用来做服务端, 操作数据; eureka-serve作为服务的注册及发现; ruul-server则作为请求的路由和转发; commons-api则是数据表映射的实体.

2018-07-10

java统计excel并生成新的excel

使用java统计多个excel文档,分月份统计信息,并将结果生成新的excel文档

2015-10-28

SSH框架实现登陆、注册、分页、图片上传入门

ssh与mysql结合,实现web的基本操作,主要包含用户登陆、注册,分页显示用户、图片上传,简单,适合初学SSH2的童鞋。

2013-09-18

基于MVC的客户系统管理系统开发

采用jsp+servlet+javabean,数据库为MysqL

2013-03-25

Spring+Hibernate+Mysql简单搭建

Spring+Hibernate+Mysql整合,实现了简单查询及插入,便于新手入门学习。

2017-03-02

SpringBoot整合MyBatis MySql demo

整合SpringBoot和Mybatis简单的demo, 简单易学, 无配置文件, 只有application.properties配置

2018-04-08

Java使用Jsoup抓取网页关键信息并入库

使用jsoup抓取网页列表信息,并入库,使用了PreparedStatement防止sql注入小demo。

2017-08-08

java利用工具生成word文档

使用itext生成word文档,导入即可使用

2015-03-30

使用Jsoup抓取网页关键信息并入库 ip天气查询并发送邮件

使用Jsoup抓取网页关键信息并入库 ip天气查询并发送邮件

2017-08-09

ATM自动提款机

采用java技术设计,使用Mysql数据库,实现了各种功能

2013-03-25

SpringBoot整合Dubbo微服务

SpringBoot整合Dubbo, 分3个模块: api提供接口; service提供服务; mobile消费服务.

2019-08-15

空空如也

空空如也

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

TA关注的人 TA的粉丝

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