虚拟数字键盘

虚拟数字键盘 背景 移动端的浏览器中,input元素的自动聚焦并弹起系统键盘很难做到统一,一是IOS系统下的浏览器,非真实的用户交互,是无法弹起系统键盘的,通过js模拟也不行。二是某些浏览器下,input的输入光标会没有,使得用户体验不佳。 目标 1、进入页面时就自动聚焦到input上...

2019-01-18 16:01:21

阅读数 159

评论数 0

简单好用的api mock工具

        在前后端人员的协作开发中,如果你是后端开发人员,想模拟前端调用,可以使用PostMan发送请求,如果是你是前端人员,可能需要使用一些js框架来拦截请求,模拟后台返回报文。如果你不熟悉这些框架,又懒得去学的话,这里推荐一个简单好用的api mock工具。   使用方法 1、下载工...

2018-08-10 11:14:13

阅读数 2393

评论数 0

基于layui的通用后台管理系统

一、概述        之前的spring集成系列文章中spring集成shiro权限控制一文最后提到了通用的mvc框架和前后端分离方案。在准备前后端分离方案demo的时候,纠结于选择哪个前端框架。对于后端开发人员来说,Angular和Vue都过于专业化了,需要额外的精力去学习。这个时候刚好看到...

2018-01-15 09:58:36

阅读数 39691

评论数 0

实现输入框自带清除按钮

输入框自带清除按钮是很常见的需求了,网上有很多方案,最基础的是原生实现input和清除按钮,然后绑定一大堆事件,此种方案非常原始,而且复用性极差。稍微好点的方案有基于bootstrap和jQuery的,将input和清除按钮集成起来,但样式依赖bootstrap,加重了文件引入数,而且很容易有jQ...

2019-05-20 19:12:59

阅读数 16

评论数 0

LockSupport原理

LockSupport是一个非常基础而重要的类,它为java并发包里的锁和同步类提供了线程阻塞原语。没有它也就没有AQS,更没有上层的各类锁实现(例如ReentrantLock),同步器(例如CountdownLatch),阻塞队列等。 LockSupport提供的都是静态方法,例如: publ...

2019-05-08 17:35:59

阅读数 33

评论数 0

AtomicBoolean原理

AtomicBoolean是一个原子boolen类,用于高并发场景下的标记,例如某个只需初始化一次的服务: public class SomeService { private String name; private AtomicBoolean initialized ...

2019-05-07 15:34:23

阅读数 44

评论数 0

关于LongAdder的一点思考

LongAdder是jdk 1.8引入的一个类,宣称比AtomiLong更高效。它内部有一个基本数base和一个cell数组,在高并发的情况下各个线程将值存放在了数组中,在低并发的情况下直接在一个base数上做计算,取值的时候把基本数和cell数组中的值做累加返回。 其实看到取值的时候我是懵的,...

2019-05-06 10:31:03

阅读数 16

评论数 0

手写一个简单的线程池

多线程的引入,可以大大增强系统的并发能力,但是创建一个线程的开销是很大的,频繁的创建和销毁线程反而使得我们的系统在高并发时性能急剧下降。如果线程用完了,先不着急销毁,有下个任务来了,再重复利用,是不是就好多了。线程池就是这样做的,当一个新任务到来的时候,线程池会找到一个空闲的线程来执行任务。如果线...

2019-04-25 19:29:53

阅读数 31

评论数 0

Quartz定时任务过期处理策略

由于某种原因,例如应用停掉,导致定时任务错过了本该执行的时间点,这就是定时任务过期。对于过期的定时任务,我们需要基于某种策略对其进行处理。 过期策略 在Trigger接口中定义了两种过期策略, public static final int MISFIRE_INSTRUCTION_SMAR...

2019-04-23 16:46:02

阅读数 97

评论数 0

Quartz Trigger状态转换

在Quartz的框架中,Trigger可能是最重要的一个对象了。定时任务的调度,触发,都是通过对Trigger的操作来实现的。Quartz的所有表里面,光Trigger相关的表就占了一大半,从这一点也可以看出Trigger的重要地位。下面是2.21版本中的数据表: Trigger按其类型不同,分...

2019-04-22 16:47:33

阅读数 48

评论数 0

Quartz集群原理

传统的Quartz集群是基于数据库实现的,所有的quartz应用节点彼此并没有通信机制。09年terracotta收购Quartz后,才有基于terracotta的分布式的Quartz集群。由于工作中大部分用到的还是基于数据库的集群,这里仅分析基于数据库实现的Quartz集群。 配置集群 Quar...

2019-04-22 11:41:23

阅读数 39

评论数 0

用JavaMelody监控Quartz

JavaMelody是一个优秀的监控工具,它可以方便的监控我们的应用,并提供了非常直观的图表展示。下面就用它来监控我的定时任务框架Quartz。 1、添加依赖 <!--javamelody--> <dependency> ...

2019-04-17 17:23:19

阅读数 22

评论数 0

Quartz Job是如何执行的

在前一篇Quartz是如何到期触发定时任务的我们通过对源码的分析,了解的Quartz的触发机制。接下来的这一篇,我们分析Job是如何执行的。 for (int i = 0; i < bndles.size(); i++) { TriggerFiredResult resu...

2019-04-16 15:08:30

阅读数 27

评论数 0

quartz job同表不同环境

我们的开发一般分为开发环境,测试环境和生产环境。由于机器资源限制,开发环境和测试环境虽然部署着不同的应用,但是数据库都是同一个库。一般情况下,是可以这样玩的,也不会有什么问题。但是定时任务经常会出现开发环境的任务跑在了测试环境上,然后日志在开发环境里就查不到了。出现这种情况是因为在quartz.p...

2019-04-15 18:59:12

阅读数 27

评论数 0

Quartz是如何到期触发定时任务的

Quartz中核心的调度类是QuartzScheduler,任务的调度和任务的管理都是QuartzScheduler实现的,然后通过一个静态代理类StdScheduler提供出来。所以要理解定时任务是如何触发的,我们只需要理解透QuartzScheduler即可。 public class Qu...

2019-04-15 17:48:19

阅读数 35

评论数 0

Quartz Job允许自动注入Spring Bean

在上一篇Spring集成Quartz中,我们介绍了如何将Quartz框架集成到spring环境中来,在PrintJob示例中,我们仅仅是简单的做了Sleep操作。实际上,我们经常需要在具体的job中调用我们的Service服务,而服务通常是作为SpringBean方式托管的。 一种方案是通过Co...

2019-04-11 10:56:01

阅读数 21

评论数 0

spring集成Quartz

本文仅仅记录如何将quartz集成到spring中,不对内容做过多解释,如果有疑问请自行gooogle。 一、集成步骤 1、引入pom依赖 <!--quartz--> <dependency> <...

2019-04-09 10:59:00

阅读数 36

评论数 0

Hibernate Validator 校验继承引发的问题思考

问题再现 交易系统对应不同类型的订单请求,公共字段是放在了一个父类里,例如: @Setter @Getter public abstract class BaseOrderRequest{ @NotNull @Min(1) @Max(1000000) ...

2019-03-26 18:39:49

阅读数 101

评论数 0

BASE64编码字符串解码时堆内存溢出

工作中有一个下载对账的定时任务,通过调用dubbo服务去下载文件。运行一段时间后,发现dubbo超时异常。通过排查发现是序列化超时了。dubbo默认的序列化大小是8MB,而这个文件大约30MB。增大序列化文件大小不可取,无奈只得更改方案:dubbo服务下载对账单文件后,不再返回内容,而是通过启动新...

2019-03-13 17:02:48

阅读数 159

评论数 0

获取类的所有字段

java获取类的字段有两个方法: getFields()是获取该类的公共字段,包括父类的。 getDeclaredFields()是获取该类的所有字段,但不包括父类。 如果我想获取该类和所有父类的全部字段呢??? 我们可以调用getDeclareFilds(),先拿到该类的所有字段,然后循...

2019-01-29 11:22:51

阅读数 144

评论数 1

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