- 博客(91)
- 资源 (46)
- 问答 (2)
- 收藏
- 关注

原创 java后台封装echarts
前些日子用到了Echarts,觉得比之前用的funshioncharts好用太多!可是拼装数据到前台显示的时候,有点费时费力,于是对Echarts在后台做了封装。具体做法了抽象出众图类、零件之上用零件组装成组件(坐标轴、标题、提示、图例、值域漫游、工具箱、数据项之类),组件之上抽象出图类(柱状图、折线图、饼图、仪表盘、地图、漏斗图之类),然后根据这些图类在图形工厂里灵活组装代码生成整个option
2016-01-30 19:43:24
18227
3
原创 两个线程交替执行的几种方式
有个常见的面试题是这样,有2个字符串,一个字符串是1234567,另一个字符串是ABCDEFG,然后需要按1A2B3C4D5E6F7G或者A1B2C3D45E6F7G这种输出,就需要用到多线程交替执行来实现。本文列举了5种实现方式。
2023-05-24 12:49:16
2470
原创 设计模式专栏——观察者模式(Observer)
观察者模式(Observer Pattern),又称为发布订阅模式(Publish/subscribe),当观察对象的状态发生变化时,会通知给观察者。这种类型的设计模式属于行为型设计模式。它的核心结构有四个角色:观察对象(Subject)、具体观察对象(ConcreteSubject)、观察者(Observer)、具体的观察者(ConcreteObserver)(1)Subject角色:表示观察对象,里面订阅了订阅、取消订阅、通知观察者的方法,并且维护了观察者的实例。(2)ConcreteSub
2022-01-16 23:04:54
567
原创 设计模式专栏——状态模式(State)
状态模式(State Pattern),当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。这种类型的设计模式属于行为型设计模式。它的核心结构有三个角色:状态(State)、具体状态(ConcreteState)、上下文(Context)(1)State角色:抽象状态,定义了根据不同状态进行不同处理的接口,和Context提供的接口对应。(2)ConcreteState角色:表示各个具体的状态,它实现了State接口,State中定义的一个接口,对应这里的一个具体的类。
2022-01-16 16:33:55
920
原创 设计模式专栏——模板方法模式(Template Method)
模板方法模式(Template Method) ,在父类抽象类中定义处理流程的框架,在子类中实现具体的处理,父类中会调用子类中实现的方法。这种类型的设计模式属于行为型设计模式。它的核心结构有两个角色:抽象类角色(AbstractClass)、具体类角色(ConcreteClass)。(1)AbstractClass角色:不仅负责实现模板方法,还声明在模板方法中所使用到的抽象方法。(2)ConcreteClass角色:实现了AbstractClass中定义的抽象方法,实现的方法将会在Abstrac
2022-01-13 21:05:13
497
原创 设计模式专栏——代理模式(Proxy)
代理模式(Proxy Pattern)为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。它的核心结构有三个角色:抽象主体角色(Subject)、真实主体角色(RealSubject)、代理角色(Proxy)。(1)Subject角色:定义了RealSubject和Proxy角色中共同的接口。(2)RealSubject角色:实现了Subject中定义的接口。(3)Proxy角色:除
2022-01-09 17:36:26
350
原创 设计模式专栏——外观模式(Facade)
概述外观模式(Facade Pattern),又称为门面模式,是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使得子系统更容易使用。这种类型的设计模式属于结构型设计模式。类图示例库存服务public class StockService { static AtomicInteger atomicInteger = new AtomicInteger(); /** * 初始化库存数量 */
2022-01-06 08:30:00
575
原创 设计模式专栏——享元模式(FlyWeight)
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型设计模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。它的核心结构有四个角色:抽象享元角色(AbstractFlyWeight)、具体享元角色(ConcreteFlyWeight)、享元工厂(FlyWeightFactory)、客户端(Client)。(1) 抽象享元角色:为具体享元角色规定了必须实现的方法,在Java中可以是抽象类,可以是接口。(2) 具体享元角
2022-01-04 22:03:56
1100
原创 设计模式专栏——装饰器模式
概述装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。它的核心结构有四个角色:抽象构件(Component)、具体构件(ConcreteComponent)、抽象装饰器(Decorator)、具体装饰器(ConcreteDecorator)我们通过下面的实例来演示装饰器模式的用法。我们以手抓饼
2021-12-27 08:15:00
438
原创 设计模式专栏——组合模式
概述组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。...
2021-12-24 23:50:27
381
原创 设计模式专栏——桥接模式
桥接模式(Bridge Pattern)属于结构型设计模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。将抽象部分与它的实现部分分离,使它们都可以独立地变化。它的核心结构有四个角色:抽象化角色(Abstraction)、扩展抽象化角色(RefinedAbstraction)、实现化角色(Implementor)、具体实现化角色(Concretelmplementor)。举个生活中的例子,汽车有多种类型,SUV、轿车、轿跑等等,这个类型可以不断扩充,然后汽车是由具体的
2021-12-15 00:10:21
498
原创 设计模式专栏——适配器模式
适配器模式(Adapter Pattern)属于结构型设计模式,也被成为Wrapper模式。将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。适配器模式有以下两种。类适配器模式(使用继承的适配器)对象适配器模式(使用委托的适配器)本节将以此展开这两种的介绍。
2021-12-13 23:16:19
826
原创 JVM堆内存溢出排查
是否有小伙伴在碰到了OOM的时候,抓耳挠腮,不知如何下手,通过这篇保姆级的教程,可以教会你快速定位堆内存溢出的bug,本篇讲述的主题是生成dump文件以及通过Visual VM分析dump文件
2021-12-05 23:08:51
2654
原创 Spring Data JPA批量处理性能优化
我们使用JPA的saveAll的时候,会发现这个方法特别慢,我在本地做的测试是插入10万条数据的时候,耗时51503ms,和JDBC方式的批量处理对比后就会发现,性能差了百倍,所以我们要优化下我们的代码。一:修改setId的策略 我们观察就会发现,在saveAll传入的对象里面,设置了id的情况下,JPA会根据id去执行一条select语句,数据量越多,和数据库交互次数越多,这个操作会极大的拖慢性能,那我们首要解决的,就是不让JPA去执行select。解决办法有两个,麻烦一点的是这样的,实
2021-11-23 08:00:00
7162
原创 设计模式专栏——原型模式
概述 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。它的核心结构有两个角色:原型抽象类(Prototype)、具体的原型(Concre...
2021-11-18 08:15:00
739
原创 设计模式专栏——建造者模式
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。它的核心结构有三个角色:建造者(Builder)、具体的建造者(ConcreteBuilder)、Director(监工)。
2021-11-16 08:00:00
398
原创 设计模式专栏——抽象工厂模式
抽象工厂模式(Abstract Factory),属于创建型设计模式,用于产品族的构建。抽象工厂是指当有多个抽象角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。它的核心结构有四个角色:抽象产品(AbstractProduct)、具体产品(ConcreteProduct)、抽象工厂(AbstractFactory)、具体工厂(ConcreteFactory)。
2021-11-14 23:01:44
573
原创 设计模式专栏——工厂方法模式
工厂方法模式(Pactory Method),属于创建型设计模式,在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做遵循了开闭原则,当需求变化,新增了产品时,我们不需要去修改原来的代码,只需要新增一个工厂子类就好了。它的核心结构有四个角色:抽象产品、具体产品、抽象工厂、具体工厂。
2021-11-14 00:29:13
428
原创 设计模式专栏——单例模式
单例模式(Singleton),属于创建型设计模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。单例模式,大致可分为五类:饿汉模式、懒汉模式、双重检查锁、静态内部类、枚举。
2021-10-27 23:38:39
259
原创 使用数据库实现分布式锁
使用数据库实现分布式锁需要建一张lock表,表中设置一个unique索引,获取锁时,尝试给表中insert记录,若失败,则说明锁被别的线程抢占了,还未释放。当处理完业务,释放锁,删除表中的那条记录即可。step1:建表CREATE TABLE `my_lock` ( `id` varchar(32) NOT NULL, `resource` varchar(45) NOT NULL, `createTime` bigint(13) DEFAULT NULL, PR...
2021-10-10 23:41:47
6147
3
原创 设计模式之——策略模式
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法我们以邮件的发送来解释怎么使用策略模式来替换掉冗余的代码策略接口MailStrategyService.javapublic interface MailStrategyService { /** * * 策略名称 * @return */ public String getStrategyNam
2021-05-09 23:44:30
251
1
原创 EasyExcel导入Excel和导出Excel教程
EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。 它底层是基于POI做的封装和优化,避免了POI耗费内存,内存溢出的问题。笔者之前做导出、导入Excel也是使用POI,后来在生产上总是出现内存溢出的问题,在寻求解决方案的路途中,就找到了EasyExcel。1.集成ExasyExcel <dependency> <groupId>com.alibaba</groupI
2021-02-01 23:53:20
3500
2
原创 windows下配置nginx反向代理tomcat
Nginx下载官方地址:http://nginx.org/en/download.html 下载之后解压后的目录结构是这样的 常用的命令: nginx -v 查看nginx版本 start nginx启动nginx命令 nginx -s reload 修改了配置文件后重新reload nginx -s stop 立刻停止 nginx -s quit 优雅地停止 启动成功后,打开...
2021-01-31 00:18:35
7943
1
原创 Redis主从复制原理及配置
为了实现高可用,我们通常需要将Redis部署多份,部署在不同的服务器上,然后通过数据同步,来实现多副本之间数据的一致,Redis自身提供了主从复制机制来实现数据同步,从而使得我们可以在此基础上,能实现快速的故障恢复,达到生产中高可用的要求。主从复制的用途:1 数据冗余:主从复制实现了数据的热备份;2 故障恢复:当主节点出现问题,可以由从节点提供服务,实现快速的故障恢复;3 负载均衡:在主从复制的基础上,配合读写分离,由从库分担读的压力,主库只有写的压力,从而实现负载均衡,提高redis服务.
2021-01-20 00:07:01
204
1
原创 ElasticSearch7.8.0集群搭建
1.下载在elastic下载中心找到我们要安装的版本,地址:https://elasticsearch.cn/download/2.安装下载完后解压到安装目录,然后复制2份3.节点配置在config目录下,修改每个节点的elasticsearch.ymlnode-1节点配置#集群名称,节点之间要保持一致cluster.name: es-cluster#节点名称,集群内要唯一node.name: node-1node.master: truenode.data: .
2020-12-28 00:32:53
1306
原创 ELK环境搭建ElasticSearch7.8.0+Logstash7.8.0+Kibana7.8.0
ELK 就是 Elasticsearch、Logstash 和 Kibana 三个软件的首字母简写,ELK可以理解为集日志(数据)收集、分析、展示的一个系统。我这边用的ELK版本是:elasticsearch-7.8.0、kibana-7.8.0-windows-x86、logstash-7.8.0,三个版本要一致才行。我们在elastic中文社区的下载中心可以下载到各个版本的我们需要用到的安装包,下载中心地址:https://elasticsearch.cn/download/一:Elastics
2020-12-27 00:47:11
877
原创 SpringBoot接入支付宝支付
引入pom依赖 <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.10.97.ALL</version> </dependency>注入AliPayBean
2020-12-02 00:36:01
6859
11
原创 SpringBoot自定义注解实现Token校验
1.定义Token的注解,需要Token校验的接口,方法上加上此注解import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@R...
2020-04-09 21:35:25
4859
原创 java服务端接入微信支付
App里做微信支付的前提是有在微信开放平台注册账号,然后在微信商户平台成为商家,并且在开放平台里绑定商户id一:设置密钥在账户中心-API安全-API密钥 里设置下API密钥。二:写配置文件配置文件WeixinPayConfig.javapublic class WeixinPayConfig { /** * 微信开放平台分配的应用ID * */ p...
2019-07-29 15:35:47
2121
2
原创 java服务端集成支付宝
在蚂蚁金服开放平台注册了账号并签约支付等需要用到的权限之后,开始集成。一:设置密钥在账户中心-密钥管理-开放平台密钥里设置下应用公钥,支付宝会根据我们设置的应用公钥,生成支付宝公钥。可以使用支付宝提供的:RSA签名验签工具 去生成一对公钥和私钥工具下载页面,提供了windows版本和mac版本https://docs.open.alipay.com/291/105971/二:集...
2019-07-29 14:59:07
719
原创 短信验证码常见漏洞总结
使用短信验证码验证身份已经是很普遍的了,注册和忘记密码时最为常见。但是在实际应用中,很多产品的短信验证接口存在诸多漏洞,很多人在开发中也是没有注意到这些问题,因此呢给企业和个人造成不必要的损失。接下来我将常见的漏洞总结如下:一:短信轰炸漏洞发送短信接口是最容易被盗刷的接口,不法分子利用接口的漏洞,任意的发送短信,给企业造成直接的经济损失。因此这个要特别注意,主要防御手段有四:(一)同一...
2019-03-04 16:47:48
13021
原创 SpringMVC集成Rocketmq
软件环境: windows7 Rocketmq 4.2 (上):安装配置RocketMq 一:配置环境变量 NAMESRV_ADDR=127.0.0.1:9876和rocketMQ的安装目录ROCKETMQ_HOME= D:\rocketmq-4.2.0 二:启动nameserver 在bin目录下,使用mqnamesrv.cmd 启动成功输出:The Name Server b...
2018-08-06 15:48:08
7004
1
原创 Windows下配置mongodb
(一)配置:安装成功后进入安装目录,在和bin同级创建出2个文件夹data(数据存储目录)和log(日志写入目录)在log目录下创建一个mongo.log的文件,在和bin同级的目录下创建一个mongo.conf的文件#数据库路径 注意此路径一定要改成你安装data文件夹的路径dbpath=D:\Program Files\MongoDB\Server\3.4\data #日志输
2018-04-24 14:51:06
1079
原创 springMVC集成redis
Redis现在已经是开发中的标配了,我们在使用SpringMVC的时候可以通过集成Jedis来很方便地操作Redis,Jedis实现了一个redis连接池,以及实现了很多Java操作redis的方法。集成Jedis第一步要引入依赖: <dependency> <groupId>redis.clients</groupId> ...
2018-04-01 00:59:18
6327
3
原创 微信JSSDK自定义分享详解--微信公众平台开发(六)
要想自定义分享的link、title、desc、imgUrl(分享卡片缩略图)就得集成JSSDK做自定义分享。准备阶段第一步要先配置安全域名:开发阶段可以将测试服和正式服的域名都配进去。没配置的话点击设置---公众号设置---功能设置进入设置界面:注意:域名前面不用加协议名称,还有域名服务器根目录下要上传公众号提供的文件(配置的每个域名服务器都要上传哦):MP_verify_qoTb3e9VQBl...
2018-03-26 16:34:30
12881
5
原创 利用Redis实现高并发计数器
业务需求中经常有需要用到计数器的场景:譬如一个手机号一天限制发送5条短信、一个接口一分钟限制多少请求、一个接口一天限制调用多少次等等。使用Redis的Incr自增命令可以轻松实现以上需求。以一个接口一天限制调用次数为例: /** * 是否拒绝服务 * @return */ private boolean denialOfService(String userId){ long c...
2018-03-02 22:58:57
47657
9
原创 Java获取网络图片上传到OSS
OSS不支持通过一个网络地址来上传图片,所以若想将网络上的图片上传到OSS上需要走点弯路。1:通过链接将图片下载到本地的一个文件夹下面2:用OSS上传该文件夹下的文件3:上传完成后删除本地的文件具体代码如下: //获取当前项目的绝对路径 public static String getTomcatPath(){ String nowpath; ...
2018-01-24 16:48:02
6147
原创 app开放接口签名设计与实现
只要接口暴露在外网,就避免不了安全问题。如果让接口裸奔,其他人只要知道接口地址和参数就可以调用,那简直就是灾难。试想有一个发送注册验证码的接口,如果仅仅知道接口地址和参数(手机号)就可以调用,那短信接口早被人盗刷不知道多少了。理想情况下,我们只希望我们的接口被我们自己的客户端去调用,那么问题来了,我们如何验证调用者身份呢,如何防止参数被篡改呢?如何防止别人盗刷我们的接口来攻击我们呢?常见的做法就是给接口加签名。原理是:每次请求的时候根据请求的参数加上时间戳,根据约定好的规则和秘钥生成一个签名
2017-10-21 23:55:53
5964
3
原创 java爬虫入门--用jsoup爬取汽车之家的新闻
public static boolean isContainChinese(String str) { Pattern p = Pattern.compile("[\u4e00-\u9fa5]"); Matcher m = p.matcher(str); if (m.find()) { return true
2017-10-15 22:32:47
898
springMVC集成junit4需要的jar包
2016-07-08
springMVC入门教程,集成了缓存、安全框架
2016-06-21
springMVC集成Ehcache所需的jar包
2016-06-15
eclipse安装Activiti designer所需的jar包
2016-06-14
SpringMVC+hibernate+spring+shiro+Ehcache所需jar包
2016-06-13
shiro all 1.2.4
2016-06-03
shiro-all.jar
2016-06-03
springMVC做的小项目,可作为springMVC入门教材
2016-05-11
jquery仿淘宝的评价插件
2016-03-03
原生态js写的日期选择器
2016-03-03
jquery多功能弹出层插件Lightcase
2016-02-23
Java实现txt转pdf
2023-09-07
echarts-java.zip
2020-11-19
windows下配置nginx反向代理tomcat
2018-08-15
windows64位系统的mongodb(版本3.4)
2018-04-24
jquery的两个插件base64和MD5
2018-03-21
高并发网站中可以使用 java并发包中自带的future模式吗?性能怎么样?
2017-08-04
mycat做读写分离,读写都分发到写服务器上,为毛啊?
2016-10-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人