最佳实践
文章平均质量分 70
最佳实践
加权不平权
IT课堂里的小学生
展开
-
使用vaadin在后端写前端
从原古的SSH和现在的前后端分离架构,大部分WEB前端的开发都需要脚本语言,不论是JSP还是HTML或者angular,那有没有一种可以用后端代码写前端代码的实现呢?而以上个页面的所有代码都在后台,用JAVA编写,如下是一个继承com.vaadin.ui.UI的自定界面。由于上面的Servlet相对模式固定,所以在启动时根据自动扫描,完成Servlet的注册。学习过Swing的同学大概可以知道CS架构里是可以的,那BS架构里呢?可以集成到Dropwizard框架中,指定路径了Servlet。原创 2023-03-04 14:39:29 · 289 阅读 · 1 评论 -
利用Kafka实现延迟队列实践
上面的实践存在什么样的问题,考虑一个场景,有一个延迟一小时的队列,这样消息发出后,实际上一个小时后在该主题上的消息拉取才有意义(之前即使拉取下来也发送不出去),但上面的实现仍然会不停阻塞唤醒,相当于在做无用功。主要实践原理是通过定阅原始主题,并判断是否满足延迟时间要求,满足要求后转发新主题,不满足则阻塞等待,同时外置一个定时器,每1秒进行唤醒锁协作。这边的原理是通过定阅原始主题,并判断是否满足延迟时间要求,满足要求后转发新主题,不满足则停止消费并等待。kafka本身是不支持延迟队列功能,我们可以通过。原创 2022-09-27 19:51:49 · 4575 阅读 · 1 评论 -
Nacos的长轮询实践
Nacos长轮询的基本思路是通过Servlet3.0后提供的异步处理能力,把请求的任务添加至队列中,在有数据发生变更时,从队列中取出相应请求,然后响应请求,负责拉取数据的接口通过延时任务完成超时处理,如果等到设定的超时时间还没有数据变更时,就主动推送超时信息完成响应。关于心跳检测参考:https://blog.csdn.net/sunquan291/article/details/126556366。原创 2022-09-19 14:28:56 · 1805 阅读 · 0 评论 -
最佳实践-SQL语法校验
在系统的版本发现过程,随需求的叠加,出现了多次版本的升级脚本填写不对或忘写的情况,虽然项目内严格要求研发必须针对SQL脚本手动执行且无报错前提下,才能验证通过。系统提供一前置检查框架,所以在前置检查框架中叠加对应的校验项即可,通过技术选型,使用alibaba的SQLParserUtils进行检查。一些常见的低级问题还是可以检查出来,将功能嵌入到微服务的前置检查中,一定程度上可以避免人为的失误。系统中,所以对于特定不支持的语法SQL,代码中进行了人为的异常保护。原创 2022-09-17 15:17:53 · 3173 阅读 · 1 评论 -
DropWizard的AOP扩展点最佳实践
本文中FrameInterceptionService,通过判断方法上是否有注解Record,进而决定是否使用MethodInterceptor进行切面处理。DW框架提供了对应的扩展点接口,我们只需要实现接口InterceptionService并发布成Bean。方法拦截器功能实现,针对方向执行进行相关调用明细的记录,方便后序数据分析。该接口中定义了三个回调接口,分别是。原创 2022-09-17 15:01:25 · 507 阅读 · 2 评论 -
DropWizard框架里关于异常统一处理实践
javax.ws.rs.ext.ExceptionMapper提供了可以进行异常处理的接口类。最后通过引入自定义的异常处理扩展点,原理是通过配置文件指导具体类,并反射加载实例化,填充。最终构造对象 ExceptionResult返回。其中针对系统内置的异常进行定制的额外处理,如。原创 2022-09-16 18:18:32 · 335 阅读 · 0 评论 -
还有一次修改JAVA源码机会,要不要?
APT(Annotation Processing Tool) 注解处理器,是 javac 的一个工具,它可以在源码生成class的时候,处理Java语法树。在系统运行过程中,有经常需要为Bean进行JSON序列化或反序列化的需求,(本节YY的需求,不必较真)所以如果每个Bean里自带如toJson方法,可以获得对应的字符串,那便是极好的。第二即是字节码的改进逻辑,这块需要对于JCTree操作十分熟悉,更多操作细节可以自行上网查找。编译后的class文件反编译后,结果如下,toJson方法已经增加。原创 2022-09-13 09:40:34 · 397 阅读 · 0 评论 -
最佳实践-LinkBlockingQueue改进
使用线程池的同学对于标题中的队列想必都有过使用,但上述队列使用不当时则会造成程序OOM,那怎么来控制呢?使用ArrayBlockingQueue?如何来评估长度?是否有一个完美的解决方案呢,MemorySafeLinkedBlockingQueue则通过对内存的限制判断尽面控制队列的容量,完成解决了可能存在的OOM问题。获取内存大小(注:单位大B;线程池在excute任务时,放队列,放不进去,使用新线程运行任务。这个放不进行,是使用的offer??非阻塞方法吗?原创 2022-09-08 18:15:00 · 417 阅读 · 0 评论 -
SQL优化-数据库自优化
因此在优化进入深水区后,需要了解到数据库进行优化后的SQL语句是什么?针对各类数据库,其是有自己的优化引擎,针对SQL语句会尝试优化,但优化的结果,有时并不是系统想要的。可以发现其是先join再where查询的,从SQL优化角度看,先子查询,再in效率会有提升。可以看到mysql优化器将普通的多表查询的sql优化成了连接查询,提升效率。–explain执行对应SQL语句。原创 2022-09-05 18:21:49 · 300 阅读 · 0 评论 -
OpenResty应用-数据库访问
OpenResty是一个基于Ngin与Lua的高性能Web平台,集成了大量Lua库、第三方模块及大多数依赖项,可以方便地搭建能够处理超高并发、扩展性极高的动态Web应用、Web服务和动态网关。原创 2022-09-04 21:29:16 · 844 阅读 · 0 评论 -
可删除的BloomFilter
众所周知,Guava提供的BloomFilter是不支持删除操作的,本文简单实现了一个支持删除的布隆过滤器,实现的原理很简单,高手绕行,通过将删除的数据暂存,并加入判断,同时通过定时器和阀值控制过滤器的重建。...原创 2022-08-30 17:34:25 · 701 阅读 · 0 评论 -
PG索引失败排查记录
首先系统使用的是postgre数据库,突然业务逻辑中存在性能问题,最终慢查询定位后,跟踪到有一个过滤查询,耗时严重。如果只有前模糊查询需求(字符串 like ‘xx%’),使用collate "C"的b-tree索引;当collate不为"C"时,可以使用类型对应的pattern ops(例如text_pattern_ops)建立b-tree索引。原创 2022-08-25 16:32:15 · 2700 阅读 · 0 评论 -
自适应分组多级并发框架
自适应多级并发框架一、问题背景一、框架原理图二、自适应的消息采集框架三、分级处理框架四、保序并发处理五、总结六、源码一、问题背景关于自适应的问题和细节可以参考 文章 :Kafka消息消费之性能提升实践多级并发含义是指针对批量数据的处理,不能完全并发,但是有条件可以分组进行并发处理,简单举例来说,针对数据集A、B、C、D、E、F、G,其中由于业务关系,其中ABC和DE和FG三组,组与为组间无法并发,但组内数据可以并发处理。所以针对上述应用场景,需要开发相对应的技术框架,分离业务和技术关注点,降低业务复原创 2022-08-25 11:38:39 · 219 阅读 · 0 评论 -
多级分组并发处理-实践
多线程分组并发处理前言一、代码逻辑二、改进型前言在一些性能提升的并发方案中,按关键字hash分组并发处理较为常见,在实际应用中,我们采用的自己管理线程,创建出固定数量的线程同时准备多个阻塞缓冲的数据队列,完成分组多线程并发处理的流程。一、代码逻辑public class SerialThreadExecutor<K> implements AutoCloseable { private static final Logger LOG = LoggerFactory.getLog原创 2022-08-25 11:11:53 · 186 阅读 · 0 评论 -
SpringBoot使用配置文件若干方式
SpringBoot使用配置文件若干方式前言一、使用@Value引入二、使用ConfigurationProperties引入三、使用Environment四、使用@PropertySource + @Value前言在软件开发过程中,经常会使用到配置文件,本文基于SpingBoot如何引入相关的配置项的几种常规方式。一、使用@Value引入在需要引入配置信息的Bean类中,使用@Value注解可以方便引入对应配置项的内容,但需要将引入配置项的key全名填写正确。application.proper原创 2022-08-24 17:01:38 · 257 阅读 · 0 评论 -
JAVA工程目录-最佳实践
使用了插件maven-jar-plugin和maven-assembly-plugin完成。maven-assembly-plugin主要是通过assembly.xml进行控制。可以看到MANIFEST.MF中。原创 2022-08-24 15:27:41 · 248 阅读 · 0 评论 -
分页查询的SQL优化
当一个数据库表过于庞大,LIMIT offset, length中的offset值过大,则SQL查询语句会非常缓慢,你需增加order by,并且order by字段需要建立索引。如果使用子查询去优化LIMIT的话,则子查询必须是连续的,某种意义来讲,子查询不应该有where条件,where会过滤数据,使数据失去连续性。参考:https://www.cnblogs.com/azhaozhao/articles/15080807.html。...原创 2022-08-11 14:19:54 · 1780 阅读 · 0 评论 -
【工具思维】IDE的辅助plugin
在带团队的时候,不止一次跟团队强调做技术要有从编码思维-工具思维-产品思维的上升意识,不要只做基础的编码实现。本文也算抛砖引玉,介绍下在系统演进过程复用IDE的plugin机制实现的辅助小工具,解决一系列组件运维测试过程中的痛点问题。编码思维-工具思维-产品思维,当老板交给你一个活,编码也许需要2周,工也许需要5天,产品也许2天就可以搞定。共勉!!!httpshttpshttpshttpshttpshttpshttpshttps。......原创 2022-07-18 17:14:38 · 501 阅读 · 0 评论 -
耗时统计(JAVA)
项目中根据该API可以封装一套性能优化的统计框架,方便地进行热点耗时的代码热点定位。原创 2022-07-15 23:24:27 · 2390 阅读 · 0 评论 -
最佳实践-静默检查
项目的业务存在如下场景:当系统启动后,定阅对应的kafka主题后,可能会存在积压的大量消息需要处理,此时如果开放本系统的服务,由于本身正在进行剧烈的数据处理,此时提供的服务并不可靠。基于些,则需要一种机制在尽可能处理完消息后(或系统处于一个相对稳定的状态)再开放服务。出于将业务与技术关注点分离的思路,则提炼出本文的所谓静默检查小框架。SilentTimer仅需要传入二个参数和一个方法,分别是:...原创 2022-07-14 17:32:30 · 363 阅读 · 0 评论 -
Kafka常见使用实践
Kafka常见使用实践前言一、测试先行二、主题监听灵活启停1.原始KafkaConsumer2.使用KafkaListener三、多监听不同配置四、Topic赋值参数化五、动态新增Topic前言在Java中引入并使用kafka,有很多方式,如可以直接使用原生kafka-clients这样的API;也可以使用Spring对其的包装API,即spring-kafka <dependency> <groupId>org.springframew原创 2021-06-24 18:43:11 · 88 阅读 · 0 评论 -
优雅关闭线程实践
优雅关闭线程实现代码实现代码/** * @Author 10184538 * @Date 2019/10/28 13:08 **/public class BgpLsLinkMsgHandlerThread extends Thread { private volatile boolean running = true; @Override public vo...原创 2019-12-07 11:51:15 · 213 阅读 · 5 评论 -
Kafka消息消费之性能提升实践
性能提升之(批量提交+超时提前)应用场景接口定义实现测试用例应用场景实际中可能有这样的应用场景,得到一个记录不需要立即去处理它,而是等累积到一定数量时再批量处理它们。然后如果数据积累不到指定的数量,也不能一定等下去,造成这批数据一直得不到处理。所以还要增加超时机制,在超时时间到达后,即使积累数据不到指定的数量也进行提交处理。存储队列必须线程安全,如 Vector, Hashtable, St...原创 2019-12-21 09:22:37 · 1136 阅读 · 2 评论 -
Disruptor实际应用示例
Disruptor实际应用示例简介告警处理需求告警信息处理器调度DisruptorApplicationEventHandlerProcessClassUtil测试AbstractEventHandlerODL实现简介Disruptor它是一个开源的并发框架,并获得2011 Duke’s 程序框架创新奖,能够在无锁的情况下实现Queue并发操作。同学们代码中是否会使用到BlockingQueu...原创 2019-09-22 16:13:34 · 1894 阅读 · 0 评论 -
最佳实践之API文档导出
利用swagger导出接口文档前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言swagg一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport warningswarning原创 2020-09-30 10:17:31 · 332 阅读 · 0 评论