遗传算法应用的性能调整
...
探索遗传算法的应用-题库智能组卷
前言 在我做一个教学系统的项目时,遇到了一个问题场景,需要实现一个题库的功能,存放许多携带不同参数的题目,并且可以按照教师的参数需求,进行智能随机组卷。 一开始我以为是个比较简单的问题,准备自己手写个简单算法,能实现效果就行,但随着题目和题库的大致模型构思完,题目的参数变多,需要考虑的问题、意外的情况太多,自己写的代码屡屡出现问题,最终决定选择一套系统的、成体系的算法来重构这部分代码。 上网查阅了相关资料,找到了两种算法:1.回溯算法...
windows计划任务执行bat脚本失败踩坑
问题描述 在Windows服务器上部署Tomcat服务时,用Tomcat的启动脚本启动服务(start.bat)。手动双击执行时服务正常重启,但通过Windows计划任务调度时始终失效。任务历史记录显示"操作成功完成",但实际服务状态未变化,日志文件也未生成。 Tomcat启动bat脚本,其中加了一行打印启动日志 1echo %DATE% %TIME% Tomcat start begin. >> "%CATALINA_HOME%\startLog.log" 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263@echo offrem Licensed to the Apache Software Foundation (ASF) under one or morerem contributor license agreements. See...
Excel多线程带进度条异步导出框架
框架描述 使用Java代码封装的一个的Excel多线程批量导出框架,使用EasyExcel完成excel文件方面的交互,重在整合功能,仅需少量代码就可以在自己的项目中快速引入该功能。借助EasyExcel支持的功能,框架可以分批流式处理写入数据到磁盘,导出文件存放在服务器一个临时路径,下载后删除,避免OOM;并且使用多线程提高数据处理速度,异步线程处理便于前端查看导出进度与处理结果。 框架代码采取了设计模式中的策略模式,只需要实现其中的策略类DataGetter(分页获取数据),就可以快速使用导出功能,并且给出了前端的配套代码示例(vue)。 demo项目地址:https://github.com/destinyol/excel-multi-export-progress (demo项目包括数据库sql文件及假数据生成SpringbootTest,以及全套测试代码,可以直接部署运行) 框架文件结构:(ExcelStyle文件可更改表格样式) 效果展示 可调参数 ExcelExportMainTool类中有一些可以根据实际情况自行调整的参数 1234567891011//...
Excel流式多线程带进度条功能的导入框架
描述 使用Java代码封装的一个Excel批量导入框架,使用EasyExcel完成excel文件方面的交互,重在整合功能,仅需少量代码就可以在自己的项目中快速引入该功能。可以流式分批读取Excel中的数据,避免OOM,使用多线程提高处理速度,异步线程处理便于前端查看导入进度与处理结果。 框架代码采取了设计模式中的策略模式,只需要实现其中的策略类(针对自己的业务来处理每行数据),就可以快速使用导入功能,并且给出了前端的配套代码示例(vue)。 demo项目地址:https://github.com/destinyol/excel-multi-import-progress (demo项目不包括数据库交互部分,所以无法运行,只是演示代码如何使用) 框架项目文件结构: ps:修改ExcelImportMainTool 中的 BATCH_COUNT 可自定义每次从excel中读取多少行数据,默认1000行 效果展示 可调参数 ExcelImportMainTool类中有一些可以根据实际情况自行调整的参数 12345public static final int...
Java实体类属性轻量级验空抛错工具
说明 Java中接口接收的表单类、代码中的实体类等,快速验证属性名是否为空,避免业务逻辑出错,为空则抛出异常 仅需一行代码,开箱即用,简便快捷,支持使用Java双冒号操作符或注解指定类字段,可自定义判空逻辑以满足不同需求,Jdk版本1.8/11/17均可使用 使用示例 ValueRuntimeException是我自己的自定义异常 代码demo演示:https://github.com/destinyol/attribute-check 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556/** * 使用示例 */ public static void main(String[] args) { // 实例化链式构造调用 @Data class Test { private String name; private...
sm2+sm4混合加密服务间开放接口鉴权
简介 本文介绍了基于国密sm2+sm4加密算法的接口鉴权demo demo是java8 +...
短信接口防恶意并发请求
问题描述 项目的业务有个功能是发送短信验证码,为了防止该接口功能被恶意调用,需要做出一些限制,比如每个手机号每60秒只能成功执行一次短信接口请求 问题探索解决 设计方案 最开始没有怎么经过思考便决定使用Redis中间件来简单解决这个问题: 当请求进入时,用手机号作为key检测该key是否存在,如果不存在则将该key存入Redis中,设置60秒过期,并正确进入业务;如果该key存在,则返回错误,不给进入短信业务 123456String validKey = 手机号 + "xxx_xxx"if (redisTemplate.hasKey(validKey)){ throw new ValueRuntimeException("xxxxx");}redisTemplate.opsForValue().set(validKey,1);redisTemplate.expire(validKey, 1,...
mysql窗口函数
前言 我在写sql语句的时候,遇到主表副表一对多的关系,需要主表join副表,并对副表的记录汇总处理等操作。之前处理这样的操作,我都是group by主表的字段,然后聚合函数处理副表的字段。但如果查询比较复杂,不仅需要副表join的多行数据,又需要对副表聚合查询,group by就不好用了。并且group by需要好多字段,否则会不满足mysql的语法要求this is incompatible with sql_mode=only_full_group_by。因此我学习了mysql的窗口函数,来简化这些操作。 简介 窗口函数(Window Functions)允许你在查询结果的行上执行计算,而不必对数据进行分组(GROUP BY)。 常见使用场景 数据分析,如排名、排序、分组统计、计算、前后值比较等 对某些分组场景简化SQL,提升效率 常用于子查询,将一些复杂条件简化 需求MySQL版本 >= 8 语法结构 12345function_name(expression) OVER ( [PARTITION BY column_name(s)] -- 分区 ...
特殊格式JSON自定义解析装配
问题描述 业务需要调用一个第三方图像识别的API,然后将识别出来的结果区分出不同类型,并分别装配到对应的Java实体类里 听起来是一个很正常的需求,现在JSON解析的工具有很多,而且都很成熟,但奈何识别出的JSON结果嵌套了很多复杂的结构,找不到现成的工具方法解决这个问题,JSON格式如下所示: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192{ "words_result": [ { "result": { "AmountInWords": [ { ...