自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(274)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

原创 SVN代码迁移至GIT并保留提交记录

我们使用git-svn 指令可以做到代码得迁移,当然如果你的svn管理不遵循标准分支,以下脚本也是可以使用的。

2023-12-07 14:44:32 215

原创 windows脚本获取管理员权限修改host

很多时候我们常常需要通过管理员权限执行脚本,脚本可能涉及到一些受保护信息的访问,我们写个简单的脚本来更改host文件,host文件就是需要管理员权限才能访问的启动脚本时先检查是否有管理员权限,如果没有就调用授权脚本进行管理员授权打开,给用户弹出需要管理员权限是否允许。

2023-08-03 16:28:40 1325

原创 ci过程中最新的按分支分仓方案,再也不怕打包依赖互相覆盖的问题了

我们项目的管理模式是让生产环境时刻保持master的最新版本。所有需求线都从master拉取分支。需求开发完成后直接分支提测,我们提供一整套的分支路由功能。使用一套环境解决了所有分支共享环境,测试人员能够精准进行按分支测试。上线时将代码合并到master中。

2023-06-27 14:46:12 406 1

原创 再来讲讲android的字节码插桩

当然相对于一些包可能做了混淆,加密,或者加固的可能就更加困难了,还有的包可能还有反调试之类的机制,你甚至都无法进行调试,更别说找到想要的插桩点了。我们一般使用的jvm是hotspot虚拟机,其实市面上还有很多其它用途的虚拟机,比如安卓的虚拟机dalvik,在hotspot虚拟机中加载的xxx.class文件,而dalvik中加载的时xxx.smali文件,本质上都是符合虚拟机规范的,没什么区别,smali的格式看起来会比class文件来的更加清晰和简洁一点,代码看起来也更容易阅读。将该项目编译成jar包。

2023-06-07 18:48:26 792

原创 java字节码插桩详解以及一个简单的示例

visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf):访问方法调用指令,opcode表示指令的操作码,owner表示方法所属的类名,name表示方法名,desc表示方法描述符,itf表示方法是否为接口方法。它是一个抽象类,需要继承并实现其中的方法来实现对方法字节码的访问和修改。方法中,我们可以指定要添加的方法操作码类型、方法所属的类、方法的名称、方法的描述符和是否为接口方法,从而修改方法的字节码。

2023-06-07 17:52:46 1298

原创 使用javaagen进行字节码插桩实现日志收集

总不能你在你的代码中随便命名了一个方法叫premain,人家就要给你去执行嘛,所以此处需要你去指定premain方法是哪个,而这个指定的属性就在ManiFest.mf中,我们来看看此文件具体的内容,非常好理解,见名知意,就不多解释了。发现原来main-class并不是我们的启动类,而是一个JarLauncher,这个玩意不是本次的重点我们就不介绍了,然后是Start-Class这个是springboot扩展的,由于它占用了Main-Class属性,所以在定义个Start-Class来作为入口。

2023-06-07 17:44:28 1074

原创 jacoco增量覆盖率平台开发

先聊聊做这个平台的意义,从项目管理角度来说,测试说项目测试完成,该如何证明呢?一般情况下我们进行验收时没什么问题就算完成了,但是实际上测试很多情况并没有考虑到。所以该平台可以反哺测试的测试用例,让平台质量把控上升一个层次,其次可以作为产品验收的标准。覆盖率至少达到百分90才可以发布到生产。为什么时百分90不是百分百,作为开发人员有很多时候会写一些防止报错的异常代码,这部分代码可能正常情况下是永远执行不到的。

2023-05-28 22:33:21 2870 4

原创 skywalking手动上报一些指标信息

skywalking的相关概念我就不介绍了,有兴趣可以参看以下提供以下简单示例手工上报一些对问题排查比较有用的一些信息。当然这些内容你也可以写成探针插件的形式,怎么开发探针插件也自行参考官方文档。此处仅在项目框架层面提供一些简单的示例,助于你快速入门。

2023-04-26 18:52:59 798 3

原创 mybatisplus-3.5.3.1生产级别代码生成器配置

一般情况下我们项目以实体为中心,所以我们考虑到我们项目在迭代过程中,实体新增字段,不会影响以往的代码,所以我们需要将mapper文件分成两个并且属于同一个命名空间下,然后关闭全局null字段更新,避免迭代之后,其它业务的更新影响新增的字段值。所以mapper.xml的目录结构如下,default中存放生成的xml,立马只有resultmap预计basecolumnList。对开发而言是十分便利的,不要小看这一点点的便利性,它能提升开发人员的工作效率。所有PO的父类,公共字段,并设置填充注解。

2023-04-26 15:20:13 1095

原创 shardingjdbc-5.3.2加解密

上一篇文章`集成了shading-jdbc-core-4.0.1 后续的业务遇到了很多坑,于是决定升级,花了好大劲升级到了4.1.1,发现还是好多坑,于是又花了好大劲总算升级到了5.3.2,才摆脱这些坑,但是还是有一点小问题,不支持将加解密字段作为临时表的条件。4.0.1 不支持sql的if语句,group by,子查询等语句,而4.1.1不支持别名的查询,查看官方的更新日志,发现别名查询的问题在5.3.1修复的。

2023-04-22 13:19:42 655

原创 数据库敏感字段脱敏

如果你有申请过一些软件资质,应该会被要求敏感数据进行加密,比如密码不能明文,用户的手机号,身份证信息,银行卡号信息,等等都需要以加密的形式放在数据库中,防止因系统漏洞导致被拖库,黑客直接就能拿到这些信息,给用户的人身财产安全带来严重的隐患。脱敏实际就是加密,这边分为两种类型不可逆 如密码这种直接采用不可逆的加密方式可逆的 如手机号,身份证,银行卡这种信息需要密文存储,但是需要时必须能解密。

2023-02-17 10:43:17 3174

原创 有了importSelector为什么还要有importBeandefinitionRegistrar

那么自定义BeanDefinition又是为了什么呢?前面说到自定义注解可以通过ImportSelector扫描进行注册,但是假如我的自定义注解中有一些属性是需要在生成bean的时候进行配置的呢?该怎么处理?这时使用ImportSelector是实现不了的。通过以上的说明,我相信大家已经有答案了ImportSelector 更多的时候是使用spring已有的BeanDefinition解析机制直接处理成BeanDefinition的场景。

2023-02-15 12:51:41 538

原创 asyncexcel异步导入保存原文件

导入导出经常性会出现一些业务问题,因为有大批量数据是在用户手上进行编辑的,这个内容不可控。所以一旦出现问题,很多情况下需要找用户获取导入时点数据。而这个往往需要进行大量的沟通,并且用户所给过来的文件也未必是导入时的数据文件。所以为了问题可追朔,asyncexcel中添加了个源文件字段,用于保存源文件。先将文件上传至文件服务,返回url,前端携带url访问导入接口,在导入接口打开一个流,进行读取导入。前端直接将文件上传至导入接口,由导入接口处理文件存储并放回url进行存储。

2023-02-14 11:26:55 366

原创 asyncexcel按类型分sheet导出相同数据

1、在controller中先查询要分多少个sheet,这里可以使用group by从数据库统计出来有多少种类型,然后将不同维度作为条件分割sheet数据,放到一个队列种,并将队列丢给入参map。2、然后再handler种一个个弹出队列,作为一个维度,对应一个handler。单一个sheet执行完成后,执行下一个sheet ,需要重新声明一个sheet替换掉上下文中的sheet。看标题又是一个变态的需求,但是实际业务场景中确实存在。那么此时的场景似乎也差不多,对业务代码稍微改动下即可。

2023-02-13 17:30:39 438

原创 让mybatis-plus支持null字段全量更新

所以单独设置某一个策略是很难满足实际的业务场景,因此我们需要在写具体业务代码的时候能够根据需要选择合适的方式。所以此时使用这种方案很明显的使用起来非常难受,那么有没有方案既能支持有值更新,又能支持指定更新,还能。这四种策略既可以配置全局,也可以在实体的注解上配置,但是,配置之后就是死的玩意,无法动态。很显然字段较少时这个方案还能说的过去,但是我们既有很少字段的情况,也有大批量字段的情况。当然此处的全部字段肯定也不是真的全部字段比如:一些比较特别的字段就不能被更新为null。但是我们的业务往往需要如下支持。

2023-02-13 15:07:16 5212 2

原创 easy-excel通用异步导入导出神辅助

async-excel是easy-excel的辅助组件,抽取通用异步逻辑,通过引入一个starter配置个数据源就可以让导入导出变成异步,无需额外的任何代码,不改变easy-excel的任何特性。async-excel基于easy-excel抽取了异步逻辑,并且使用了sping的父子容器,适配了springboot-starter,使用该组件非常简单。当前版本1.1.0。为了支持业务上日益变态的需求,对async-excel进行了一轮重构。这个类带了两个map 一个是表头的map,一个是数据的map。

2023-02-01 18:31:17 2737

原创 redis对cluster槽的操作命令

展示槽位分配信息节点、范围、对应主节点、节点id、等,不同版本显示信息略有出入。提示:根据自己不同的版本使用cluster help 命令可以获得一定的帮助。示例:计算user这个key的hash值,返回对应的槽位。示例:统计hash槽7000这个槽位上有多少个key。示例:获取1 这个槽位中的数据分页展示3个。示例:将1、2、3、4、5分配给当前节点。示例:解绑1、2、3、4、5这5个槽位。示例:解绑1、2、3、4、5这5个槽位。示例:将1、2、3节点分配给当前节点。返回1 说明该槽位有1个key。

2023-01-28 18:33:53 1364

原创 微服务框架需要处理哪些问题?

正常情况下数据结构分为特定数据,非特定数据特定数据,比如记录登入相关的信息非特定数据,比如一些业务处理的状态需要流转到下一个服务。

2023-01-22 01:26:31 2114

原创 jsqlparser无法解析带if语句问题

在各种有相关联组件整合的时候,可能发生你意想不到的问题,可能在这个问题中,你用单独用任何一个包,可能都不会出现问题,但是一旦他们结合就出现问题了。此处将投影和条件做了一个区分,投影字段加了个AS进去,这样在后续解析的时候就能区分的出来哪个是条件需要在preparement阶段加密传进来的参数,哪个是结果集,需要在resultset阶段解密。但是为什么用了源sql,这是第一个问题,sql优化使用的是jsqlparser-1.4版本,如果能优化就会生成上面的sql,如果抛异常使用原sql。

2023-01-19 11:43:09 1882

原创 async-excel整合站内信通知用户体验感满满

业务处理类还是该怎么写怎么写,所以我们来讲讲callback中做了什么事情,首先我们判断导出结果是成功还是失败,有没有异常,根据不同的类型我们包装不同的消息内容类型,如果出现异常了我们包装一个纯文本消息,如果导出正常并且有链接我们包装一个下载链接的消息最后通过消息工具类发送广播消息给mq。在回到之前下消息中心我们写了个消费者,监听广播消息,我消费者可能部署多个节点,所以客户端可能连接在不同的节点上,所以消费者在收到消息的时候判断下目标客户端有没有连接在当前节点,如果不存在消息直接丢弃,如果存在则发送出去。

2023-01-13 21:06:55 1009

原创 Springboot中PropertySource的数据结构及加载过程

这个方法做了一件神奇的事情,因为默认配置是最先被放到环境容器中的,所以它在最前面,所以后续往里又添加了很多其它的propertysource之后,需要将它移动到最后,做一个兜底策略,最终就是取不到配置了再去取默认配置。这些参数是被servlet容器所解析的,同时也对spring进行了映射,包括jndi配置,即你在容器层面做的配置最终也会被映射到environment中。我们发现做了两个环节的处理,一个是环境装备完成的时候处理了一次,一个是容器准备完成时处理了一次,这两次的事件的执行时机分别如下。

2023-01-05 19:24:26 996 1

原创 springboot配置加载过程解析

好此时我们已经获得了一个分好类的参数对象,丢给父类在加工,发现父类又丢给了父类,但是我们发现 父类已经是一个PropertySource的子类,所以最后这里被封装成了一个PropertySource对象,实际上就是把返回的commandLineArgs对象缓存起来,最终通过提供的抽象方法,可以获取到对应的属性。最终所有的getProperty都走到如下代码,而这段代码也很简单就是遍历所有的propertysource ,如果取到则终止,也就给我们营造了一个假象,就是同一个配置被覆盖的假象。

2022-12-23 18:08:46 1132

原创 springboot启动过程解析

从该方法我们一路跟进去,进入SpringApplication的构造函数,我们可以看到如下代码primarySources,为我们从run方法塞进来的主类,而resourceLoader此处为null,是通过构造函数重载进来,意味着这里还有其它方式的用法,先绕过。接着看代码,此处对主函数的推断非常的巧妙,就是利用虚拟机运行时已被入栈的所有链路一路追踪到方法名为main的函数,然后获取到他的类名。设置该当前类的initializers集合,后面的Listeners 集合也是一样的过程。

2022-12-21 16:09:49 955

原创 springboot+netty实现站内消息通知(完整代码)

见名知意,就是channel 初始化器,当每个客户端创建连接时这里面的代码都会执行一遍。问题:哪些实例可以声明成单例,或者交给spring管理?因为如果每个连接都创建这么一大堆对象,可以想像1万个连接,这里会多占用多少内存出来?这个问题也不难回答,没有中间态,线程安全的类是可以声明成单例的,所以我们顺着这个方向大概就可以知道哪些是可以作为单例进行声明得。授人以鱼不如授人以渔。

2022-12-09 10:11:04 3220 1

原创 使用async-excel进行多sheet异步导出

业务上如果需要单sheet导出,有时有需要将多个单sheet导出合并到一个excel里面此时,代码写起来也是颇为蛋碎,但是在async-excel中,你可以不改变原有任何逻辑,只需要在增加一个简单的controller方法即可。DataExportParam 内部携带了个map,你可以自由传参,在不同的handler中可以按需获取。

2022-11-28 14:55:08 734

原创 写爬虫被字体反爬了怎么办?

通过观察发现,html的中乱码需要使用该站点提供的字体文件进行渲染,该站点自定义了一套字体和自定义的unicode的规则进行映射。有个朋友写的爬虫,遇到个问题,就是爬回来的数据文字中有很多表情符号,拿到的html文档又有很多字是乱码?此时我们就得到一个自定义unicode对应字符的编码映射字典,在根据这个映字典去解析html中对应标签的内容即可。新建目录存放你下载的字库文件。对应的字体解析工具开源项目。离线ocr我们也开源项目。直接引入maven包即可。是不是so easy!

2022-09-29 21:03:40 756

原创 flowable相关的一些名词说明

flowable相关的一些名词说明BPMN,CMMN,DMN,任务、网关、流程定义等,会签、或签、转办、委派,抄送。功能划分用户模块,配置模块

2022-09-20 23:16:08 2125 2

原创 当try_files遇上gateway是如何产生火花的

我们做了多分支管理环境隔离,一套满足开发调试、测试、产品验收、多需求并行开发的千人千面的环境。请求进行精准路由,其中有个环节是需要将前端项目作为一个服务注册到注册中心。环境下我们可以利用生命周期回调来执行脚本,在项目启动成功后执行注册,项目停止前删除实例,由于前端项目不容易挂,所以直接注册一个永久节点,不用临时节点所以,不用心跳。此时找到的是文件就不会发生重定向,而是直接访问了文件。重点来了此时如果你的前端项目用的时。下也会出现这个问题。进行访问的,所以此时重定向的地址变成了。配置是这样的,当然如果你是。

2022-09-08 11:35:05 976

原创 使用shell注册服务到nacos

想将前端项目注册到nacos中,用来做标签路由,但是又不想再机器上再引入其它组件的情况下可以使用shell调用nacos的接口直接注册,并启动一个死循环保持住心跳即可。启动服务返回结果如下。

2022-09-06 19:12:11 493

原创 原来spring的父子容器还可以这样用

至此,又想到一个点,其实这也是之前微服务架构下特别头疼的一个问题,就是一些所谓的公共特性的服务,比如一些死的缓存类的东西,比如字典。以及一些配置,每次都要去调用公共服务,这太损耗性能以及开发成本太高了,如果可以直接使用一个子容器,将它包到各个服务去,并且提供一个公共数据源,将这部分高频,低效的内容高效化。我也不反驳,这个就跟违背数据库范式一个原则,采取适当冗余,不要死读书。然后要还需要提供个接口给外部获取bean,因为父容器无法获取子容器的bean。利用这样的特性,我可以把数据源声明在子容器内。...

2022-08-31 16:01:08 580

原创 超好用的excel异步导入导出组件

1、asyncexcel基于阿里的easyexcel包装,抽取异步骨架,不改变easyexcel的特性2、有个小坑就是@excelproperty注解的index无法使用了,所以编写excel model的时候需要注意编写顺序需要于excel中的表头顺序一致。......

2022-08-27 10:33:52 4387 3

原创 微服务项目下冗余数据如何同步?

本身这是一种反范式的做法,但是有时候你又不得不这么做,因为这样不用进行跨服务查询,而名称的修改本身是个低频操作,所以如果你选择只存id,而不冗余名称,你会发现,服务间调用大大增加,性能急剧下降。前端一个订单列表可能需要将仓库,商品,等信息显示在一个页面上,此时你查一个订单列表就需要调用各个服务,而每一次调用的目的仅仅是为了取一个字段。一般这种数据冗余是在三范式的基础上违反第三范式的冗余也就是依赖传递,所以此时在表中的数据一定存在一个被传递的唯一id,比如,商品id,商品名称,商品名称就是被冗余的字段。...

2022-08-15 09:57:11 1493 3

原创 idea插件自动填充setter

今天要说的主角还是beancopy在我们日常开发中属性的转换填充是一件费力的事情,于是就有了beancopy这玩意,虽然提升了开发效率,并且代码看上去也简洁了很多,但是,随之而来了一系列不可控的问题:再回到BeanCopy的性能上来说,不管你是用MapStruct ,无缓存的反射,有缓存的反射,还是使用asm技术,性能还是比直接set来的差100倍不止,以下是测试结果reflect time:1242cglib time:331directSet time:3此处应该有惊叹声,天啦,差这么多的吗?

2022-08-10 13:04:46 778

原创 项目中生成MultipartFile并调用其它服务

微服务项目中服务调用需要生成multipartFile问题的几种解决方案。1、引入test包,使用test包中的MockMultipartFile。2、自定义实现一个MockMultipartFile(推荐)

2022-07-19 10:21:01 1405

原创 devops分支分仓打包方案

devops下项目ci的时候是通过docker拉起一个打包机进行项目打包,如果没有本地缓存就会出现所有包均需要取中央仓库或者私库拉取。所以需要弄个共享磁盘作为本地缓存挂载到打包机中,那么新的问题又来了。如果不同项目间存在依赖,此时打包就会出现串包现象。所以就会出现莫名奇妙的问题,例如我代码明明提交了,也打包成功了,为什么没有生效。百思不得其解我明明没写这个代码,怎么给我报这个错误。诸如此类的问题,在大型团队下就会频繁发生。如果你生产环境也用的是snapshot,那么此时问题会更加严重,于是

2022-05-10 14:05:15 700

原创 kubespray最新版踩坑安装k8s

下载最新发行版本,解压 wget https://github.com/kubernetes-sigs/kubespray/archive/refs/tags/v2.18.1.tar.gz tar -zxvf v2.18.1.tar.gzkubernetes官网使用kubespray方式安装kubespray Getting Started先阅读下此页面kubespray readme支持的docker版本18.09, 19.03 和 20.10.推荐使用20.10.cri-o版本支持

2022-05-07 22:51:54 821 1

原创 无坑手撸istio

首先查看版本对照表【support-status-of-istio-releases】我们的kubernetes版本是1.19.16,支持1.8~1.12我们用1.12安装接着开始安装查看【getting-started】查看发布版本【releases】下载解压对应版本,1.12.5+ 为已知的无漏洞版本,所以我们选1.12.6curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.12.6 TARGET_ARCH=x86_64 sh -

2022-05-06 09:38:56 2157

原创 全程无坑手撸k8s集群

主机规划10.210.13.4 istio-master10.210.13.43 istio-node1 10.210.13.12 istio-node2安装操作系统CentOS Linux release 7.6.1810 (Core)使用命令查看操作系统版本cat /etc/redhat-release如果你是云主机直接选择对应版本即可。涉及组件较多,可能版本上的偏差会出现不确定性问题设置域名vi /etc/hosts黏贴以下内容,每台机器都指定,ho

2022-05-04 21:39:55 389

原创 k8s下docker容器获取cpu核心数不准确导致高负载引发的宕机问题

看了很多书都说docker来部署应用可以隔离系统资源互不影响,直到这段时间出现的一系列问题又颠覆了我的认知。发现docker并不能隔离真正隔离系统资源。最近k8s中的某一个应用总是被强制重启,由于监控体系没有完善,找了好久都没有找到原因,之前也有其它应用类似的问题是应为metaspace溢出导致的,但是此次事务毫无报错,严重时一天重启三次。有时候又一连好几天个把月没有问题。为了不让五一小长假的美好心情被破坏,觉定把这个问题彻底解决掉,好吧其实放假的第一天就被破坏了,当天重启了3次,为了后续的美好日子,决定

2022-05-01 13:10:14 2493

原创 8086汇编(10、int9键盘中断)

今天我们来实现个功能按F1 不断改变屏幕颜色概念:按键盘会产生扫描码通码 按住不放断码 弹起,通码+80Hint9中断对应的端口为60H,也就是我们按下键盘,就可以从60H中读取到扫描码扫描码的对照表可以参考这篇文章:键盘按键的各种编码对照表如果我们直接改变int9,那么硬件层面的一些其它操作细节会就无法继续了,比如控制键的状态信息的填充,比如后续硬件的应答事件。所以这里我们需要做个事情就是在调用int9之前做一个拦截。也就是我们先从60H端口中把数据读走,然后在调用它原来的中断,做

2022-04-03 02:09:44 1629

万能的鼠标、按键模拟器

很强大的模拟工具,可以后台鼠标键盘操作,以前用的软件老觉得鼠标,键盘个数不够多,现在这个全键盘,还可以无限添加,自由删除,当真万能了,很好很强大,分享给大家。还有后台喊话的功能。

2014-07-01

C#考试管理系统

从零教你做一个完美的考试管理系统,全程图文指导。 内容详细到任何一步操作,保证你能做出个完好的考试管理系统。 稍微更改可替换成其他你想要做的系统。

2012-05-02

同济大学最新版现行代数试卷及答案

07年改版的同济大学版线性代数试卷及答案,也就是大家现在在用的版本,对于备考的同学来说,很不错。

2010-01-21

程序设计大赛的题目和程序

程序设计大赛的题目。。。自己用c语言写的,准备参加比赛的童鞋可以看看

2010-01-15

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

TA关注的人

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