自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 资源 (1)
  • 收藏
  • 关注

原创 aws S3利用lambda edge实现图片缩放、质量转换等常规图片处理功能

与阿里的oss不同的是S3不支持通过url参数实现这种类似黑盒的图片处理,而是提供了一种特殊的lambda函数,我虽然不清楚为什么叫做lambda函数,但其本质就是一个拦截器。下面就演示一下利用lambda函数实现图片缩放和质量转换。

2025-03-25 20:44:19 1078

原创 利用netty实现一个命令行聊天工具

1、定义消息加解密类加密类import io/*** @description: 消息加密/*| 魔数 8byte 使用String描述 | 报文类型 1byte | attachments附件信息(长度不定) | 数据长度 8byte 使用long描述 || 数据内容 (长度不定) |// 写入魔数 byteBuf . writeBytes(ProtocalConst . POCKET_MAGIC_NUM . getBytes());

2025-02-01 19:43:11 293

原创 Fiddler手机抓包

第一步:fiddler默认不抓取https的包,该步骤是开启https抓取第二步:电脑端此时作为服务端,因此需要配置服务端口,以及允许远程连接。注意设置完之后需要重启一下fiddler。

2025-01-19 20:55:25 497

原创 增强LinkedList实现瑞士轮赛制编排

瑞士轮编排

2024-09-15 21:25:48 704

原创 使用io.springboot.plugin下的captcha-core.jar生成验证码时java.io.FileNotFoundException: /tmpactionj.ttf异常解决

java.io.FileNotFoundException: /tmpactionj.ttf (Permission denied)异常解决

2024-09-09 20:00:55 861

原创 回首五年工作

但是由于领导已经意识到了我的不确定性以及外包和实习生的离职,老板决定将我和我负责的系统一起过继给了一个新团队,虽然在新团队我还是组长的角色,但是我能感觉到新团队毕竟和原来的团队不一样了……从2022年的十月份开始我们组开始了对老jsp页面的重构,这也是我第一次做为核心开发带着一个外包和实习生开始了项目,由于脸皮薄,遇到问题不好意思求助公司其他部门的开发,一个activex打印控件的问题困扰了我好久,不过最终让我在一天的凌晨三点钟解决了,后来才知道这类问题其他团队已经遇到过并解决了。

2024-07-01 23:04:50 432

原创 初识Lombok

通过上述案例,我们发现可以通过配置文件的方式指定接口的实现类,同理JDK也是使用了这样的方式为自定义注解处理器提供了条件,再来看一下JDK中注解处理器准备阶段的源码(下图),从源码可以看到JDK也是使用了SPI机制来获取注解处理器。看到这里我猜测lombok源码中也应该有一个META-INF/services文件夹同时在文件夹中存在avax.annotation.processing.Processor文件用来指定@Getter、@Setter等等自定义的注解处理器实现类。

2024-02-25 23:37:06 1166

原创 池化设计之数据库连接池

连接池的核心类都贴出来了,一些简单的比如JdbcConnection这些类就没有贴出来了,这个只是对jdbc中的connection进行了一个包装,大家可以看懂即可。这样一个连接池就设计完成了,如果扩展一下还可以支持SSH或者其他协议的连接。虽然设计可能并不是很巧妙,但是以上案例也将池的思想体现出来了,如果大家有更好的想法,也可以一起沟通。

2024-01-30 22:30:54 568

原创 PostgreSql和Oracle的事务机制区别以及对程序的影响

PSQLException: ERROR: current transaction is aborted, commands ignored until end of transaction block

2024-01-28 23:11:51 1671 1

原创 编译原理回顾

为了实现一门编程语言,我们需要构建一个程序,读取输入的语句,对其中的词组和输入符号进行正确的处理,这个过程就是编译中重要的一部分——解释。语言由一些列有意义的语句组成,语句由词组构成,词组由更小的子词组或者符号构成。对于java这类高级语言,不光要解释而且还要翻译成计算机可以识别的语言。那么这个过程就是编译中的另一个重要组成部分了——翻译。几个重要的概念:语法分析器:就想汉语要区分主语谓语宾语一样,程序也需要区分赋值语句还是运算语句。这个过程就是语法分析器的工作。

2023-12-27 23:21:24 462

原创 基于Antlr4实现自定义语法规则

近期在对PostGirl自动化测试平台(https://gitee.com/chengzhi2/post-girl)进行深度优化时,考虑到定制测试模块之前只能对接口的出参结果进行校验检查,这样并不能保证接口的正确性,于是想到了在接口执行之前增加前置动作,前置动作主要实现的功能是对接口执行之前对数据库的数据状态做记录,然后在接口执行之后增加后置动作,后置动作则是再次查询数据库,以此来推断数据的变化是否是由接口执行引起的。

2023-12-27 22:54:30 576

原创 Jef-code-generator代码生成工具使用方式

什么情况下需要生成代码呢?一般,重复操作次数比较多的代码,javaweb技术中数据库表所对应的实体,这些代码有个特点,就是都是根据数据库来进行写get、set方法,还有一种就是mybatis中的这些dao文件,文件内容基本结构一模一样。这种文件一般我们都会选择去生成,而不是手动去写。但是生成代码的方式有很多,但是大多数都是基于模板来生成的,使用的技术也是模板技术,比如:freemarker,jsp这种模板引擎。1、编写代码模板/*** @description: 信管代码生成。

2023-10-16 21:31:36 364

原创 Maven打包添加本地工程jar包

先吐槽几句,公司有一小组专门来做各个项目的测试环境以及打包上线的工作,我们称之为XX,这个XX并不是什么业务领导,也只是一个螺丝钉。这群人每天对上跪舔,对其他人爱搭不理,给人一种高高在上的感觉,之前的一个老旧项目,好多年都没有新增过jar包了,最近有需求需要上线一个jar包,但是maven私仓地址我们团队的同事都有,那就只能找XX要了,结果两天发了n条消息就是不回复。我的工作也不能顺利推进。没办法只能自己想办法解决了。看了一下maven的文档发现一个systemPath关键字。于是探索了一下。

2023-10-16 21:29:22 301

原创 Gson反序列化原理

Gson利用反射的思想结合强大的Unsafe类,通过直接改变类的变量值来达到反序列化的目的。

2023-10-16 21:26:57 312

原创 设计模式之模板模式的实际使用案例

一般在业务相对比较成熟的公司,都有一套很适合业务并且相对成熟的框架供业务开发使用,业务开发者在不知晓框架底层逻辑的情况下在熟悉业务的老员工的指导下,也可以完成日常的curd工作。比如笔者所在的公司就是这样一种情况,框架提供全流程的业务功能,业务开发只需要适配各个业务模块即可,比如封装一个对外接口供外渠道调用,业务开发只需要继承一个抽象类,然后在子类中各个方法中添加内容即可完成业务,而整个调用链的工作过程也完全不需要业务开发者去关心。那么这种模式的工作原理是什么呢?

2023-04-28 13:01:23 307

原创 高效的Xml解析工具

大家在工作中不知道有没有遇到过类似的情况:1、需要写代码解析一个xml文件时,发现需要导入dom4j的jar包,一时又找不到,然后还得浪费几分钟时间去找jar包。2、好不容易找到了jar包,写了一段程序很适合本次使用,但是下次使用的时候还得重新写,代码复用率低。3、从网上找到了一段别人写的解析xml文件的代码,copy下来发现好多地方还得修改才能用。

2023-04-28 13:00:50 1131

原创 高效的Xml解析工具

大家在工作中不知道有没有遇到过类似的情况:1、需要写代码解析一个xml文件时,发现需要导入dom4j的jar包,一时又找不到,然后还得浪费几分钟时间去找jar包。2、好不容易找到了jar包,写了一段程序很适合本次使用,但是下次使用的时候还得重新写,代码复用率低。3、从网上找到了一段别人写的解析xml文件的代码,copy下来发现好多地方还得修改才能用。

2023-04-28 13:00:11 7708

原创 单例模式的四种创建方式

单例模式是日常开发中最常见的一种设计模式,常用来做为池对象,或者计数器之类的需要保证全局唯一的场景。单例模式的目的是保证在整个程序中只存在一个对象实例,使用单例一个前提条件就是构造器私有化,不允许通过new 对象的方式。单例模式的实现主要方式有如下几种:1、饿汉式实现2、使用枚举类实现3、懒汉式使用双重检查锁实现。4、使用静态内部类实现。

2023-04-28 12:59:24 1071

原创 VUE初级知识点总结

近几年随着HTML5的普及,原来的jsp逐渐在被淘汰,而vue成了很多前端开发者的心仪的js框架,因为它相对于其他两大框架(Angula、React)更简单易学,当然了这里的简单易学指的是上手快,在不知道其背后原理的情况下,可以短时间内上手并且有产出。就笔者而言,由于之前公司前台要使用vue重构,我做为一个后端工程师也被赶鸭子上架体验了一把前端开发。公司选用的技术栈就是vue,原因也很简单,国内的社区相对比较活跃,上手快。而我们也顺利的将我们团队所负责的前端页面完成了重构。

2023-04-28 12:59:11 1513

原创 api文档自动生成工具

由于笔者所在的团队属于最底层的服务提供者,所以我们日常的工作大都是基于业务提供对外接口api,但是因为我们项目年代比较久远,所以没有引入swagger之类的api工具。因此我们在封装完业务接口后都会提供一份完整的接口说明word文档出来,文档包括接口的出入参参数说明,还有参数类型,以及其他规范化的东西。每次写完接口写这些文档都是一个很令人生厌的事情,因此考虑做一个api生成工具。

2023-04-28 12:58:32 750

原创 跳表的实现以及应用

最近在看Redis相关资料发现redis的存储类型中有一个是zset,zset很有意思,分为两种实现一种是基于压缩列表,另一种是基于跳表实现。

2023-04-28 12:57:57 294

原创 Linxu下性能指标采集工具之nmon工具的使用

近期在测试JefLogTail,由于JefLogTail使用的是轮询的方式来监听文件夹,所以对cpu的消耗可能会高一些,所以在测试的时候着重关注CPU,Linux下查看CPU信息一般采用top命令来实时观察,但是这种对于只是通过观察数据的变化来评估cpu的实时情况显然不太科学。如果想要通过图标的形式来表现则需要借助一些外部工具,今天就来讲解一下nmon工具的使用。

2023-04-28 12:57:13 1083

原创 DateFormat使用时需要注意:多线程下需要特殊处理

工作或学习过程中难免会接触到时间(Date)相关的内容,比如String类型转为Date类型,或者Date类型转为String类型,jdk为我们提供了一套完善的日期格式化工具,DateFormat类,使用者可以使用该接口实现常用日期的格式化。但是这里面有个坑…

2023-04-28 12:56:38 871

原创 接口优化方案

最近随着国产化热潮,公司的用于营业的电脑全部从windows更换成了某国产化电脑,换成国产化之后,我们系统的前台web界面也由之前的jsp页面重构成vue.所以之前的一体式架构也变成了前后端分离的架构。但是在更换过程后,发现一些接口耗时相当长。虽然之前可能也不快,但是之前都是前后台在一起的,耗时长也没关系,多等一会儿就显示出来了,但是由于接入服务网关,服务网关请求后有超时时间限制,所以不得不优化了。

2023-04-18 20:51:38 914

原创 Linux系统下使用shell“多线程执行命令”

在工作中常遇到如下场景:系统未接入日志中心,系统本身使用集群部署,那么再查找日志的时候只能一台一台的去搜索关键字,后来运维同学发现这样一台一台效率太低了,于是有了升级版,升级之后的方式还是一台一台去搜索只不过这次换成了脚本去执行,原理上还是需要在一台上搜索完成之后再去另一台搜素。如果遇到日志相当多的情况,那这种也会很慢。下面介绍一种今天新学到的技能,就是使用“多线程”的方式去执行脚本,但是这种多线程并不是类似java中的那种多线程,而是触发了多个进程,这里的多线程可以理解为多进程。

2023-04-18 20:51:08 1869

原创 使用shell封装Linux命令实现自定义Linux命令

在日常工作中,尤其是在Linux上做开发的同学或者运维的同学们肯定会遇到过如下场景,比如在Linxu下通过find查找一个文件并且想看这个文件的详细信息,如果直接使用命令可能会一时想不起来,或者想起来了但是有个别参数忘记了。或者一些很频繁的操作,但是需要脚本来完成。于是一个目录下出现了很多脚本,真正用的时候又忘记了哪个脚本是干什么的。导致工作效率低下。

2023-04-18 20:50:23 1929

原创 SpringBoot自动配置原理分析

虽然工作中一直使用的是自研的一款基于spring的框架,但是随着springboot在各公司的广泛使用,公司的一些新项目也开始逐渐使用springBoot了,那么springBoot的一些特性就要仔细学习一下了。还记得之前使用springMVC的时候吗,不管是自动定义的bean类,还是从jar包中定义好的bean类都要手动配置到xml文件或者使用@service、@Component等注释来进行装配,装配的意思就是委托给spring去管理这些类。

2023-04-18 20:49:25 628

原创 SpringBoot的Starter封装示例

假设没有starter这个东西,如果要在spring项目中使用Jef-Flow(https://gitee.com/chengzhi2/jef-flow) 需要配置一个bean,虽然封装成了jar包,但是你还是要知道JefFlowAutoExcutor在哪里这样才能方便你去配置sring.xml,或者使用的时候只能通过new的方式。如果使用starter,这些逻辑都已经帮开发者处理好了,使用的时候只需要简单的配置即可。使用的时候只需引入即可,日常工作中,自己可以积累一些工具,这样就不用每次去搬代码了。

2023-04-18 20:48:23 704

原创 CountDownLatch背后的原理

在日常工作中常用到多线程,如果使用多线程处理那么就要考虑同步问题,一般我们会考虑使用加锁来解决。但是还有一些场景,如下:场景:小升初考试,考生做题,监考老师要等待所有考生交试卷后才可以离开,那么把考生比作多个线程,老师比作主线程。

2023-04-18 20:47:39 400

原创 Mysql索引失效的场景分析

日常使用Mysql做一些业务时,发现很慢,跟踪日志返现是有慢查询语句,于是使用explain查看执行计划发现是没有使用到索引,一般这些情况都不是java框架导致的,一般框架里都会根据主键或者指定的条件去做简单的查询,复杂的查询都是通过sql原生写法来实现的,这种原生写法最容易产生类似这样的问题。

2023-04-18 20:47:06 1742

原创 java中使用Redis实现分布式锁

目前很多大型的互联网公司后端都采用了分布式架构来支撑前端应用,其中服务拆分就是分布式的一种体现,既然服务拆分了,那么多个服务协调工作就会出现一些资源竞争的情况。比如多个服务对同一个表中的数据进行处理。容易出现类似多线程的不同步问题。多线程不同步我们一般通过代码中的锁来强制同步执行。但是对于这种多个服务的,这种本地锁久显得无能为力了。

2023-04-18 20:46:15 4060

原创 Volatile关键字的作用探究

今天下午BOSS上投了个简历小试了一波水,结果被问到一个知识点volatile关键字的作用,我回答了线程的可见性,另一个死活想不起来是什么,当回到工位上看了眼笔记,才想起来。这种知识点其实平时使用的频率还是挺高的,但是一般很少去探究它的原理,导致今天吃了亏。

2023-04-16 17:38:20 607

原创 一种轻量级日志采集解决方案

目前各大公司生产部署很多都是采用的集群+微服务的部署方式,如果让日志散落在各个主机上,查询起来会非常的困难,所以目前我了解到的都是采用的日志中心来统一收集管控日志,日志中心的实现方案大多基于ELK(即Elasticsearch、Logstash和Kibana三个开源软件的缩写),ELK一般都要配合FileBeat使用,其中FileBeat做为采集器,Logstash做为日志过滤格式化工具、Elasticsearch做为存储介质、Kibana做为视图解析器,四个组件搭配组成日志中心。

2023-04-16 17:37:36 1329

原创 Jef-log-tail日志采集工具使用说明

jef-log-tail是一款基于netty实现的日志采集工具,支持指定目录、指定文件、指定后缀的动态持续日志采集,日常使用场景如:集群部署后将多台主机的日志集中存放到一台日志服务器上,或者将日志统一输出到数据库、redis、kafka、es等存储组件上供后续分析查看。

2023-04-16 17:36:44 845

原创 TCP和UDP在实际工作中的应用

日常在网上浏览一些文章时都会看到一些介绍TCP和UDP的文章,每次都是草草浏览,而没有深入的去研究,这几天在做日志采集工具的时候恰好遇到一个问题,就是采集端将采集到的内容发送到服务端时这里采用的通信协议应该如何考量?

2023-04-16 17:36:00 997

原创 VUE中的this指向性认识不足导致生产故障

最近在对已有JSP界面重构成H5时,遇到了一个很有趣的问题,明明测试通过的界面,过几天回归发现之前的功能都不能用了,打开控制台发现报错了,报错内容大多都是xxxx is undefined,查看代码发现这类问题一般都是因为代码中使用new Pormise或者使用axios调用后台接口后的一些同步操作中出现的问题。那原因大概也能猜到了,就是因为this的指向性导致的。

2023-04-16 17:35:13 140

原创 系统接口幂等性设计探究

刚开始工作的时候写了一个带UI页面的工具,需要设计登录功能,登录功能也很简单,输入用户名密码点击登录,触发后台查询并比对密码,如果登录成功则返回消息给前端,前端把消息弹出提示一下。后来发现如果短时间内双击一下登录按钮则会提示两次登录成功,只要手快,点几下就弹出几次登录成功。后来随着工作的时间的增长,知识也开始慢慢积累,发现这种场景就是一个典型的幂等性问题。前面的例子如果多次点登录,提示多次那还没有问题,但是如果后台还要记录一些登录信息,比如登录时间,登录次数…,那没有幂等性判断则会在后台记录多次登录信息。

2023-04-16 17:34:17 640

原创 java nio中的ByteBuffer扩展

在jdk1.4之前对于输入输出只能使用InPutStream和outPutSream这类传统io模型,在jdk1.4之后新增了nio,什么是nio?nio是new input/output 的简称,nio的效率要比传统io效率高,主要原因就是nio利用了系统底层的零拷贝技术和多路复用技术。

2023-04-16 17:33:30 821

原创 java nio中的ByteBuffer扩展

在jdk1.4之前对于输入输出只能使用InPutStream和outPutSream这类传统io模型,在jdk1.4之后新增了nio,什么是nio?nio是new input/output 的简称,nio的效率要比传统io效率高,主要原因就是nio利用了系统底层的零拷贝技术和多路复用技术。

2023-04-16 17:32:57 551

原创 存储过程使用过程中的注意事项

近几年各公司在国产化浪潮的推动下,好多大公司都开始放弃国外的一些数据库并转战国产化数据库,目前为止国产化数据库有很多,但是大多是基于mysql或者postreSql衍生出来的,比如腾讯、阿里、华为等一些大厂自研的一些数据库。目前为止从摩天轮国产化数据库排名情况来看,已经有276款国产化数据库了,这些国产化数据库虽然大都遵循SQL标准,但是对于存储过程的实现可能还有一些区别。就大家耳熟能详的oracel和mysql的存储过程语法就大不相同。

2023-04-16 17:32:11 937

WinServer.zip

windows Server .Net FrameWork 3.5离线安装包(Windows server 2012 R2和Windows server 2016),适用于公司云桌面等不可使用公网的地方。。

2021-01-20

空空如也

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

TA关注的人

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