java
浅度差文
自立自强,动手编码,丰衣足食,减少对第三方jar包的依赖。
展开
-
模仿SpringSecurity配置文件的写法对mybatisPlus查询方法的改造
使用mybatisPlus查询数据的传统流程是:Autowired mapper对象。new Wrapper 一通乱set Wrapper ,select xxx。但实际开发中,还有很大的改进空间,一是一些脆弱的参数设置有多处,得不到妥善维护,二是代码编写丑陋难看。因此,本人模仿SpringSecurity的配置文件的写法,对一些使用频繁查询对象做了点改动,将一些脆弱的参数设置全部提取到构建器中,保证项目内,某参数的设置方法只有唯一的一处。有利提高代码可维护性和复用性能。用起来也感觉很舒服。原创 2024-04-16 10:24:49 · 263 阅读 · 0 评论 -
参考spring占位符解析器写的一个占位符解析工具,用于短信模板,消息模板等地方
占位符解析工具类原创 2022-11-04 17:29:05 · 271 阅读 · 1 评论 -
更优雅的编写防止列表重复添加model的工具
往list集合中添加对象时,有时并不能通过重写hashCode和equels方法来调用list的constant方法来去重。需要写一个集合单独判断。如下代码:修改后,代码要整洁多了,而且hashmap找key比起遍历集合找重复的效率要高得多:工具类:...原创 2022-07-01 13:49:21 · 87 阅读 · 0 评论 -
spring bean静态方法的玩法(替换容器静态变量)
方法用于替换容器静态变量,从而让代码更优雅:如下场景从代码角度来说,不够好看:public class SpringUtils implements ApplicationContextAware {public static ApplicationContext applicationContext = null;tthis.applicationContext =xxxgetBean(class xxx);}public void doBusiness{public void fun(){原创 2022-06-21 11:14:16 · 543 阅读 · 0 评论 -
拓维面试题找最长重复子串,哈哈
标题:最长重复子串定义重复字符串是由两个相同的字符串首尾拼接而成,例如 便是长度为6的一个重复字符串,而 则不存在重复字符串。给定一个字符串,请返回其最长重复子串的长度。若不存在任何重复字符子串,则返回 0 。本题中子串的定义是字符串中一段连续的区间。数据范围:字符串长度不大于 ,保证字符串一定由小写字母构成。进阶:空间复杂度 ,时间复杂度备注:示例1:输入ababc输出4public class TuoWeiExamieDemo { private static String原创 2022-03-22 21:25:29 · 197 阅读 · 0 评论 -
华为算法机试题-找子串,留个记念哈哈
public class SubSequeuesDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入target字符串..."); String targetStr = scanner.next(); System.out.println("请输入source字符串..."); String sourceStr原创 2022-03-15 13:22:30 · 422 阅读 · 0 评论 -
mysql学习笔记(四)
事物ACID特性:原子性,一组sql要么全部执行,要么全部不执行。发送sql->bufferPool内存修改->产生Redo/Undo日志->刷盘->成功或异常事物提交了,BP没有刷盘,用redo来保证修改不失效。事物没提交,BP已刷盘了,用undo来保证数据的还原.持久性,事物提交后,在库里的数据改变是永久的。一般的提交骤:提交->写binlog日志->发送binlog(主从)->在座引擎提交->日志刷新(redo,undo)->刷盘-&g原创 2022-03-06 21:33:16 · 258 阅读 · 0 评论 -
mysql学习笔记(三)
索引定义:存储引擎快速查找记录的一种数据结构,索引是物理数据存储,innodb.ibd文件利用数据页配置 ,加以加快检索速度。但其增删改需要代价。索线数据行搜索方式:二分查找法(拆半查找法),利用记录左右记录索引除以2,得到m值,判断下标在边侧还是右侧,在左则,则R=m-1,在右侧则L=m+1.hash运算,适合等值查询,范围运算需要全表扫描。b+tree查找,索引值存在页子节点,索引存在根节点。每个节点可以存放多个索引。树节点的值从左到右升序。B树从根节点开始,对节点索引值序列采用二分查找,如果原创 2022-03-04 20:57:15 · 696 阅读 · 0 评论 -
小项目常用的一些本地脚本和服务器脚本
1、windows系统用maven打springBoot自定义启动器jar包,上传到本地中央仓库(需要支持覆盖上传jar)d:cd #####set version=###############call mvn cleancall mvn source:jar install echo %version%call mvn deploy:deploy-file -DgroupId=#####-DartifactId=#####-configuration-Dversion=%versi原创 2022-03-03 17:42:15 · 532 阅读 · 0 评论 -
mysql学习笔记(二)
存储引擎:负责数据存储,与文件打交道,是根据mysql提供的文件访问层抽象接口定义的一种文件访问机制。InnoDB:5.5版本作为mysql的默认引擎。支持事务和外键,具有提交,回滚,崩溃恢复能力。myisam:不支持事务和外键,访问速度快。InnoDB与myisam对比:事务方面–>InnoDB支持事务,myisam不支持事务。锁机制–>InnoDB支持行级锁,基于索引。myisam支持表级锁。并发能力不行。索引–>InnoDB采用聚集索引,索引和记录一起存储。myis原创 2022-03-02 20:18:51 · 439 阅读 · 0 评论 -
Mysql学习笔记(一)
什么是去IOE:IBM的服务器,Oracle的数据库、EMC的存储设备Mysql相关时间点:96年发布1.0,2000年开源、2004年引入InnoDB引擎、08年被sum收购、5.5版本InnoDB作为默认引擎。mysql架构演变:单点–>主从复制,读写分离–>分库分表,水平拆分.mysql结构:客户端连接器连接池系统管理和控制工具sql接口–>解析器–>查询优化器–>缓存(默认禁用,8版本移除)可插拔存储引擎系统文件–>文件和日志mysql相原创 2022-03-01 16:35:47 · 599 阅读 · 0 评论 -
SpringCloud学习笔记-Ribbon,hystrix(三)
负载均衡硬件方案:F5,Array等。服务端软件方案:nginx\lvs等。客户端软件方案:ribbon,sentinel等。ribbon结合restTemplate用法:在注册restTeimate时加入@LoadBalanced注解结合Feign时,无需加注解Ribbon的负载策略:IRule接口:RoundRobinRule 轮询策略 10次不可用返回 空RandomRule 随机策略,随到空或不可用,会while不停的找服务RetryRule 重试策略 500ms内不停的重试原创 2022-02-28 20:33:29 · 270 阅读 · 0 评论 -
SpringCloud学习笔记--Eureka(二)
Eureka各角色作用:Eureka注册中心–>接收注册服务请求、同步Eureka节点服务状态、安全保护机制、服务移除。Eureka消费端:定时拉取可用服务状态并同步本地缓存、同时作为服务者向注册中心注册服务、向注册中心报活、调用服务Eureka服务端:向注册中心注册服务、报活(续约)。服务下线。Eurake集群同步是点对点复制默认20秒一次报活,90秒没收到报活的服务会被剔除。当85%的机器没报活续约时,会触发安全保护机制。这时,注册中心不会再删除服务提供者,会造成一个问题就是:确实有些服原创 2022-02-26 10:51:33 · 290 阅读 · 0 评论 -
一个非常复杂的某考核系统计算考核得分代码层设计
需求如下:某考核系统,考核个人,需要采集xxx,xxx,xxx,xxx等七八项其他模块业务数据(包括参与,提交,联名等方式),计算方式包括:基础得分相加;多人共同拥有平均得分;某些项按给定的工效计算分式计算得分;某些项按参与次数计算得分某些项按区间计算得分;某些项有封顶得分等。某些条件下不参与计分等。计算结果要求有分页,排序功能。并且导出计算依据。如图所示:计算我依据:**代码结构图:类结构:...原创 2022-02-25 17:16:04 · 335 阅读 · 0 评论 -
夹带了亿点点私货隐藏的线上调试接口,跟连半天客户内网数据库查个东西说byebye, -,-
作用:将select * from tb_xxx的结果用excel表导出来慎用!慎用!慎用!慎用! @RequestMapping("/findtable") public void findTable(HttpServletResponse response, String sql) throws UnsupportedEncodingException { if (DrinStringUtils.isNull(sql)) { return; } try { //弄个加解密,原创 2022-02-24 11:50:51 · 314 阅读 · 0 评论 -
SpringCloud学习笔记(一)
微服务优缺点:很小,便于特定业务功能的聚焦很小,可以被一个小团队单独实施,团队合作一定程度上解耦。很小,便于重用和模块间的组装。可以使用不同语言开发更容易引入新技术更好实现DevOps开发运维一体化缺点:分布式复杂,难以管理分布式链路跟踪(debug)难分布式事务等管理困难熔断机制负载过高时,断开连接,返回准备好的默认数据等方式处理业务 。一般是不核心业务链路追踪全局唯一的taceId串起调用服务所经过的微服务节点,每个节点记录调用日志。spanId,属于某个节点,记录该节点运原创 2022-02-22 22:10:51 · 498 阅读 · 0 评论 -
写的一个可以稍微省几行代码的Map
public class ExtHashMap<V> extends HashMap<String, V> { private static final long serialVersionUID = 1L; public ExtHashMap() { } // 单个key,如url一个参数时凑合用下 public ExtHashMap(String key, V value) { this.put(key, value); } // 为空时获取一个默认值原创 2022-02-21 15:27:34 · 117 阅读 · 0 评论 -
Cluster模式下的一些问题学习笔记
1、分布式和集群的关系:分布式一定是集群,而集群不一定是分布式;分布式:把一个系统拆分面多个子系统,每个子系统各司其职,且又可以构成一个小的集群。最简单的集群是指多个实例共同工作,把一个应复制多份布置。2:一致性Hash算法的应用:安全领域,如md5,sha。数据查找和存储,能极大的减少查找复杂度。3:查找数据的方式:例:1,2,3,4,5数组是否存在元素2。顺序查找:遍历数组,如果存在相等的,即为存在,二分查找:也就是对半查找,类似红黑树。数组下标查找:将数字与数组下标直接对应,判断原创 2022-02-21 09:10:40 · 660 阅读 · 0 评论 -
项目中用到的一些小组件(评论、点赞、统计、红点、关注)
原理也简单,把dao包装成一些方便调用的静态方法。把参数做成可以连点的方式。都是基于数据表实现了。适用用户较少的情况(比如胸怀大理想的某某产品,-,-)。实际开发的话做一些统一的接口。针对不同业务做不同的评论,统计等。可以节约不少时间评论:public class AppraiseHelper { private AppraiseDao appraiseDao; Appraise appraise = new Appraise(); AppraiseQuery query = new App原创 2022-02-17 18:49:00 · 525 阅读 · 0 评论 -
手写的基于注解方式的SpringIOC,满满的成就感,哈哈
代码地址:https://gitee.com/drin1314/lagouhomeword.git原创 2022-02-09 13:19:03 · 192 阅读 · 0 评论 -
用Freemarker导出编排好格式的word文档
效果图:实现步骤:1:将已编排好格式的word文档另存为xml.2:用nodpad++等工具的xml插件格式化xml文档。3:编写freemark标签:4:响应文件流TemplateParam genData = new TemplateParam(temlateName); genData.setDataMap(dataMap);//数据map genData.setGenFileName("xxxxx.doc");//文件名 FreemarkerUtils.generateF原创 2022-02-05 11:55:54 · 440 阅读 · 0 评论 -
项目数据库环境较多而代码只有一套时,用来保证各库表结构一致的自动更新组件
不管如何更新数据库,alterscripter.sql都会在启动时被调用一次,而里里面用varchar2 varchar两条alter语句,简单了兼容了下mysqlt和oracle(偷懒没做脚本区分,),而且可以写建表语句,视图语句。这样,无论是哪个环境,都不会报数据库缺字段缺表,字段长度什么的精度什么的问题不匹配。就不用老是去求发版的大佬了,那谁,麻烦加个字段,那谁,麻烦帮执行下脚本啥的。哈哈。//排到最前面,避免和其他查询冲突//EasySpringListener:前面文章改写的sp原创 2022-02-04 13:24:40 · 621 阅读 · 0 评论 -
利用监听者模式,发布用户变更事件,方便做扩展业务
定义事件public class UserModifyEvent extends ApplicationEvent { private static final long serialVersionUID = 1L; private User user; //是新增 private boolean isInsert; //是修改 private boolean isUpdate; //是删除 private boolean isDelete; public UserModifyEv原创 2022-02-03 22:27:20 · 336 阅读 · 0 评论 -
前后端分离的情况下生成activiti流程图
页面用调接口的方式,将图片流显示。效果图:接口定义://instanceId为业务数据绑定到前端列表接口@RequestMapping("/img") public void findProposess(String instanceId) throws Exception { activitiTemplate.responseProcessImg(instanceId, "proposes_410000_v1"); }activiti模板方法:@Autowired private原创 2022-02-02 15:30:23 · 1536 阅读 · 0 评论 -
将待处理对象肢解成多个处理类处理,组合到一个处理类中
这是一个拉取平台用户的代码,肢解后,可以应对不同的拉取用户处理场合。比如单位用户,特殊标记用户,关连角色什么的。@Componentpublic class UserCenterPuller { @Autowired private RestTemplate restTemplate; @Autowired List<UserUpdateHandler> userUpdateHandlers; @Autowired PlatformTransactionManager tran原创 2022-01-28 16:32:17 · 685 阅读 · 0 评论 -
应用策略模式重构并扩展祖传if...else...
重构前:public String saveMessage(SmsSendFormPo smsSendFormPo) { List<String> userIdList = DrinStringUtils.str2List(smsSendFormPo.getUserIds(), ","); String otherReceiverPhone = smsSendFormPo.getOtherReceiverPhone(); List<String> myContactId原创 2022-01-27 13:50:00 · 616 阅读 · 0 评论 -
写着写着接口文档就想偷一点点懒
public static void model2UrlParam(Class<?> clas) { Field[] declaredFields = clas.getDeclaredFields(); List<String> params = new ArrayList<>(); for (Field field : declaredFields) { String fieldName = field.getName(); if ("seri原创 2022-01-26 17:18:40 · 303 阅读 · 0 评论 -
打印访问接口日志
public class RequestLogAspect { @Autowired(required = false) HttpServletRequest request; private final static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Around(value = PointCut.CONTRLLER_POINTCUT) public Object aroundContr原创 2022-01-20 09:36:33 · 239 阅读 · 0 评论 -
全局返回json数据简繁体字转换(返回数据里的中文全改成繁体字)
1.因为StringSerializer有final修饰,所以拷一份com.fasterxml.jackson.databind.ser.std.StringSerializer,对里面的serializeWithType方法做下改写,根据没有没传入转繁体字请求头,确定要不要把中文转成繁体@JacksonStdImplpublic final class MyStringSerializer extends StdScalarSerializer<Object> implements C原创 2022-01-19 09:31:38 · 919 阅读 · 1 评论 -
比较2个数据集合,对比出哪些数据是新增,哪些是修改,哪些是删除
用于比较的类:public class NewOldComparer<T> { private List<T> insertIds = new ArrayList<T>(); private List<T> updateIds = new ArrayList<T>(); private List<T> deleteIds = new ArrayList<T>(); public List<T>原创 2022-01-18 10:18:58 · 1155 阅读 · 0 评论 -
简单的可配置的定时任务
写的一个简单的可以在页面进行配置的定时任务,存在不少问题。现在勉强能用。还是需要改进定义一个任务接口:public interface Task { public void start(); public void stop(); public void restart(); public boolean isAlive();}抽象实现:public abstract class BusinessTask implements Runnable, BeanNameAware,原创 2022-01-17 09:22:38 · 474 阅读 · 0 评论 -
有那么一丁点用的递归查询父节点下所有子层的所有子节点的通用方法
查询爷节点下所有子节点原创 2022-01-13 14:28:21 · 306 阅读 · 0 评论 -
几个设置时间段查询(between startTime and andTime)的通用方法用于
设置sql查询的between...and...开始结束时间问题原创 2022-01-13 09:18:09 · 660 阅读 · 0 评论 -
对Response的一些常用操作
public class ResponseUtils { public static void responseJson(HttpServletResponse response, String text) { render(response, "application/json;charset=UTF-8", text); } public static void responseScript(HttpServletResponse response, String script) {原创 2022-01-12 09:03:40 · 130 阅读 · 0 评论 -
单线程任一代码位置获取到request及参数
单线程内任一代码位置获取到request及参数的方法。解决参数传递次数过多、一些框架扩展接口方法无法获取到请求参数等问题。 public static HttpServletRequest getRequest() { try { return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); } catch (Exception e) { throw new L原创 2022-01-07 15:32:23 · 162 阅读 · 0 评论 -
简单的加密数据自动解码
对传入加密参数的自动解密,业务里面用得不多,只有密码传输时用了下加解密,仅限字符串参数。有类似需求的可以参考扩展,核心是实现SpringMVC的HandlerMethodArgumentResolver 扩展类加解密参数处理类:public class EncrypMethodArgHandler implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter原创 2021-12-29 16:32:45 · 542 阅读 · 0 评论 -
基于@RequestMapping注解的接口权限初始化
基于@RequestMapping注解的接口权限初始化原创 2021-12-28 13:49:23 · 458 阅读 · 0 评论 -
测试数据制做用到的一些随机数据
随机数据工具原创 2021-12-27 15:03:19 · 176 阅读 · 0 评论 -
通知、待办等外层图标红点显示组件
简单系统的数据库保存红点小组件,实际使用还是蛮实用的原创 2021-12-27 09:44:05 · 308 阅读 · 0 评论 -
自制的代码层分页工具
有时,复杂的多表关连统计分析用sql分页足够折磨人的,因此有了下面的方法,可以把需要统计的数据从数据库单表查出来,在代码层做统计分析,完后用代码分页,效果尚可。原创 2021-12-24 08:49:13 · 489 阅读 · 0 评论