自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(84)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 smiley-http-proxy-servlet做代理application/x-www-form-urlencoded请求类型,报错failed to respond

smiley-http-proxy-servlet做代理application/x-www-form-urlencoded请求类型,报错failed to respond

2024-03-12 16:30:04 902

原创 畅谈RocketMQ重复消费7个根源问题

总得来说,RocketMQ中还是存在很多种导致消息重读消费的情况,并且官方也说了,只是在大多数情况下消息不会重复所以如果你的业务场景中需要保证消息不能重复消费,那么就需要根据业务场景合理的设计幂等技术方案。

2023-07-05 09:15:00 1395

原创 手写服务限流6种实现方式

总的来说,要保证系统的抗压能力,限流是一个必不可少的环节,虽然可能会造成某些用户的请求被丢弃,但相比于突发流量造成的系统宕机来说,这些损失一般都在可以接受的范围之内。前面也说过,限流可以结合熔断、降级一起使用,多管齐下,保证服务的可用性与健壮性。

2023-05-29 15:59:02 775

转载 Spring Boot 整合 MyBatis Plus实现多数据源的两种方式

log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印sql。-- Mybatis plus多数据源支持,版本与 mybatis-plus保存一致 -->map-underscore-to-camel-case: true # 驼峰转换。map-underscore-to-camel-case: true #驼峰转换。-- mybatis-plus代码生成器 -->cache-enabled: false # 是否开启缓存。

2023-04-17 16:14:09 566

原创 Java8异步任务CompletableFuture使用

从上面可以看出cf1任务完成需要2秒,cf2任务完成需要5秒,使用applyToEither组合两个任务时,只要有其中一个任务完成时,就会执行cf3任务,显然cf1任务先完成了并且将自己任务的结果传值给了cf3任务,cf3任务中打印了接收到cf1任务完成,接着完成自己的任务,并返回cf3任务完成;anyOf :CompletableFuture是多个任务只要有一个任务执行完成,则返回的CompletableFuture执行get方法时会抛出异常,如果都是正常执行,则get返回执行完成任务的结果。

2023-04-06 11:32:21 1383

转载 Java 生成各种 PDF 实战方案(图片、模板、表格)

本篇文章的重点还是在讲通过java生成pdf,其实如果是单纯的模板填充挺简单的,但是又要填充模板还要动态生成表格就比较麻烦了,因为如果在模板中画表格的框去生成的话,超过模板框的位置就会隐藏,我刚接到需求的时候也是有点难受,在网上也是找了大量的资料,研究了半天,发现好多都是你粘贴我,我粘贴你,最终我也算是搞成了,把这些整合一下,让大家用的好用一些,废话不多说,直接上代码!可以看到,我们在代码中并没有新开一页,只是加了一个间隙,就可以保证动态生成的表格和模板在一个页面,就此,基本上就算完成了。

2023-03-31 10:14:56 528 2

原创 利用设计模式、反射写代码

第一种代码重复是,有多个并行的类实现相似的代码逻辑。我们可以考虑提取相同逻辑在父类中实现,差异逻辑通过抽象方法留给子类实现。使用类似的模板方法把相同的流程和逻辑固定成模板,保留差异的同时尽可能避免代码重复。同时,可以使用 Spring 的 IoC 特性注入相应的子类,来避免实例化子类时的大量if…else代码。第二种代码重复是,使用硬编码的方式重复实现相同的数据处理算法。

2023-02-17 16:49:30 756

原创 全局异常处理

*** 错误状态码*//*** 错误提示*/

2023-02-16 17:27:58 81

原创 mybatis查询千万数据如何保证内存够用?mybatis流式查询

基本概念MyBatis 流式查询接口但构建 Cursor 的过程不简单方案一:SqlSessionFactory方案二:TransactionTemplate方案三:@Transactional 注解指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。流式查询的好处是能够降低内存使用。如果没有流式查询,我们想要从数据库取 1000 万条记录而又没有足够的内存时,就不得不分页查询,而分页查询效率取决于表设计,如果设计的不好,就无法执行高效的分页查询。

2023-02-13 10:39:49 402

原创 GC日志分析

GC 日志分析算是 JVM 调优中比较难的部分,今天这篇文章就来聊聊如何利用 JDK 现有的命令并且借助可视化工具如何去分析 GC 日志。

2023-01-04 14:08:36 1686

原创 MyPerf4J一个高性能、无侵入的Java性能监控和统计工具,有点东西!

随着所在公司的发展,应用服务的规模不断扩大,原有的垂直应用架构已无法满足产品的发展,几十个工程师在一个项目里并行开发不同的功能,开发效率不断降低。无法知道每个服务的运行情况,例如,某一台服务它目前的 QPS 是多少?它的平均延迟是多少,99% 的延迟是多少,99.9% 的延迟又是多少?如何评估服务的容量,随着服务的调用量越来越大,这个服务需要多少机器来支撑?采用内存复用的方式,整个生命周期只产生极少的临时对象,不影响应用程序的GC。当服务出现抖动时,如何判断是 DB、Cache 还是下游服务引起的?

2022-12-15 14:46:05 2662 1

原创 四层、七层负载均衡

所谓四层就是基于 IP + 端口的负载均衡;七层就是基于 URL 等应用层信息的负载均衡;同理,还有基于 MAC 地址的二层负载均衡和基于 IP 地址的三层负载均衡。所以我们可以换句换说:二层负载均衡会通过一个虚拟 MAC 地址接收请求,然后再分配到真实的 MAC 地址;三层负载均衡会通过一个虚拟 IP 地址接收请求,然后再分配到真实的 IP 地址;四层通过虚拟 IP + 端口接收请求,然后再分配到真实的服务器;七层通过虚拟的 URL 或主机名接收请求,然后再分配到真实的服务器。通过这个层层递进的变

2022-12-07 11:03:53 473

转载 分库分表原理

分库分表其实分库和分表是两个概念,只不过通常分库与分表的操作会同时进行,以至于我们习惯性的将它们合在一起叫做分库分表。分库分表是为了解决由于库、表数据量过大,而导致数据库性能持续下降的问题。按照一定的规则,将原本数据量大的数据库拆分成多个单独的数据库,将原本数据量大的表拆分成若干个数据表,使得单一的库、表性能达到最优的效果(响应速度快),以此提升整体数据库性能。简单的回顾一下分库分表的基础知识,接下来的文章会配合实战项目介绍在分库分表中的各个功能点。

2022-11-10 14:47:17 865

原创 java8 流Stream 高级使用

Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。熟悉Linux的同学对这种风格一定不陌生,因为它跟Linux的|管道符的思想如出一辙。上面这段话引用自runoob.com。

2022-10-11 10:15:10 766

原创 Thread.sleep(0);的作用

你好呀,我是喜提七天居家隔离的歪歪。这篇文章要从一个奇怪的注释说起,就是下面这张图:我们可以不用管具体的代码逻辑,只是单单看这个 for 循环。在循环里面,专门有个变量 j,来记录当前循环次数。第一次循环以及往后每 1000 次循环之后,进入一个 if 逻辑。在这个 if 逻辑之上,标注了一个注释:prevent gc.prevent,这个单词如果不认识的同学记一下,考试肯定要考的:这个注释翻译一下就是:防止 GC 线程进行垃圾回收。

2022-09-28 16:47:31 545

原创 Sentinel搭建与使用

Sentinel,中文翻译为哨兵,是为微服务提供流量控制、熔断降级的功能,它和Hystrix提供的功能一样,可以有效的解决微服务调用产生的“雪崩”效应,为微服务系统提供了稳定性的解决方案。随着Hytrxi进入了维护期,不再提供新功能,Sentinel是一个不错的替代方案。通常情况,Hystrix采用线程池对服务的调用进行隔离,Sentinel采用了用户线程对接口进行隔离,二者相比,Hystrxi是服务级别的隔离,Sentinel提供了接口级别的隔离,Sentinel隔离级别更加精细,另外Sentinel直接

2022-06-20 17:23:10 1664

原创 ForkJoin编程教学

一、概念1什么是fork/joinfork/join 秉承分而治之思想,从JDK1.7开始,Java提供Fork/Join框架用于并行执行任务。它的思想就是讲一个大任务分割成若干小任务,最终汇总每个小任务的结果得到这个大任务的结果。如下图:2.什么是分而治之可以简单的理解为:将规模为N的问题,当N<阈值,直接解决;当N>阈值,将N分解为K个小规模子问题,子问题互相对立,与原问题形式相同,将子问题的解合并得到原问题的解。3.fork/join的工作窃取思想假如我们需

2022-05-07 15:08:03 373

原创 Java项目构建基础:统一结果,统一异常,统一日志

统一结果返回 统一结果的一般形式 结果类枚举 统一结果类 控制层返回 统一异常处理 @ControllerAdvice 自定义全局异常类 统一异常处理器 控制层展示 统一日志收集 Logback 配置 日志收集异常信息 GitHub 源码 统一结果返回目前的前后端开发大部分数据的传输格式都是..

2022-04-25 15:46:20 182

原创 后端必备:如何排查问题以及 JVM 调优思路

今天跟大家就 CPU、磁盘、网络及内存方面的问题,聊聊如何排查和调优。1 Linux CPU 过高,怎么排查问题1.1 CPU 指标解析平均负载平均负载等于逻辑 CPU 个数,表示每个 CPU 都恰好被充分利用。如果平均负载大于逻辑 CPU 个数,则负载比较重。进程上下文切换 无法获取资源而导致的自愿上下文切换; 被系统强制调度导致的非自愿上下文切换。 CPU 使用率 用户 CPU 使用率,包括用户态 CPU 使用率(user)和

2022-04-25 11:17:41 447

原创 Nacos配置中心交互模型原理

对于Nacos大家应该都不太陌生,出身阿里名声在外,能做动态服务发现、配置管理,非常好用的一个工具。然而这样的技术用的人越多面试被问的概率也就越大,如果只停留在使用层面,那面试可能要吃大亏。比如我们今天要讨论的话题,Nacos在做配置中心的时候,配置数据的交互模式是服务端推过来还是客户端主动拉的?这里我先抛出答案:客户端主动拉的!接下来咱们扒一扒Nacos的源码,来看看它具体是如何实现的?配置中心聊Nacos之前简单回顾下配置中心的由来。简单理解配置中心的作用就是对配置统一管理,

2022-04-12 10:13:55 800

原创 windows10 无效ip 无法连接网络问题解决

windows10 无效ip 无法连接网络问题解决

2022-04-11 14:15:54 5185 1

原创 mysql的sql优化

sql优化关键

2022-03-23 09:15:41 157

原创 利用java8 stream将集合转成树形结构

可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父 id 来表示,为了降低数据库的查询压力,我们可以使用 Java8 中的 Stream 流一次性把数据查出来,然后通过流式处理。我们一起来看看,代码实现为了实现简单,就模拟查看数据库所有数据到 List 里面。实体类:Menu.java/** * Menu * * @author lcry * @date 2020/06/01 20:36 */@Data@Builderpublic class Menu

2022-03-14 10:15:00 1035 1

原创 数据分层详解ODS、DWD、DWM、DWS、ADS

详解数仓中的数据分层:ODS、DWD、DWM、DWS、ADS

2022-01-27 10:52:52 31354

原创 elasticsearch 工具类-java篇

java 中关于elasticsearch的工具类编写

2021-11-19 11:22:50 4668 2

原创 36个正则表达式,开发效率提高80%

收藏这36个正则表达式,开发效率提高80%写在前面我们在日常的Java开发中,经常需要处理一些字符串,这个时候正则表达式是非常有用的。几乎在所有的编程语言中都支持正则表达式。以下我将压箱底多年的干货搬出来给大家参考,都是我们日常使用频次比较高的正则表达式,希望能能大大提高你的工作效率。如果本文对大家有帮助,大家可以关注“Tom弹架构”,后续会连载正则表达式的基础知识。1、整数 public static final String intege = "^-?[1-9]\

2021-10-25 15:39:10 277

原创 java集群环境下redis分布式锁实现

背景在很多互联网产品应用中,有些场景需要加锁处理,比如:秒杀,全局递增ID,楼层生成等等。大部分的解决方案是基于DB实现的,Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系。其次Redis提供一些命令SETNX,GETSET,可以方便实现分布式锁机制使用redis相关命令介绍stringRedisTemplate.opsForValue().setIfAbsent(key, value) 如果key存在就返回0,不存在则设置

2021-09-15 17:41:30 389

原创 2021-04-25

师傅的说法的

2021-04-25 16:20:32 76

转载 matomo 自定义流量统计,标签采集

安装Matomo安装环境准备PHP环境(高于PHP5.5),PHP安装参考安装MySQL,并创建数据库 MySQL安装参考Nginx,Nginx安装参考开始安装选择内部安装,下载matomo下载地址:https://matomo.org/download/将下载的安装包解压app@matomo:~/matomo$unzip matomo-latest.zipapp@matomo:~/matomo$cd matomoapp@matomo:~/matomo$pwd/home/app/m

2021-03-15 17:18:31 686

原创 @Contended / Disruptor 缓存行占满注解

目录缓存行与伪共享Disruptor 缓存行填充@Contended速度测试存储设备往往是速度越快价格越昂贵,速度越快价格越低廉。在计算机中,CPU 的速度远高于主存的速度,而主存的速度又远高于磁盘的速度。为了解决不同存储部件的速度不对等问题,让高速设备充分发挥性能,引入了多级缓存机制。为了解决内存和 CPU 的速度不匹配问题,相继引入了 L1 Cache、L2 Cache、L3 Cache,数字越小,容量越小,速度越快,位置越接近 CPU。图片现在的 CPU 都是由多个

2021-01-27 17:55:35 727

原创 2021-01-12

压测工具:jmeterjfrjmc

2021-01-12 12:41:14 85

原创 “服务不可用“怎么排查?

下面是线上机器的cpu使用率,可以看到从4月8日开始,随着时间cpu使用率在逐步增高,最终使用率达到100%导致线上服务不可用,后面重启了机器后恢复。1、排查思路简单分析下可能出问题的地方,分为5个方向: 系统本身代码问题 内部下游系统的问题导致的雪崩效应 上游系统调用量突增 http请求第三方的问题 机器本身的问题 2、开始排查 查看日志,没有发现集中的错误日志,初步排除代码逻辑处理错误。 首先联系了内部下游系统观察了他们的监控

2020-11-27 17:28:10 886

原创 一整套线上故障排查技巧,爱了!

一整套线上故障排查技巧,爱了!本文来源:https://fredal.xin/java-error-check线上故障主要会包括 CPU、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如 jstack、jmap 等工具也是不囿于一个方面的问题的,基本上出问题就是 df、free、top 三连,然后依次 jstack、jmap 伺候,具体问题具体分析即可。CPU一般来讲我们首先会排查 CPU 方...

2020-10-22 13:47:28 179

原创 mysql 自增列新增

auto_increment_increment 自增步长auto_increment_offset自增初始值SET @@auto_increment_increment=1;SET @@auto_increment_offset=1;ALTER TABLE `listintl_drug_info_b`ADD COLUMN `DOC_NO` int AUTO_INCREMENT UNIQUE AFTER `MKT_PRE_PRIC`;

2020-08-14 21:28:29 275

原创 利用Redis生成业务流水号思路

系统需要生成根据业务类型生成流水号,每天从1开始生成,第二天会清零继续从0开始,流水号格式为:bizCode + date + incr 如:TT-2017112300001。思路:利用RedisIncr生成序列号,使用日期加业务编码作为组合Key,这样保证第二天生成的序列号又是从1开始。由于我们业务量不是很大,这里在生成序列号之前先判断一下当前key是否存在,若不存在,设置此key过期时间为当天晚上23:59:59,避免生成很多过期的key。整体设计流程思路如下:关键代码如下:...

2020-07-09 15:37:16 1117

原创 java观察者模式

这里写自定义目录标题java观察者模式介绍这个模式的结构图可以看到,该模式包含四个角色使用场景例子java观察者模式当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。介绍意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。主...

2020-04-20 12:20:44 157

原创 深入理解HashMap和CurrentHashMap

原文链接:https://segmentfault.com/a/1190000015726870前言Map 这样的Key Value在软件开发中是非常经典的结构,常用于在内存中存放数据。本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap。HashMap...

2020-01-14 16:14:41 564

原创 将gps左边转成百度坐标,js方法,java方法。

js转换方法var resultPoint = GpsToBaiduPoint(new BMap.Point(data.lon, data.lat));var ps = [];ps.push(new BMap.Point(points[i].lon, points[i].lat));var resultPoints = GpsToBaiduPoints(ps);/*** 单个坐...

2020-01-13 15:14:36 597

原创 海康SDK如何实现视频流转发

关于海康设备摄像头预览时候回调里pPreviewCBMsg.pRecvdata能得到连续不断的码流数据,想自己开发个页面进行实时监控,跟历史回放。要怎么做public class FPREVIEW_DATA_CB implements HCEHomeStream.PREVIEW_DATA_CB { //实时流回调函数 public void invok...

2019-11-18 14:30:53 4428 3

原创 html 跑马灯

废话不多说,直接代码copy进去运行就知道了<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title></title> </head> <style type="text/css"> .page_...

2019-10-30 17:47:46 205

统一门户web处理器sdk

将所有controller统一拦截,通过自定义注解区分功能模块

2023-04-17

nginx-rtmp1.17.9.rar

nginx 1.17.9 版本+rtmp编译好的,亲测是可以用的,需要的同学可以下载。 主要是nginx推流rtmp,原有的不能用只能进行编译后的才可以,

2020-03-23

song -手动导入maven仓库.jar

从来修改字体的样式,手动导入该依赖,在对应软件修改

2019-10-12

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

TA关注的人

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