兰亮网络技术团队

技术交流分享

  • 博客(43)
  • 收藏
  • 关注

原创 ide插件MyBatisCodeHelper-Pro

作者李俊杰介绍视频: https://www.bilibili.com/video/av50632948功能通过方法名(不需要方法的返回值和参数 会自动推导出来)来生成sql 可以生成大部分单表操作的sql 只需要一个方法的名字即可 会自动补全好方法的参数和返回值 和springdatajpa的语句基本一致xml sql几乎所有地方都有自动提示,sql正确性检测,插件会识别mybatis的一系列标签 如 include trim set where,在这些标签之后的sql可以自动提示数据库的字段,

2021-02-02 17:29:29 1308

原创 SQL调优工具

作者高志强推荐理由对于##系统,因为数据量大,所有对业务SQL优化提出比较高的要求,本文的工具可以辅助sql优化,清楚的了解mysql执行计划为什么需要SQL调优工具?1、写好的SQL执行太慢、但是又找不出原因。2、 SQL调优需要具备很深的技术积累、需要很多的实战经验、这些对一般开发来说多半是不具备的。3、 SQL语句太复杂、分析起来很耗时间、影响开发进度。4、 需要直观的知道SQL语句的执行计划、经过MySQL语法调优后的执行计划、这个不好分析。不能保证SQL语句的执行过程和预想的一样。

2021-02-02 17:20:37 3272

原创 任务调度框架Quartz

作者李林成1.什么是quartz作业任务调度Quartz框架是一个全功能,开源的任务调度服务,可以集成几乎任务java应用程序,从小的单片机系统到大型的电子商务系统。Quartz可以执行上千上万的任务调度2.Quartz中使用的几种设计模式Builer模式Factory模式组件模式链式写法3.三个主要的概念任务:就是我们自己编写的业务开发逻辑,交个Quartz帮我们执行。触发器: 定时任务的触发规则(触发器),定义了任务调度的触发时机,使用TriggerBuilder 构建,与任务是N

2021-02-02 17:14:40 970

原创 seata @GlobalTranscation注解解析

作者胡盛生推荐理由通过seata @GlobalTranscation注解为入口,通过源码解读分析seata实现分布式事务的原理seata简介Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。@GlobalTranscation注解实现基于Spring的AOP和Springboot的自动装配实现自动装配类SeataAutoConfiguration

2020-11-17 11:13:30 3935

原创 生成文字和二维码合成

作者:金炎帅二维码合成文字比较少见,也实用。当前实现:@Slf4jpublic class DrawImageUtil { private BufferedImage image; private static int imageWidth = 400; // 图片的宽度 private static int imageHeight = 400; // 图片的高度 public static File drawImage(Map<String, String> conten

2020-11-17 11:07:53 687

原创 httpclient 响应结果乱码问题解决

作者:李俊杰httpclient 响应结果乱码get方式请求返回结果乱码需在返回的结果处编码转换CloseableHttpResponse response = httpclient.execute(httpGet);StatusLine status = response.getStatusLine();int state = status.getStatusCode();if (state == HttpStatus.SC_OK) {return EntityUtils.toString

2020-11-17 11:03:49 1744

原创 微服务中的Nacos

作者徐贵浩推荐理由作为nacos配置中心和注册中心的入门介绍文章完全合格,如何简单部署和应用步骤一目了然,比较到位在讲 Nacos 之前,我们需要了解什么是 Nacos:Nacos 是阿里的一个开源产品,它是针对微服务架构中的 服务发现、配置管理、服务治理 的综合性解决方案。官网给出的回答:Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。Na

2020-11-17 11:01:18 904

原创 myexcel初步使用

作者吴华辉推荐理由因为招投标需求对比单导出结构复杂,引入了myexcel工具实现自定义导出,文章介绍了单元格合并,颜色标记,数据遍历的语法供大家参考。原因一些复杂格式的excel不适用于通用的表格工具导出,根据其他项目组的推荐使用了myexcel工具包使用github地址:https://github.com/liaochong/myexcel依赖添加#Maven<dependency><groupId>com.github.liaochong</g

2020-11-17 10:54:58 2488

原创 GC原理简述

GC原理简述什么是垃圾没有任何引用指向的一个对象,或者只是循环引用没有外部引用的多个对象。如何定位垃圾reference count (引用计数)每次被引用计数器就+1,释放的时候计数器-1 。root searching (根可达)定义某些根对象,只要根对象指向的对象那么就不是垃圾,其它的对象都是垃圾。JAVA用的就是根可达算法,JAVA定义的根有一下几类:常见的回收算法Mark Sweep (标记清除)处理方式:标记垃圾,然后直接回收。优缺点:速度快,

2020-11-17 10:40:04 1889 11

原创 Sql优化

作者环保项目组 王春明推荐理由:作为mysql优化的入门资料非常合适,不仅总结了索引的大部分用法和优化方式,更整理了一些mysql自带的命令,对sql分析和定位问题有一定帮助。1.查看Sql执行频率2.定位低效率执行sql在这里插入图片描述3.explain分析执行计划3.1 explain之id3.2 explain之select_type3.3 explain之table3.4 explain之type3.5 explain之key3.6 explain之rows

2020-09-17 17:08:22 241

原创 Modbus协议简介及Java代码取值实现

作者胡盛生推荐理由modbus协议概念特点以及java实现的整理,对于入门有一定的参考意义。Modbus协议简介Modbus是一种通讯协议,主要应用于电子控制器上的一种通用语言。Modbus支持多种电气接口,如RS232、RS485、TCP/IP等。多数Modbus设备通信是通过串口或TCP/IP进行连接。通常情况下 Modbus是主从架构,即通信节点是Master,其它使用Modbus协议参与通信的是slave节点(最多247个,地址范围为1-247,0节点是广播地址)。每个slave设备都具

2020-09-17 16:47:17 4660 4

原创 Mapping Example 高级用法

作者MRO项目组 吴华辉通用 Mapper 中的 Example 方法有两大类定义,一个参数和两个参数的,例如下面两个:所有 Example 方法中的 example 类型都是 Object 类型,这是因为通用 Mapper 支持所有符合 Example 结构的参数,例如通过 MBG 生成的 CountryExample、UserExample 类。还有通用 Mapper 中提供的通用 Example,以及支持 Java8 方法引用的 Weekend 类型。配置中有一个和 Example 有关的参

2020-09-17 16:35:44 780

原创 PaddleOCR安装、部署、测试

github地址:https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/doc_ch/installation.md官方建议我们使用使用docker运行PaddleOCR,可以省去很多麻烦。所以,我们可以再服务器上先安装docker、nvidia-docker,感觉没必要用到gpu,所以接下来就不使用nvidia-docker了。1.准备好docker环境2.cd /home && mkdir Projects首次运

2020-09-17 16:22:34 12082 10

原创 mysql数据恢复

作者王依梃推荐理由mysql数据误删,表的误删,误操作等,在实际开发中,还是有较高风险的。每个开发,都应该了解下恢复原理及相关知识。提前做好预防,做好备份,万一出问题时,能够及时恢复,以免对业务造成大损失。1.前言数据恢复的前提的做好备份,且开启 binlog,格式为 row。如果没有备份文件,那么删掉库表后就真的gg了,就真的可以提前考虑跑路了,如果lsof 中还有记录的话,有可能恢复一部分文件。但若刚好数据库没有打开这个表文件。。。。如果 binlog 格式不为 row,那么在误操作数据后就没

2020-08-11 13:45:22 540

原创 mysql中between and 和大于等于、小于等于测试

作者徐连臣推荐理由比较原创,让大家对mysql时间查询是否走索引有一个更好的认知。mysql中between and和>=、<=的作用相似,网上有的说使用between and查询时同一天索引有效,非同一天时,索引无效。而使用>=、<=时,不管是同一天还是非同一天,索引均无效。实践是检验真理的唯一标准,今天就测试了一下。使用生产环境的一张运输记录表(biz_stub),创建时间(gmt_create)字段加了索引:1、使用between and查询:(1)查询的时间

2020-08-11 11:48:07 15971 5

原创 微信支付调用第三方系统无返回值的问题

作者黄昭推荐理由对实际项目遇到问题的总结,以及解决方法,而且如何未来对接微信可能会有借鉴意义某系统有个水电充值的功能,通过充值页面充值了一笔金额,系统后台根据订单等一些关键信息校验微信服务器的充值记录,如果存在充值成功的,系统则向第三方的能耗系统添加一笔充值记录。如上图所示,给能耗系统传递订单号和充值金额两个参数,返回result_history的结果,并记录到日志里。园区系统根据result_history的中的状态参数,如果成功则修改园区系统中此订单的支付状态为支付成功但是比较早的时候发现

2020-08-11 11:41:47 1456

原创 Netty 客户端发送消息并同步获取结果

作者曾文冲推荐理由详尽并有图与代码对应的讲解,本月有分享。UDP Client代码如下:private NioEventLoopGroup nioEventLoopGroup; @Autowired private UdpHandler handler; @PostConstruct public void initClient() { nioEventLoopGroup = new NioEventLoopGroup();

2020-08-11 11:37:31 4543 6

原创 lambda表达式

作者推荐理由lambda表达式可以提高编程效率,精简代码;但与此同时会带来一些代码可读性下降的问题,因此需要熟悉lambda表达式,本文对其基本用法进行了一些总结,虽有不少遗漏之处,对初接触lambda表达式具有一定价值1.lambda表达式用来代替匿名内部类2.语法精简3.语法进阶静态方法引用:构造方法引用:3.应用集合排序:有序集合treeSet:删除集合元素4.系统内置的一些函数式接口5lambda表达式与stream流混合使用去重List distinctLi

2020-08-11 11:32:29 325

原创 SpringBoot自动装配特性的深入浅出

作者樊远航推荐理由spring boot核心能力之自动装配的原理分析,讲解了自己实现自动装配的两种方式,并提供流程图让读者更好理解,排版规整。前言SpringBoot作为敏捷开发的常用封装框架,对于企业开发速度的提升、配置的简化、业务的专注三个方面进行了相对于SpringMVC等架构的升级。那么,作为使用过SpringMVC的开发同学来说,初次使用SpringBoot时会感觉原本繁杂的xml配置工作一下子没有了。项目创建完成后,基本可以直接开始进行业务代码的编写(引入依赖除外)。那么,原本繁杂的

2020-08-11 10:48:28 416

原创 ReentrantLock源码分析

作者ERP组 陈 靖推荐理由该篇文章初步简要的写出了加锁和解锁的流程及原理,感兴趣的后来者可以通过该篇文章快速的了解加锁和解锁简要流程及原理。1 锁的各种类型1.1公平锁/非公平锁公平锁是指多个线程按照申请锁的顺序来获取锁。多个非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序。非公平锁的优点在于吞吐量比公平锁大。我们常用的synchronized就是一种非公平锁,而ReentrantLock则可以通过构造方法来指定是否公平锁。1.2可重入锁可重入锁是指,外层方法获取锁后,进入内层

2020-08-11 10:32:43 243

原创 JVM整体结构及内存模型

文章目录作者推荐理由一、JVM整体结构及内存模型二、JVM内存参数设置三、日均百万级订单交易系统如何设置JVM参数作者MRO项目 吴华辉推荐理由在我们的开发中,会不可避免的遇到的,性能问题。因为JVM的内存是有限的,当加载进内存的对象越来越多,就会影响JVM的运行。学习JVM底层可以更好的理解JVM相关调优参数作用。一、JVM整体结构及内存模型二、JVM内存参数设置Spring Boot程序的JVM参数设置格式(Tomcat启动直接加在bin目录下catalina.sh文件里):java

2020-08-11 10:18:12 317

原创 利用AOP实现自定义注解

文章目录添加依赖配置切面帮你跳坑怎么使用自定义注解?效果作者:曹亮今天我们就来讲讲切点的另一种配置方式:@annotation,通过@annotation配置切点,我们可以灵活的控制切到哪个方法,同时可以进行一些个性化的设置,今天我们就用它来实现一个记录所有接口请求功能吧。添加依赖新建一个Spring Boot项目,打开pom.xml文件添加相关Maven依赖<dependency> <groupId>org.springframework.boot</gro

2020-07-01 17:25:02 732

原创 开源限流框架Sentinel 解析

作者:王依梃推荐理由:在分布式项目中,限流,熔断,降级,都是非常重要的点,作为开发人员,都应该学习掌握,了解思想和用法,在项目需要使用时,能够及时落地。Sentinel 入门Sentinel 看架构图上周边是一系列高大上的开源中间件,这只是他的一种比较华丽的包装,只要你用心去研究他的功能和代码,还是比较容易理解它的原理和结构。其内核 Sentinel Core 是非常轻巧的。1.我们从它的 Hello World 开始,通过深入理解这段入门代码就可以洞悉其架构原理。pom文件引入sentinel-

2020-07-01 17:17:02 2287

原创 工作流activiti初探

作者:漏建波推荐理由:可以根据此次介绍简单的了解activiti,后面可以持续学习该框架,做一些更加符合也无需求的工作流功能。activiti的作用在于业务流程建模与标注(Business Process Model and Notation,BPMN) ,描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram)。activiti的部署非常简单,只需要http://activiti.org/download.html下载解压,有activiti-ex

2020-07-01 16:06:14 276

原创 Spring中涉及的设计模式

作者:杨秀丽推荐理由:很好的诠释了Java的设计模式思想,在实际的开发过程中当中很实用,也是一个程序员所必须具备的基本技能。转至元数据起始1.工厂设计模式Spring使用工厂模式可以通过BeanFactory或ApplicationContext创建bean对象。二者对比:BeanFactory :延迟注入(使用到某个 bean 的时候才会注入),相比于BeanFactory来说会占用更少的内存,程序启动速度更快。ApplicationContext :容器启动的时候,不管你用没用到,一次性创

2020-07-01 14:56:49 294

原创 业务系统消息接入钉钉推送

作者:李俊杰推荐理由:结合项目,有实用价值。通过钉钉机器人对接系统推送消息 参考https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq获取自定义机器人webhook步骤一,打开机器人管理页面。以PC端为例,打开PC端钉钉,点击头像,选择“机器人管理”。步骤二,在机器人管理页面选择“自定义”机器人,输入机器人名字并选择要发送消息的群,同时可以为机器人设置机器人头像。步骤三,完成必要的安全设置(至少选择一种),勾选 我已阅读并同意《自定义机器

2020-07-01 14:53:31 2983

原创 openresty实现动态服务转发

文章目录为什么要用openrest,而没有选择nginxopenresty是什么业务场景:在openresty解析所遇到的问题:作者:李林成推荐理由:该篇文档把openresty请求分发讲解的比较通俗易懂,而且有demo输出,其这篇文章的请求分发有着很高的应用价值。为什么要用openrest,而没有选择nginx主要是openresty实现的了,方便操作lua业务处理openresty是什么是一个基于nginx与lua的高性能web平台,其内部集成了大量精良的lua库、第三方模块以及大多数的依赖

2020-07-01 13:36:43 2370

原创 Redis的持久化

作者:韦涛推荐理由:Redis作为分布式缓存架构中重要的一环,会保存一些较为重要的数据,抗住系统的高并发访问。因此Redis中的数据必须持久化,学习持久化配置对应生产环境redis故障保证不丢失和恢复具有重要意义。Redis持久化的两种方式:RDB(Redis Database)快照和AOF(Append OnlyFile)只追加文件。一、RDB(Redis Database)快照快照持久化。Redis可以通过创建快照的形式来获得存储在内存中的数据在某个时间点上的副本。Redis创建快照之后,可

2020-07-01 10:17:41 315

原创 jasypt的基本原理

文章目录一、jasypt的启动类加载二、 jasypt中Encryptor、Detector和Resolver加载三、jasypt中EnableEncryptablePropertiesBeanFactoryPostProcesso四、proxy代理方式增强propertySources五、wrapper包装类方式增强propertySources六、resolver中属性值解密作者:史佳健推荐理由:文章详尽并有对应分析说明一、jasypt的启动类加载引入了jasypt-spring-boot-st

2020-07-01 09:45:37 6549

原创 原理性分析Switch和If的执行效率,理解阿里代码规约

文章目录文章推荐理由测试代码性能分析Switch自身的策略总结作者:樊远航文章推荐理由从性能测试开始,引出文章主题,通过字节码分析两者性能差别原理,并对switch自身策略不同引起性能不同做了分析,文章分析逻辑清晰,并加上了自身的实践条件判断语句是程序的重要组成部分,也是系统业务逻辑的控制手段。重要程度和使用频率更是首屈一指,那我们要如何选择 if 还是 switch 呢?他们的性能差别有多大?switch 性能背后的秘密是什么?接下来让我们一起来寻找这些问题的答案。测试代码我们采用Oracle

2020-06-28 20:04:52 1096

原创 Spring Boot + ShardingSphere实现的分表分库

文章目录作者推荐理由1 概述2 分库分表2.1 引入依赖2.2 Application2.3 应用配置文件2.4 MyBatis 配置文件2.5 实体类2.5.1 OrderDO2.5.2 OrderConfigDO2.6 Mapper2.6.1 OrderMapper2.6.2 OrderConfigMapper2.7 简单测试2.7.1 OrderConfigMapperTest2.7.2 OrderMapperTest3. 读写分离3.1 引入依赖作者ERP项目组 秦华娇推荐理由该篇文档理论

2020-05-11 15:55:53 696

原创 大数据量Excel导出及改进版

文章目录作者文章推荐理由代码实现改进版实现作者物流项目组 徐连臣文章推荐理由项目中报表导出很常用,有的开发不注意全量导出如果数据量情况较多的情况往往会导致系统内存溢出,他这个导出是类似分页的模式,每查一页就写到文件,就规避了内存溢出的问题,而且用了反射,通用性较强。推荐人:老鹰。代码实现Excel导出时,如果一次性查询的数据量过大,容易造成内存溢出,导致系统服务挂了,如果Excel的一个sheet页的数据很大的话,打开Excel时加载数据就会花很长时间,如何分批查,分批插呢?使用SXSSFWor

2020-05-09 14:06:59 275

原创 Lombok最全使用详解

这里写自定义目录标题作者为什么使用LombokLombok官网的介绍运行原理Lombok的安装1、添加依赖2、添加插件(推荐)常用注解举例说明【1】@Getter @Setter【2】@ToString【3】@EqualsAndHashCode【4】NonNull【5】NoArgsConstructor、RequiredArgsConstructor、AllArgsConstructor【6】D...

2020-05-07 17:43:16 3088 2

原创 SpringBoot+WebSocket+Netty实现消息推送

这里写自定义目录标题作者Netty在项目中的应用场景大概实现思路第零步:第一步:第二步:第三步:第四步:第五步:作者中台项目组 司晓杰Netty在项目中的应用场景消息推送功能,可以满足给所有用户推送,也可以满足给指定某一个用户推送消息,创建的是SpringBoot项目,后台服务端使用Netty技术,前端页面使用WebSocket技术。大概实现思路1 前端使用webSocket与服务端创...

2020-05-07 16:54:09 1651 2

原创 Spring Boot 2 -自定义启动运行逻辑

我们有时候会遇到这种需求,项目启动后立马执行一些逻辑。比如缓存预热,或者上线后的广播之类等等。CommandLineRunner 接口package org.springframework.boot;import org.springframework.core.Ordered;import org.springframework.core.annotation.Order;/**I...

2020-05-06 16:13:52 228

原创 SpringBoot缓存问题

SpringBoot缓存问题缓存在实际开发中肯定会遇到的,为了减轻数据库的压力,很多的项目都使用了缓存来达到数据快速访问,可以给用户达到良好的体验。不然,客户一个请求响应半天,谁受得了。但是,很多人在使用缓存中,会遇到缓存带来的麻烦。比如:数据库查询出来的数据和缓存数据不一致的问题。就是缓存滞后的问题导致的。开启缓存缓存的使用很简单,只需要在主类上加上@EnableCaching注解即可开...

2020-05-06 16:12:49 501

原创 Spring 注解之@Import 注入的各种花活

pig4cloud 中涉及的 @Import 的注入形式。通过不同形式的注入方式,最大程度使得架构简洁。@Import导入一个组件来看 EnablePigxDynamicRoute 这个注解,当我们需要开始动态数据源时,只需要在main 方法加上此注解即可。@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Doc...

2020-05-06 16:12:06 256

原创 用工厂模式和策略模式代替繁琐的if else

过多的if-else代码和嵌套,会使阅读代码的人很难理解到底是什么意思。尤其是那些没有注释的代码。其次是可维护性,因为if-else特别多,if-else是有办法可以消除掉的,其中比较典型的并且使用广泛的就是借助策略模式和工厂模式,准确的说是利用这两个设计模式的思想,彻底消灭代码中的if-else。传统用if else (伪代码)public BigDecimal calPrice(BigDe...

2020-05-06 16:11:00 715

原创 java substring问题

substring一般用于我们截取字符串操作,但是在java6的时候这个截取字符串操作会导致一个内存泄漏的问题。看下java6中的源码,不难发现substring操作仅是在原字符串数组上操作,仅修改了截取位置。因为我们如果在某些情况下我们截取一个超大的字符串的某一截的时候,事实上这个超大字符串仍然占用着内存空间没有被释放,当这种占用过多或者其他原因内存不够的时候就会出现内存泄漏的问题。publ...

2020-05-06 16:09:06 352

原创 git使用

一、新建代码库在当前目录新建一个Git代码库 $ git init新建一个目录,将其初始化为Git代码库 $ git init [project-name]下载一个项目和它的整个代码历史 $ git clone [url]二、配置Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。显示当前的Git配置 $ git c...

2020-05-06 16:07:55 112

空空如也

空空如也

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

TA关注的人

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