java
文章平均质量分 70
铁憨憨b
心有所执,方能成功
展开
-
Java8异步任务CompletableFuture使用
从上面可以看出cf1任务完成需要2秒,cf2任务完成需要5秒,使用applyToEither组合两个任务时,只要有其中一个任务完成时,就会执行cf3任务,显然cf1任务先完成了并且将自己任务的结果传值给了cf3任务,cf3任务中打印了接收到cf1任务完成,接着完成自己的任务,并返回cf3任务完成;anyOf :CompletableFuture是多个任务只要有一个任务执行完成,则返回的CompletableFuture执行get方法时会抛出异常,如果都是正常执行,则get返回执行完成任务的结果。原创 2023-04-06 11:32:21 · 1730 阅读 · 0 评论 -
利用设计模式、反射写代码
第一种代码重复是,有多个并行的类实现相似的代码逻辑。我们可以考虑提取相同逻辑在父类中实现,差异逻辑通过抽象方法留给子类实现。使用类似的模板方法把相同的流程和逻辑固定成模板,保留差异的同时尽可能避免代码重复。同时,可以使用 Spring 的 IoC 特性注入相应的子类,来避免实例化子类时的大量if…else代码。第二种代码重复是,使用硬编码的方式重复实现相同的数据处理算法。原创 2023-02-17 16:49:30 · 787 阅读 · 0 评论 -
全局异常处理
*** 错误状态码*//*** 错误提示*/原创 2023-02-16 17:27:58 · 113 阅读 · 0 评论 -
mybatis查询千万数据如何保证内存够用?mybatis流式查询
基本概念MyBatis 流式查询接口但构建 Cursor 的过程不简单方案一:SqlSessionFactory方案二:TransactionTemplate方案三:@Transactional 注解指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。流式查询的好处是能够降低内存使用。如果没有流式查询,我们想要从数据库取 1000 万条记录而又没有足够的内存时,就不得不分页查询,而分页查询效率取决于表设计,如果设计的不好,就无法执行高效的分页查询。原创 2023-02-13 10:39:49 · 485 阅读 · 0 评论 -
GC日志分析
GC 日志分析算是 JVM 调优中比较难的部分,今天这篇文章就来聊聊如何利用 JDK 现有的命令并且借助可视化工具如何去分析 GC 日志。原创 2023-01-04 14:08:36 · 1865 阅读 · 0 评论 -
MyPerf4J一个高性能、无侵入的Java性能监控和统计工具,有点东西!
随着所在公司的发展,应用服务的规模不断扩大,原有的垂直应用架构已无法满足产品的发展,几十个工程师在一个项目里并行开发不同的功能,开发效率不断降低。无法知道每个服务的运行情况,例如,某一台服务它目前的 QPS 是多少?它的平均延迟是多少,99% 的延迟是多少,99.9% 的延迟又是多少?如何评估服务的容量,随着服务的调用量越来越大,这个服务需要多少机器来支撑?采用内存复用的方式,整个生命周期只产生极少的临时对象,不影响应用程序的GC。当服务出现抖动时,如何判断是 DB、Cache 还是下游服务引起的?原创 2022-12-15 14:46:05 · 2880 阅读 · 1 评论 -
分库分表原理
分库分表其实分库和分表是两个概念,只不过通常分库与分表的操作会同时进行,以至于我们习惯性的将它们合在一起叫做分库分表。分库分表是为了解决由于库、表数据量过大,而导致数据库性能持续下降的问题。按照一定的规则,将原本数据量大的数据库拆分成多个单独的数据库,将原本数据量大的表拆分成若干个数据表,使得单一的库、表性能达到最优的效果(响应速度快),以此提升整体数据库性能。简单的回顾一下分库分表的基础知识,接下来的文章会配合实战项目介绍在分库分表中的各个功能点。转载 2022-11-10 14:47:17 · 1041 阅读 · 0 评论 -
java8 流Stream 高级使用
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。熟悉Linux的同学对这种风格一定不陌生,因为它跟Linux的|管道符的思想如出一辙。上面这段话引用自runoob.com。原创 2022-10-11 10:15:10 · 861 阅读 · 0 评论 -
Thread.sleep(0);的作用
你好呀,我是喜提七天居家隔离的歪歪。这篇文章要从一个奇怪的注释说起,就是下面这张图:我们可以不用管具体的代码逻辑,只是单单看这个 for 循环。在循环里面,专门有个变量 j,来记录当前循环次数。第一次循环以及往后每 1000 次循环之后,进入一个 if 逻辑。在这个 if 逻辑之上,标注了一个注释:prevent gc.prevent,这个单词如果不认识的同学记一下,考试肯定要考的:这个注释翻译一下就是:防止 GC 线程进行垃圾回收。原创 2022-09-28 16:47:31 · 625 阅读 · 0 评论 -
Sentinel搭建与使用
Sentinel,中文翻译为哨兵,是为微服务提供流量控制、熔断降级的功能,它和Hystrix提供的功能一样,可以有效的解决微服务调用产生的“雪崩”效应,为微服务系统提供了稳定性的解决方案。随着Hytrxi进入了维护期,不再提供新功能,Sentinel是一个不错的替代方案。通常情况,Hystrix采用线程池对服务的调用进行隔离,Sentinel采用了用户线程对接口进行隔离,二者相比,Hystrxi是服务级别的隔离,Sentinel提供了接口级别的隔离,Sentinel隔离级别更加精细,另外Sentinel直接原创 2022-06-20 17:23:10 · 1814 阅读 · 0 评论 -
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 · 464 阅读 · 0 评论 -
Java项目构建基础:统一结果,统一异常,统一日志
统一结果返回 统一结果的一般形式 结果类枚举 统一结果类 控制层返回 统一异常处理 @ControllerAdvice 自定义全局异常类 统一异常处理器 控制层展示 统一日志收集 Logback 配置 日志收集异常信息 GitHub 源码 统一结果返回目前的前后端开发大部分数据的传输格式都是..原创 2022-04-25 15:46:20 · 237 阅读 · 0 评论 -
后端必备:如何排查问题以及 JVM 调优思路
今天跟大家就 CPU、磁盘、网络及内存方面的问题,聊聊如何排查和调优。1 Linux CPU 过高,怎么排查问题1.1 CPU 指标解析平均负载平均负载等于逻辑 CPU 个数,表示每个 CPU 都恰好被充分利用。如果平均负载大于逻辑 CPU 个数,则负载比较重。进程上下文切换 无法获取资源而导致的自愿上下文切换; 被系统强制调度导致的非自愿上下文切换。 CPU 使用率 用户 CPU 使用率,包括用户态 CPU 使用率(user)和原创 2022-04-25 11:17:41 · 519 阅读 · 0 评论 -
Nacos配置中心交互模型原理
对于Nacos大家应该都不太陌生,出身阿里名声在外,能做动态服务发现、配置管理,非常好用的一个工具。然而这样的技术用的人越多面试被问的概率也就越大,如果只停留在使用层面,那面试可能要吃大亏。比如我们今天要讨论的话题,Nacos在做配置中心的时候,配置数据的交互模式是服务端推过来还是客户端主动拉的?这里我先抛出答案:客户端主动拉的!接下来咱们扒一扒Nacos的源码,来看看它具体是如何实现的?配置中心聊Nacos之前简单回顾下配置中心的由来。简单理解配置中心的作用就是对配置统一管理,原创 2022-04-12 10:13:55 · 995 阅读 · 0 评论 -
java.net.BindException: Address already in use: JVM_Bind解决方案
在开发的时候我们开启了服务器(tomcat or jetty)。然后我们没有关闭服务器,而直接关闭了eclipse或者idea,这时当你再启动容器的时候就可能出现下面这个异常:java.net.BindException: Address already in use: JVM_Bind解决方法,首先查看端口被那个进程占用netstat -p tcp -ano | findstr :811...原创 2019-07-05 17:17:38 · 323 阅读 · 0 评论 -
部署出错记录-org.apache.catalina.core.StandardContext.filterStart Exception starting filter
springboot项目打成war包后就不能运行?tomcat控制台显示27-Jun-2019 14:52:26.488 信息 [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs....原创 2019-06-28 10:55:58 · 6023 阅读 · 3 评论 -
springboot+jdbc+多数据源
springboot+jdbc+多数据源碰到的坑用默认配置 配置mysql数据源,数据库连接池空闲连接超过5分钟自动断开。搞了蛮久没搞好,直接换了一个数据源德鲁伊durid,并且配置好检测校验主数据源 : 采用默认hikari第二数据源 :采用durid依赖<?xml version="1.0" encoding="UTF-8"?><projec...原创 2019-06-21 14:53:54 · 2445 阅读 · 1 评论 -
springboot之全局捕获异常
出现异常,为了用户体验良好,为了将异常存储日志。统一一个异常捕获返回界面,或者返回string利用AOP技术做全局捕获异常package com.hsit.lsj.error;import java.io.FileWriter;import java.io.IOException;import java.util.HashMap;import java.util.Map;i...原创 2019-01-11 11:26:12 · 161 阅读 · 0 评论 -
springboot--如何让浏览器直接访问resource下templates的html文件
首先我们来了解下template 文件夹在springboot中的作用SpringBoot里面没有我们之前常规web开发的WebContent(WebApp),它只有src目录在src/main/resources下面有两个文件夹,static和templates springboot默认 static中放静态页面,而templates中放动态页面templates文件夹,是...原创 2019-01-10 10:14:53 · 20005 阅读 · 9 评论 -
利用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 · 1110 阅读 · 1 评论 -
elasticsearch 工具类-java篇
java 中关于elasticsearch的工具类编写原创 2021-11-19 11:22:50 · 5723 阅读 · 2 评论 -
36个正则表达式,开发效率提高80%
收藏这36个正则表达式,开发效率提高80%写在前面我们在日常的Java开发中,经常需要处理一些字符串,这个时候正则表达式是非常有用的。几乎在所有的编程语言中都支持正则表达式。以下我将压箱底多年的干货搬出来给大家参考,都是我们日常使用频次比较高的正则表达式,希望能能大大提高你的工作效率。如果本文对大家有帮助,大家可以关注“Tom弹架构”,后续会连载正则表达式的基础知识。1、整数 public static final String intege = "^-?[1-9]\原创 2021-10-25 15:39:10 · 325 阅读 · 0 评论 -
java集群环境下redis分布式锁实现
背景在很多互联网产品应用中,有些场景需要加锁处理,比如:秒杀,全局递增ID,楼层生成等等。大部分的解决方案是基于DB实现的,Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系。其次Redis提供一些命令SETNX,GETSET,可以方便实现分布式锁机制使用redis相关命令介绍stringRedisTemplate.opsForValue().setIfAbsent(key, value) 如果key存在就返回0,不存在则设置原创 2021-09-15 17:41:30 · 493 阅读 · 0 评论 -
2021-04-25
师傅的说法的原创 2021-04-25 16:20:32 · 113 阅读 · 0 评论 -
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 · 751 阅读 · 0 评论 -
@Contended / Disruptor 缓存行占满注解
目录缓存行与伪共享Disruptor 缓存行填充@Contended速度测试存储设备往往是速度越快价格越昂贵,速度越快价格越低廉。在计算机中,CPU 的速度远高于主存的速度,而主存的速度又远高于磁盘的速度。为了解决不同存储部件的速度不对等问题,让高速设备充分发挥性能,引入了多级缓存机制。为了解决内存和 CPU 的速度不匹配问题,相继引入了 L1 Cache、L2 Cache、L3 Cache,数字越小,容量越小,速度越快,位置越接近 CPU。图片现在的 CPU 都是由多个原创 2021-01-27 17:55:35 · 794 阅读 · 0 评论 -
“服务不可用“怎么排查?
下面是线上机器的cpu使用率,可以看到从4月8日开始,随着时间cpu使用率在逐步增高,最终使用率达到100%导致线上服务不可用,后面重启了机器后恢复。1、排查思路简单分析下可能出问题的地方,分为5个方向: 系统本身代码问题 内部下游系统的问题导致的雪崩效应 上游系统调用量突增 http请求第三方的问题 机器本身的问题 2、开始排查 查看日志,没有发现集中的错误日志,初步排除代码逻辑处理错误。 首先联系了内部下游系统观察了他们的监控原创 2020-11-27 17:28:10 · 949 阅读 · 0 评论 -
一整套线上故障排查技巧,爱了!
一整套线上故障排查技巧,爱了!本文来源:https://fredal.xin/java-error-check线上故障主要会包括 CPU、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如 jstack、jmap 等工具也是不囿于一个方面的问题的,基本上出问题就是 df、free、top 三连,然后依次 jstack、jmap 伺候,具体问题具体分析即可。CPU一般来讲我们首先会排查 CPU 方...原创 2020-10-22 13:47:28 · 221 阅读 · 0 评论 -
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 · 302 阅读 · 0 评论 -
利用Redis生成业务流水号思路
系统需要生成根据业务类型生成流水号,每天从1开始生成,第二天会清零继续从0开始,流水号格式为:bizCode + date + incr 如:TT-2017112300001。思路:利用RedisIncr生成序列号,使用日期加业务编码作为组合Key,这样保证第二天生成的序列号又是从1开始。由于我们业务量不是很大,这里在生成序列号之前先判断一下当前key是否存在,若不存在,设置此key过期时间为当天晚上23:59:59,避免生成很多过期的key。整体设计流程思路如下:关键代码如下:...原创 2020-07-09 15:37:16 · 1191 阅读 · 0 评论 -
java观察者模式
这里写自定义目录标题java观察者模式介绍这个模式的结构图可以看到,该模式包含四个角色使用场景例子java观察者模式当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。介绍意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。主...原创 2020-04-20 12:20:44 · 310 阅读 · 0 评论 -
深入理解HashMap和CurrentHashMap
原文链接:https://segmentfault.com/a/1190000015726870前言Map 这样的Key Value在软件开发中是非常经典的结构,常用于在内存中存放数据。本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap。HashMap...原创 2020-01-14 16:14:41 · 650 阅读 · 0 评论 -
Jaspersoft Studio使用教程
一、项目区域的介绍各块区域------Title----报表名,只在第一页显示pageHeader-----放页码,时间,创建人,每一页都会显示出来columnHeader-----列名detail----循环的数据,比如说我们直接从数据库中得到数据,只用将字段拖到此区域,那么就会将所有的这个字段的值进行循环了。 -----需要注意的是:table...原创 2019-10-12 12:54:35 · 9408 阅读 · 0 评论 -
springboot 整合webservice
添加依赖<?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.apac.转载 2019-03-12 09:24:06 · 619 阅读 · 0 评论 -
一台服务器下载另一台服务器硬盘上的文件并打包成zip
服务器一/** * 将存放在sourceFilePath目录下的源文件,读取成字节码 * @return */ public List<Map<String,Object>> download(String sourceFilePath) { File sourceFile = new File(sourceFilePat...原创 2019-05-16 15:13:51 · 953 阅读 · 0 评论 -
任务调度平台XXL-JOB使用 (dmin-lte网页框架)
分布式任务调度平台xxl-job是一个开源框架。GitHub上有详细的源码、文档和demo,文档地址是http://www.xuxueli.com/xxl-job/#/?id=%e4%b8%80%e3%80%81%e7%ae%80%e4%bb%8b。里面有详细的介绍。写此博客为了整理思路,巩固加强。1. 配置部署调度中心。首先在gitHub上下载源代码,是maven项目。执行tables...转载 2018-08-07 17:39:09 · 911 阅读 · 0 评论 -
kisso:java 基于 Cookie 的 SSO(单点登录) 中间件 kisso。
源码:https://gitee.com/baomidou/kisso示例说明:https://blog.csdn.net/q826qq1878/article/details/76179591原创 2019-07-18 16:26:21 · 532 阅读 · 0 评论 -
导入excel数据到数据库
controller: /** * 上传Excel逾期催收数据 * * @param request * @return * @throws Exception */ @PostMapping("/uploadExcelCom") public Result uploadExcelCom(HttpServletRequest request) throws...原创 2019-07-24 12:30:28 · 221 阅读 · 0 评论 -
svn update时被 locked,按提示进行clean up操作也没用的解决方法
一、下载splite3.exe(下载地址:http://www.sqlite.org/download.html)访问以上网址,找到Precompiled Binaries for Windows,点击下载如下内容二:在本地svn下载的文件目录下找到.svn的目录三:下载sqlite3,解压后放到.svn目录下四:在该目录下按住shif...原创 2019-07-30 17:55:34 · 1451 阅读 · 0 评论 -
java笔记--对信号量Semaphore的理解与运用
java笔记--对信号量Semaphore的理解与运用java Semaphore 信号量的使用:在java中,提供了信号量Semaphore的支持。Semaphore类是一个计数信号量,必须由获取它的线程释放,通常用于限制可以访问某些资源(物理或逻辑的)线程数目。一个信号量有且仅有3种操作,且它们全部是原子的:初始化、增加和减少增加可以为一个进程解除阻塞;减...原创 2019-08-02 08:59:59 · 117 阅读 · 0 评论