JAVA
文章平均质量分 67
专业的程序员
十五年开发经验,10年互联网老兵,曾担任旺旺集团核心开发课副课长兼架构师,在多家互联网企业中担任架构师、开发组长等职位。常年奋战在微服务、高并发、低代码一线,喜欢钻研技术,喜欢分享经验
展开
-
[JsonSchema] JsonSchema对比 (Java 版)
本工具主要是对两个JsonSchema字符串进行比较,工具类代码如下:public class JsonSchemaUtil { /** * @Author eric * @Description 比较target与origin的不同 * @Date 上午11:31 2022/2/21 * @Param [origin, target] * @return void **/ public static Json...原创 2022-02-21 23:06:17 · 974 阅读 · 0 评论 -
【面试快问块答】一:Redis七问七答
redis为什么是key,value的,为什么不是支持SQL的? redis是多线程还是单线程?(回答单线程的请回吧。。) redis的持久化开启了RDB和AOF下重启服务是如何加载的?(10个人9个回答错误) redis如果做集群该如何规划?AKF/CAP如何实现和设计? 10万用户一年365天的登录情况如何用redis存储,并快速检索任意时间窗内的活跃用户? redis的5种Value类型你用过几种,能举例吗? 100万并发4G数据,...原创 2020-11-13 16:44:54 · 322 阅读 · 0 评论 -
LeetCode练习(十) 删除数组中的重复数字
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。/** * @ClassName LeetCodeTen * @Description: * 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度...原创 2019-12-12 16:36:44 · 349 阅读 · 0 评论 -
LeetCode练习(八) 寻找中位数
题目:给定两个大小为 m 和 n 的有序数组nums1 和nums2。** 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。* 你可以假设nums1和nums2不会同时为空。* 示例 1:* nums1 = [1, 3]* nums2 = [2]* 则中位数是 2.0* 示例 2:* nums1 = [1, 2]* nu...原创 2019-12-03 17:33:23 · 268 阅读 · 0 评论 -
LeetCode练习(七) 合并 k 个排序链表
合并k个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度* 示例:* 输入:* [* 1->4->5,* 1->3->4,* 2->6* ]* 输出: 1->1->2->3->4->4->5->6代码:public class LeetCodeSeven { pub...原创 2019-11-25 15:19:06 · 118 阅读 · 0 评论 -
LeetCode练习(五) 最长回文串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。* 示例 1:* 输入: "babad"* 输出: "bab"* 注意: "aba" 也是一个有效答案。* 示例 2:** 输入: "cbbd"* 输出: "bb"代码:public class LeetCodeFive { /** 算法 1、 找到 xx xyx 这...原创 2019-11-25 15:16:35 · 146 阅读 · 0 评论 -
JDK9-13新特性展示(四)— JDK12
public class TwelveNewTest { private static final int MONDAY = 1; private static final int TUESDAY = 2; private static final int WEDNESDAY = 3; private static final int THURSDAY = 4;...原创 2019-11-07 11:47:55 · 195 阅读 · 0 评论 -
JDK9-13新特性展示(三)— JDK11
public class ElevenNewTest { /** * TTPClient转正 * JDK9中便引入httpclient模块,但它在jdk.incubator.httpclient包下,在java11被标记为正式,改为java.net.http模块。 **/ public static void httpTest() throws I...原创 2019-11-07 11:47:15 · 288 阅读 · 0 评论 -
JDK9-13新特性展示(二)— JDK10
* DK10中包含许多对JVM的优化: * * 将JDK多存储库合并为单存储库 * 并行Full GC 的G1 * 垃圾回收接口 * 应用数据共享 * 线程局部管控 * 基于实验JAVA 的JIT 编译器 * 备用内存设备上分配堆内存 **/public class TenNewTest { /** * 局部变量...原创 2019-11-07 11:46:28 · 198 阅读 · 0 评论 -
JDK9-13新特性展示(一)— JDK9
所有的说明和代码都在一起,直接放代码,大家就可以很清楚的看到了。没有列出所有的新特性,只是列出了基本开发中可能会用到的新特性 public class NineNewTest { /**不可变集合工厂方法 * Java 9增加了List.of()、Set.of()、Map.of()和Map.ofEntries()等工厂方法来创建不可变集合。 ...原创 2019-11-07 11:45:27 · 875 阅读 · 0 评论 -
Spring AOP实战开发(一) springmvc参数非空检查
本系列将为大家介绍笔者在开发过程中使用aop的一些功能扩展,有从网上看到的,也有自己想的,如果有相似的代码,敬请海涵。 本章将介绍如果通过AOP来对请求的参数进行自动的非空检查并返回。相信部分同学的代码中会出现如下的例子:if (parameters.get("openId") == null || StringUtils.isBlank(param...原创 2019-02-27 09:49:44 · 2307 阅读 · 8 评论 -
微信小程序生成分享带参数二维码图片 并添加文字功能
笔者最近接到一个新的任务,不是很难的功能,就是之前没有接触过,后端生成带参数的小程序二维码图片,并在图片下面添加一些文字。想在将代码分享给大家,期望可以给大家提供帮助。一、首先生成小程序的分享二维码有三种方式接口 A: 适用于需要的码数量较少的业务场景 生成小程序码,可接受 path 参数较长,生成个数受限。 接口 B:适用于需要的码数量极多的业务场景 生成小程序...原创 2019-02-25 09:57:20 · 22684 阅读 · 2 评论 -
一步步学习多线程(九) CyclicBarrier
CyclicBarrier位于java.util.concurrent包下,可以叫它回环栅栏,我们可以简单的理解为可以无限次重置的计数器。构造函数:1、public CyclicBarrier(int parties, Runnable barrierAction)2、public CyclicBarrier(int parties)参数 parties (the number o...原创 2019-02-12 15:57:56 · 2036 阅读 · 0 评论 -
一步步学习多线程(八) CountDownLatch
CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如火箭发射需要检查很多步,例如10步,每一步都要检查完毕才能发射,这样就可以使用CountDownLatch类来进行。构造函数:public CountDownLatch(int count) { }; //参数count为计数值主要方法:1、await() 当前线程等...原创 2019-01-29 10:49:06 · 2019 阅读 · 0 评论 -
整理收集的一些常用java工具类(http、加解密、编号生成、二维码、字符串、图片、JDBC...)
小弟最近开了一个新的项目,主要是总结各个项目中用到的工具类,目前放到github中,内容持续补充,各位大神可以多题建议,争取做到全网最全的工具类项目 主要包括:订单编号生成工具类、http及https请求工具类、格式化数字工具类、加解密工具类、布隆过滤器、redis工具类,截取部分工具类如下: IPUtilsimport or...原创 2019-08-01 15:42:21 · 2311 阅读 · 1 评论 -
SSM与Shiro、Redis集成实现分布式session管理(三)—— session设置
经过前两章,我们已经将ssm与shiro配置完毕,现在添加redis的工具类@Componentpublic class RedisUtil { private RedisTemplate<Serializable, Object> redisTemplate; /** * 批量删除对应的value * ...原创 2019-01-23 10:02:54 · 2070 阅读 · 5 评论 -
Spring AOP实战开发(三) 热点日志写入数据库
有些日志信息希望可以写入数据库便于分析,有些日志不需要,这时可以自定义一个日志注解,通过AOP来动态配置需要写入日志的方法。第一步:定义注解,方法级别 value是可以是该方法的中文解释@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface Log { String ...原创 2019-03-19 15:35:00 · 643 阅读 · 0 评论 -
Spring AOP实战开发(二) 统一controller层日志输出
好,欢迎大家继续关注我的博客,今天来给大家分享AOP的第二个实战案例,就是统一的日志输出。在开发的工作中,经常要求我们把一个请求的入参和请求时间打印出来,代码很简答 直接贴出来供大家参考@Component@Aspectpublic class WebLogAspect { private static final Logger logger = LoggerFacto...原创 2019-03-11 11:15:50 · 1237 阅读 · 0 评论 -
ScheduledExecutorService在spring中实现动态启停、修改间隔时间的功能
ScheduledExecutorService的主要作用就是可以将定时任务与线程池功能结合使用下面是一个简单的例子,功能就是每隔1秒中执行一下run里面的方法public class ScheduledExecutorServiceTest { public static void main(String[] args) { ScheduledExecutorSe...原创 2019-03-15 16:01:18 · 8357 阅读 · 0 评论 -
ScheduledExecutorService在spring中实现动态启停、修改间隔时间的功能(二) 动态配置起始时间
在第一部分我们已经实现了动态启停,修改间隔时间的功能,那么如果我们想要让某个定时任务只在每天的8点到12点执行,怎么办呢。对此我们可以对上一个项目https://blog.csdn.net/money9sun/article/details/88575704 进行升级首先我们要对 ScheduledTask 增加两个字段 起始时间 我们设置成字符串格式 强制要求为12:00 这种格式...原创 2019-03-20 14:51:08 · 4497 阅读 · 2 评论 -
ScheduledExecutorService在spring中实现动态启停、修改间隔时间的功能(三)手动实现cron
在上一节中,我们已经成功的实现了动态配置起始时间,那么现在我们来实现一个简单的cron,那么我们定义一个三个参数的cron分别是分钟 小时 和周天 主要是增加一个init()的方法,为了简单起见,分钟只实现了 / 其他的只实现了 - 的功能 /** */ public ScheduledTask(String taskId, String className, Strin...原创 2019-06-12 15:42:50 · 2554 阅读 · 2 评论 -
手写可持久化的纯JDK缓存
近期笔者搞了一个极简springboot项目,不依赖mysql,redis,数据库用H2,Cache用Caffeine,其他缓存就自己写了一个可持久化的工具。开源的代码如下: https://github.com/EricLoveMia/simpleBoot 本篇文章主要讲述可持久化的缓存工具。原创 2019-08-14 11:27:40 · 2056 阅读 · 0 评论 -
报错:java.lang.Integer cannot be cast to java.lang.Long
笔者在项目中写了一个查询方法,从数据库中查询一组数据,代码如下:List<Map<String,Integer>> levelList = ceoLevelMapper.selectDownGradeCeoList();mybatis如下: 表中的 memberKey数据类型为Long,levelKey数据类型为Int <select id="selectDow...原创 2018-04-12 10:57:03 · 15886 阅读 · 0 评论 -
SSM与Shiro、Redis集成实现分布式session管理(二)—— shiro配置
上一篇已经将环境搭建完毕,现在配置shiro的相关 新建自己的realmpublic class MyRealm extends AuthorizingRealm { @Autowired private UsersService usersService; @Override protected Authorizatio...原创 2019-01-23 09:55:15 · 2515 阅读 · 0 评论 -
SSM与Shiro、Redis集成实现分布式session管理(一)—— 环境搭建
对于分布式系统来说,分布式session是首先要解决的问题,业界目前的解决方式大概可以归纳为三种(转自http://www.cnblogs.com/cxrz/p/8529587.html)一、Session Replication 方式管理 (即session复制) 简介:将一台机器上的Session数据广播复制到集群中其余机器上 使用场景:机器较少,网络流...原创 2019-01-23 09:49:49 · 3326 阅读 · 0 评论 -
微信特殊字符包括颜文字、表情的后台存储及前端展示方法
笔者最近的项目中遇到微信昵称保存失败的问题,主要原因是部分同学的微信昵称包含了特殊字符,还有emoji表情,经过笔者与前端大神的研究(主要是合作的前端大神的解决思路),得到了一种不需要修改数据库字符集就可以存储及展示的方法。 一、后端存储采用URLEncoder.encode方法String nickname = URLEncoder.encode(StringUtils.delet...原创 2018-12-19 16:35:52 · 6548 阅读 · 4 评论 -
一步步学习多线程(一) 重要概念
几个重要的概念1、同步(synchronous)和 异步(asynchronous)2、并发(Concurrency)和 并行(Parallelism)3、临界区4、阻塞(Blocking)和非阻塞(Non-Blockings)5、死锁(DeadLock)、饥饿(Starvation)和活锁(LiveLock)6、并行的级别 1、同步和异步 对方法调用而言...原创 2018-05-22 16:25:38 · 2079 阅读 · 0 评论 -
SpringCloud学习心得(五) 路由网关(zuul)
转载请标明出处: http://blog.csdn.net/forezp/article/details/69939114 本文出自方志朋的博客在Spring Cloud微服务系统中,一种常见的负载均衡方式是,客户端的请求首先经过负载均衡(zuul、Ngnix),再到达服务网关(zuul集群),然后再到具体的服。,服务统一注册到高可用的服务注册中心集群,服务的所有的配置文件由配置服务管理(下...原创 2018-06-01 08:28:45 · 1410 阅读 · 0 评论 -
SpringCloud学习心得(四) 断路器(Hystrix)
http://blog.csdn.net/forezp/article/details/69934399 本文主要内容来源方志朋的博客在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用。为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证10...原创 2018-06-01 08:28:34 · 1196 阅读 · 0 评论 -
REGEXP 操作符
下表中的正则模式可应用于 REGEXP 操作符中。模式描述^匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。$匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。.匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何...原创 2018-04-12 17:21:43 · 570 阅读 · 0 评论 -
Mybatis中javaType和jdbcType对应关系
Mybatis中javaType和jdbcType对应关系JDBCType JavaType CHAR String VARCHAR String LONGVARCHAR String NUMERIC java.math.BigDecimal DECIM...原创 2018-04-12 13:25:51 · 268 阅读 · 0 评论 -
spring事务的多数据源的annotation-driven用法
笔者最近项目中用到了多数据源的事务处理,由于经验不足,写的事务总是不能正常rollback,spring的配置文件如下: <tx:annotation-driven transaction-manager="transactionManager" /> <tx:annotation-driven transaction-manager="transactionMan...原创 2018-04-16 10:48:01 · 887 阅读 · 0 评论 -
Ajax跨域请求失败,SpringMVC解决方法
笔者最近的项目中出现了Ajax跨域请求失败的问题,一开始希望通过第一种方法:callbackjs:var phone = "18321618669";var _url2 = "http://127.0.0.1:8080/activity/zombiePotions.ctrl?mobilePhone="+phone; $.ajax({ url:_url3, dataType: 'js...原创 2018-04-09 09:31:09 · 1668 阅读 · 0 评论 -
JNative中的指针Pointer内存溢出问题
近期小弟在写一个数据接口,需要调用dll文件,就找了一个jnative 的例子写了一下,运行是正常的,但是时不时的就会出现释放内存失败的异常。小弟尝试了多种方法,例如手动将pointer指针销毁或者指向空,或者干脆将jnative 的对象也尝试dispose,都没有解决。最后我尝试将jdk的版本降低,之前用的是1.7.0_80,换成1.7.0_03。竟然一切正常了,不再报错误。虽然小弟还不清楚到底原创 2017-02-20 15:25:35 · 1412 阅读 · 1 评论 -
Struts2与Ajax联合,返回list的问题
最近在做一个小系统,在尝试用Struts2框架下用Ajax技术进行异步刷新。主要配置如下: Struts的配置文件: message,list.*原创 2016-10-27 14:35:07 · 2600 阅读 · 1 评论 -
一步步学习多线程(二) 多线程基础1(线程基本操作)
什么是线程?线程的基本操作1、什么是线程线程是进程内的执行单元,在JAVA当中建立的线程会映射到操作系统中去。在多线程OS中,通常是在一个进程中包括多个线程,每个线程都是作为利用CPU的基本单位,是花费最小开销的实体2、线程的基本操作3、线程的基本操作新建线程:Thread t1 = new Thread(); t1.start();注:如果是t1.run() 则不会新开一个线程,而且在原有线程中...原创 2018-05-23 14:22:21 · 843 阅读 · 0 评论 -
一步步学习多线程(三) 多线程基础2(守护线程、优先级)
守护线程在后台默默地完成一些系统性的服务,比如垃圾回收线程,JIT线程就可以理解为守护线程当一个Java应用内,只有守护线程时,Java虚拟机就会自然退出。例子:public class DeaonDemo { public static class DaemonT extends Thread { @Override public void run() { while(true){ ...原创 2018-05-23 14:35:45 · 823 阅读 · 0 评论 -
SpringCloud学习心得(九) Springboot与Mabatis集成——动态数据源
复制第八节的项目,重命名为quartz-mybatis-multi-dynamic动态数据源,本项目通过AOP注解的方式实现动态数据源。两个数据源已经在上几节中建立。1、pom文件省略和第八节相同2、配置文件:#datasource configjdbc: driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://1...原创 2018-09-12 09:24:50 · 2468 阅读 · 0 评论 -
一步步学习多线程(七) ReentrantLock
ReentrantLock是一个锁,相对于synchronized, 这个锁更灵活,可以灵活的加锁和解锁。我们先看一个例子public class ReenterLock implements Runnable { public static ReentrantLock lock = new ReentrantLock(); public static int count ...原创 2018-09-12 16:09:19 · 2035 阅读 · 0 评论 -
SpringCloud学习心得(六) Springboot与Quartz集成
SpringCloud还有很多的功能,请大家参照《史上最简单的SpringCloud教程》http://blog.csdn.net/forezp/article/details/69939114 方志朋的博客。 本章开始,将陆续介绍集成quartz、Mybatis、多数据源、动态数据源、redis等功能,供大家参考。 为了尽量简化系统规模,我们重新来建立一个项目,即...原创 2018-07-26 12:58:23 · 5838 阅读 · 0 评论