自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(81)
  • 问答 (2)
  • 收藏
  • 关注

原创 使用设计模式基于easypoi优雅的设计通用excel导入功能

处理器抽象实现类。

2023-10-27 18:42:28 401

原创 【JUC-10】cyclicBarrier 循环屏障

是Java并发编程中的一种同步工具,它允许一组线程在达到某个共同点之前相互等待。方法进行等待,当所有线程都到达屏障点时,它们被释放,可以继续执行后续操作。可以用于将多个线程分阶段地执行,并在每个阶段结束时进行同步。时,需要指定参与线程的数量。每个线程在到达屏障点之前调用。的工作原理是通过一个可重用的屏障来实现的。

2023-07-05 23:58:11 237

原创 【JUC-9】CountdownLatch 同步计数器

是同步器的一种, 也是基于AQS实现的. 是一种倒计时同步器. 当倒计时为0时, 唤醒所有工作线程.

2023-07-05 23:56:03 278

原创 【JUC-8】Semaphore 信号量

信号量, 是用来控制线程访问共享资源的数量. 它维护了一个可用的许可数量,线程在访问资源之前必须先获取许可,当许可数量不足时,线程需要等待其他线程释放许可。线程访问完资源后,需要释放许可,以便其他线程可以获取。semaphore自己实现的sync源码, acquire最终调用的是nonfairTryAcquireShared方法。acquire方法底层还是通过AQS来控制工作线程数量的。

2023-07-05 23:52:50 206

原创 【JUC-7】ReentrantLock (可重入锁)基础

是一个可以被打断的获取锁操作, 相当于是支持interrupt()方法的lock()方法. 普通的lock()方法如果被其他线程阻塞, 是无法通过interrupt()方法打断的, lockInterruptibly()方法, 是在加锁的时候如果被阻塞, 允许被打断.方法获取任务执行的时候, 队列会判断当前队列中是否存在等待中的任务, 如果存在, 则取出执行, 如果没有, 则进入notEmpty Condition等待. 源码如下。线程池从队列获取任务, 队列中没任务, 则线程进入notEmpty等待。

2023-07-04 23:10:57 126

原创 【JUC-6】AQS介绍,基于AQS实现自己的锁

AbstractQueuedSynchronizer(抽象队列同步器,简称AQS)出现在JDK 1.5中。AQS是很多同步器的基础框架,比如ReentrantLock、CountDownLatch和Semaphore等都是基于AQS实现的。除此之外,我们还可以基于AQS,定制出我们所需要的同步器。注意AQS是是, 并不是。

2023-07-03 00:03:13 145

原创 【JUC-4】线程池实战应用

JDK提供的工具类Execurtors创建线程池(), 列举几个Executors中创建线程池的方法;查看Executors的源代码发现, 它创建线程池也是通过来创建线程池的. 当然其中有一些特殊的线程池也不是通过来创建的。比如方法就是通过来创建线程池的. 也有通过ScheduledThreadPoolExecutor创建调度线程池的方法.实际开发中, 也是经常通过ThreadPoolExecutor通过自定义指定核心线程数/最大线程数/缓冲队列/拒绝策略 来创建线程池的.unitworkQueue​。

2023-07-02 23:59:59 125

原创 【JUC-5】java多线程中的分治框架Fork/Join

Fork/Join是JDK 1.7加入的新的线程池实现,它体现的是一种分治思想,适用于能够进行任务拆分的cpu密集型运算所谓的任务拆分,是将一个大任务拆分为算法上相同的小任务,直至不能拆分可以直接求解。使用ForkJoin框架需要将逻辑操作进行分治. 比较适合可以使用动态规划、回溯、递归等算法实现的逻辑。比如快速排序、二分查找,可以使用ForkJoin来提高运算能力。Fork/Join在分治的基础上加入了多线程,可以把每个任务的分解和合并交给不同的线程来完成,进一步提升了运算效率基本用法。

2023-07-02 23:59:22 299

原创 【JUC-3】LockSuport介绍

如果调用park()方法时已经满足解除阻塞的条件,则park()方法立即返回,否则线程将被阻塞。方法:unpark()方法用于解除通过park()方法造成的阻塞状态,使得被阻塞的线程可以继续执行。unpark()方法可以指定解除阻塞的线程,即使该线程尚未进入阻塞状态,下一次调用park()方法时也会立即返回。方法的先行发生性:unpark()方法具有先行发生性,即在调用park()方法之前调用unpark()方法,被阻塞的线程调用park()方法时可以立即返回,而不会阻塞。_mutex 互斥量。

2023-07-02 23:57:16 67

原创 【JUC-2】Synchronized关键字相关知识

每个JAVA对象都可以关联一个Monitor对象, 如果使用synchonized给对象上锁(重量级)之后, 该对象头的Mark Word就被设置指向Monitor对象的指针, Mark Word中原本的信息如hashcode就会被存到Monitor对象中, 在释放锁的时候, monitor会将这些属性还原到Mark Word中。偏向锁, 锁对象的mark word中记录的是线程id, 当线程重入加锁时, 省去了判断mark word中的地址是否为锁记录的地址.

2023-07-02 23:54:17 112

原创 【JUC-1】java多线程线程基础知识

在上面的案例代码中, t.join()方法会让main方法进入wait等待. 阻塞的是main方法. 当t1线程执行完run方法逻辑后. JVM底层就会调用notify方法, 唤醒持有t1锁对象的线程.(join()方法是被synchonized修饰的, 锁对象就是线程对象)Runable/Callable接口的实现, 都是重写其中的run/call方法, 实现任务逻辑, 再由线程执行器(可以是Thread类,也可以是线程池)并发执行run/call的逻辑.JVM唤醒join源码。

2023-07-02 23:43:43 173

原创 oracle服务器的CPU占用率一直100%排查方式

公司开发、测试、演示环境,三个环境的oracle服务器无论服务器是否空闲, CPU的占用率一直是100%, 一直也没有找到问题原因,今天就花了一整天时间研究这个问题。

2023-06-28 16:29:51 4942 1

原创 十进制转二进制为什么最后需要反转一下

十进制转二进制方法对十进制数字取余,余数结果拼接再反转就是二进制 private static String decimal2Binary(int num) { StringBuilder sb = new StringBuilder(); while (num != 0) { sb.append(num & 1); // 取当前num最低位二进制值 num = num >> 1;

2022-05-01 19:37:34 803

原创 RabbitMq(四)延时队列,订单过期,取消支付场景

延时队列RabbitMq延时队列实际应用场景基于死信队列的延时队列基于延时交换机的延时队列延时队列图解SpringBoot伪代码配置类生产者消息的TTL和队列的TTL总结RabbitMq延时队列实际应用场景比如,boss让你开发一个30分钟客户不付款就取消订单的场景;如果在促销活动期间,肯定会有大量的未付款的订单数据,如果用轮训,或者是redis失效key来作为处理方案,肯定会被CTO骂死;因为,如果高频次轮训,虽然能保证比较及时的取消订单。但是无疑给系统造成了很大压力。如果用redis失效key来做

2021-11-05 11:15:52 4414 4

原创 RabbitMq(三)死信队列

死信队列详解什么是RabbitMq死信队列死信队列模式图解springboot配置代码死信队列中的消息特性死信队列实际开发中应用场景什么是RabbitMq死信队列当一条消息在队列中出现以下三种情况的时候,该消息就会变成一条死信。消息被拒绝(basic.reject / basic.nack),并且禁止重新进入队列;requeue = false消息TTL过期队列达到最大长度死信交换机、死信队列其实跟普通的交换机、队列是一样的之所以叫死信是针对其功能特征而言的。正常的业务队列发生预期之外的异

2021-11-03 19:17:56 1369

原创 RabbitMq(二)一文彻底弄懂RabbitMq的四种交换机原理及springboot实战应用

四大交换机工作原理及实战应用交换机概念direct 直连交换机工作模式图解springboot代码Fanout扇出交换机工作模式图解springboot代码Topic主题交换机工作模式图解springboot代码header交换机交换机概念交换机可以理解成具有路由表的路由程序,仅此而已。每个消息都有一个称为路由键(routing key)的属性,就是一个简单的字符串。最新版本的RabbitMQ有四种交换机类型,分别是Direct exchange、Fanout exchange、Topic excha

2021-11-02 20:46:16 3850 2

原创 RabbitMQ(一)防止消息丢失,详细讲解,涵盖所有场景

消息丢失场景MQ消息丢失场景主要有三个:1.消息生产者,发送消息后,rabbitmq服务器没有收到;导致消息丢失2.rabbitmq收到消息后,没有持久化保存,导致消息丢失3.消费者收到消息后,没来得及处理,消费者宕机,导致消息丢失1、生产者发送消息没有发送到rabbit交换机解决方案:消息异步确认机制(confirm机制)在集成springboot项目中;通过配置文件开启confirm机制spring.rabbitmq.host=localhostspring.rabbitmq.port

2021-10-28 16:40:13 922

原创 ireport 出现 Font ‘微软雅黑‘ is not available to the JVM

linux服务器部署ireport项目出现 Font ‘微软雅黑’ is not available to the JVM. See the Javadoc for more details.网上说的添加linux字体库,但是我是docker容器,而且没有字体插件,内网环境无法安装;直接导入微软雅黑并不生效于是发现可以从项目层面进行解决解决办法:1、把需要用到的字体(可以直接拷贝windows系统的C:/Windos/Fonts 下的相关字体)拷贝当前项目的根目录下(如:springboot项目的

2021-09-16 11:41:11 1694

原创 npm ERR!Invalid dependency type requested: alias解决方法

问题描述在新公司搭建前端环境时,由于新公司开发环境隔离,使用的是nodejs比较老的10.1.3版本,其搭载的npm为6.4.3版本;在进行项目依赖安装时.使用命令报错;npm install报错: npm ERR!Invalid dependency type requested: alias百度了很多,都对不上问题.最后谷歌发现,alias 低版本的npm不支持.必须要6.9版本以上;解决问题方法一单独升级npm版本,升级为>6.9版本的npm方法二直接升级nodejs,其自带

2021-04-10 13:34:16 31494 7

原创 mybatis-plus使用笔记

POM依赖<?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/x

2021-04-05 14:47:25 200

原创 redis超高频面试题,多路复用IO模型,AOF重写机制,过期策略,淘汰策略

一 、redis是单线程的为什么这么快主要原因是redis采用了多路复用型IO;那么什么是多路复用IO模型?多路复用IO模型阻塞IO,在获取client连接(客户端连接服务端)以及数据读取,这两个操作是阻塞的;下面简单用伪代码示意弊端 : BIO每次客户端连接都会抛出线程.不管有无数据传输.浪费cpu资源public class SocketTest { public static void main(String[] args) throws Exception { Se

2021-03-27 03:28:24 1147

原创 threejs学习(十五)glb/gltf格式模型文件压缩--gltf-pipeline

由Richard Lee和Cesium团队用来优化glTF的工具https://github.com/CesiumGS/gltf-pipelinecesium团队是专注gis开发的将glTF转换为glb(并反向)将缓冲区/纹理保存为嵌入文件或单独文件将glTF 1.0模型转换为glTF 2.0应用Draco网格压缩使用npm全局安装gltf-pipeline工具npm install -g gltf-pipelinegltf-pipeline相关命令# 将glTF转换为glbgl

2021-03-15 17:24:53 3263

原创 springboot2.x集成websocket,Vue2.x使用websocket,完整前后分离通信demo

前言什么是websocketwebsocket协议WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duple)。一开始的握手需要借助HTTP请求完成。通俗的来讲,websocket是客户端与服务端建立连接之后,客户端可以监听到服务端发来的消息,服务端也可以监听到客户端发来的消息。java后端构建websocket服务1.依赖引入 <dependency> <groupId>

2021-02-25 15:11:08 445 1

原创 threejs学习(十四)----uv贴图实现偏移动画

UV贴图用通俗易懂的例子来描述就是;把一张展开的世界地图包裹到一个球体上,让这个球体成为一个地球仪;threejs实现UV动画本例直接从模型中取出uv纹理贴图;进行offset;也可以通过代码构建纹理,进行贴图;实现动画// .....................// 加载模型代码 loader.load("/static/belt2.glb", function (gltf) { meshList = gltf.scene.children; //

2021-02-01 12:00:33 2137

原创 threejs学习(十三)相机缓动效果;

这种效果相机缓慢移动到另一位置,而不是相机位置直接改变;给用户一种更良好的体验;此效果需要导入 threejs的tweenjs包;import { TWEEN } from "three/examples/jsm/libs/tween.module.min.js"; // tween 缓动动画 // oldp 相机原位置position // oldT 原控制器位置 // newP 相机新位置 // newT 控制器新位置moveCamera(oldP, ol

2021-02-01 11:46:29 1750 1

原创 threejs学习(十二)后处理通道,outline模型边框高亮

效果如下代码initComposer() { // 初始化效果编辑器 composer = new EffectComposer(this.renderer); }, initRenderPass() { // 渲染通道配置 renderPass = new RenderPass(this.scene, this.camera); composer.addPass(renderPass); }, initOutli

2021-02-01 11:38:07 2475

原创 Cesium(二)相机旋转拉近地图视角,加载geoJson数据,鼠标事件

效果图代码<template> <div id="cesiumContainer"> <!-- <ProjectButton style="z-index: 1"></ProjectButton> --> <LeftChart style="z-index: 1"></LeftChart> <RightAlert style="z-index: 1"></RightAler

2021-02-01 11:23:39 1064 1

原创 Cesiumjs(一)原生cesiumjs集成进入vue框架

cesiumjs简介Cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎。Cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区域,并提供良好的触摸支持,且支持绝大多数的浏览器和mobile。cesiumjs集成进入vue项目,webpack配置webpack.base.config.js文件a.配置cesium的Source文件夹路径b.在output块儿中配置sourcePrefixc.配置alias块儿d.在model块儿中配置unknow

2021-02-01 09:41:32 2003

原创 threejs学习(十一)非全屏canvas下,射线拾取坐标错位问题

问题在非全屏状态下,使用射线进行模型拾取,如果按照官方例子来做,会出现屏幕坐标转换三维坐标有误差,导致拾取模型错误;非全屏canvas解决方案需要重新计算鼠标点击坐标位置 spriteClick: function (event) { event.preventDefault(); // 鼠标转换三维坐标 // this.mouse.x = (event.clientX / document.getElementById("other").offset

2021-01-28 10:55:07 1199 1

原创 threejs学习(十)threejs添加mousedown和mouseup事件无效

看到网上说是普通js版本和vue项目之间存在不同;普通的引入threejs可以使用mousedown和mouseup触发事件;但是vue项目无法使用这两个事件,得用pointerdown和pointerup事件pointerdown属性也是原生js属性// 鼠标按下事件document.addEventListener('pointerdown', this.spriteClick, false);参考文章地址windown属性:pointerdown...

2021-01-28 10:42:26 1373 3

原创 什么是多路复用IO

问题在redis,nginx等软件中,都提到了多路复用IO模型,那么什么是多路复用IO?解答多路复用IO,在linux系统中是内核处理程序网络IO的一种方式;linux系统中使用,查看系统调用命令# 安装系统调用命令描述手册yum install man-pages# 查看select命令man 2 select可以查看select命令描述通俗来讲,linux内核会监听多个进程(socket连接)的状态,并返回ready状态的程序描述符,由调用select指令的应用程序来进行IO读写;

2021-01-14 14:13:49 251

原创 linux系统内核跟踪java程序在linux系统上的执行过程--linux的strace指令

前言java程序通过JVM与系统底层指令交互,想要深入理解程序底层,如网络通信;就需要了解跟踪运行java程序时,系统内核做了什么;strace -ff 指令追踪java程序在linux内核上的运行# -ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号. strace -ff -o out java Test.class2.socket协议传输数据,BIO是指;建立客户端和服务端连接的时候阻塞;读取数据的时候阻塞;3.

2021-01-14 13:41:31 505

原创 centos7上安装docker

前言Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。社区版免费;本次安装社区版一、检查环境1.Docker只支持CentOS7以上版本,且内核要高于3.10;下方命令检查是否版本正确uname -r3.10.0-1062.18.1.el7.x86_64# 最前面的就是内核版本2.如果安装过旧版本,先卸载;较旧版本的Docker被称为docker或docker-engineyum remove -y docker \

2021-01-07 11:19:37 172

转载 hytrix注解属性详解----@HystrixCommand

@HystrixCommand(fallbackMethod = "xxx_method", // 指定降级方法 groupKey = "strGroupCommand", // 分组的key commandKey = "strCommarld", // 命令分组的key threadPoolKey = "strThreadPool", // 线程池key值,相同key共用一个线程池;这三个key都是划分线程池相关 commandProper

2021-01-06 19:26:28 1085

原创 sentinel服务限流,服务降级(浅理解)

服务限流限流是通过设置QPS/线程数,将超过阈值部分拒绝处理;服务降级服务降级是监控请求响应时间、响应异常比例、异常数量;超过限定阈值,将进行服务降级熔断,一定时间内不可用;@SentinelResource注解配置的自定义响应结果(fallback、blockHandler属性)如果同时配置,fallback和blockHandler;普通异常由fallback配置方法处理;违反sentinelDashboard的配置的异常(BlockException)由blockHandler处理;

2021-01-05 17:30:49 485

原创 nacos注册服务的时候报错server is DOWN now, please try again later!

上一篇搭建了nacos集群,注册服务的时候发生了报错客户端配置如下spring: application: name: order-nacos-service profiles: active: dev cloud: nacos: # nacos配置 discovery: server-addr: www.xxxxxxxxxx.com:7000 config: server-addr: www.xxxxxxxxx

2020-12-30 17:42:56 1790

原创 nacos单机模拟集群场景部署;同一台机器nacos不同端口启动

正常情况下修改nacos启动端口修改nacos/config/application.properties文件;将此处端口改为你想要的端口即可### Default web server port:server.port=8848单机环境,部署多个不同端口的nacos实例下载linux安装包;看文档https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html配置mysql数据源因为nacos内嵌derby数据库,集群环境需要配置统

2020-12-30 17:04:36 4023

原创 Maven打war包报错:webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update)

问题描述在使用springcloud的H版本构建新项目;将项目打包为war包时,打包插件报错Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project eureka-server: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executi

2020-12-25 16:31:12 6285 1

原创 eureka补充知识,微服务调用,服务发现,自我保护

eureka服务调用,达到负载均衡的效果一般情况,微服务之间的调用,是直接请求ip+port+uri的形式;当eureka作为注册中心,使用ribbon进行服务调用,可以进行负载均衡;请求地址要写为——http://spring.application.name+uri;RestTemplate 的配置如下; // 默认为轮询模式 @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTem

2020-12-24 09:56:58 118

原创 SpringCloud与SpringBoot的版本适配

SpringCloud版本命名规则springcloud的大版本用了英国伦敦地铁站的名称来命名,首字母越靠后表示版本号越大;当前已发布到H版;发布版本后缀说明 英文 中文 备注 BUILD-XXX 开发版 开发团队内部使用,不是很稳定 GA 稳定版 相比于开发版,基本上可以使用了 PRE 里程碑版 主要是修复了一些BUG的版本,一

2020-12-23 14:19:52 380

空空如也

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

TA关注的人

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