
java
文章平均质量分 54
李秀才
生活不只有苟且,还有诗和远方。
展开
-
两个线程交替执行的几种方式
有个常见的面试题是这样,有2个字符串,一个字符串是1234567,另一个字符串是ABCDEFG,然后需要按1A2B3C4D5E6F7G或者A1B2C3D45E6F7G这种输出,就需要用到多线程交替执行来实现。本文列举了5种实现方式。原创 2023-05-24 12:49:16 · 2480 阅读 · 0 评论 -
JVM堆内存溢出排查
是否有小伙伴在碰到了OOM的时候,抓耳挠腮,不知如何下手,通过这篇保姆级的教程,可以教会你快速定位堆内存溢出的bug,本篇讲述的主题是生成dump文件以及通过Visual VM分析dump文件原创 2021-12-05 23:08:51 · 2654 阅读 · 0 评论 -
使用数据库实现分布式锁
使用数据库实现分布式锁需要建一张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 · 6149 阅读 · 2 评论 -
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 评论 -
Java实现二维码扫码授权登陆
Java实现二维码扫码授权登陆原创 2018-05-11 17:20:44 · 11943 阅读 · 3 评论 -
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 · 7005 阅读 · 4 评论 -
短信验证码常见漏洞总结
使用短信验证码验证身份已经是很普遍的了,注册和忘记密码时最为常见。但是在实际应用中,很多产品的短信验证接口存在诸多漏洞,很多人在开发中也是没有注意到这些问题,因此呢给企业和个人造成不必要的损失。接下来我将常见的漏洞总结如下:一:短信轰炸漏洞发送短信接口是最容易被盗刷的接口,不法分子利用接口的漏洞,任意的发送短信,给企业造成直接的经济损失。因此这个要特别注意,主要防御手段有四:(一)同一...原创 2019-03-04 16:47:48 · 13036 阅读 · 0 评论 -
java服务端集成支付宝
在蚂蚁金服开放平台注册了账号并签约支付等需要用到的权限之后,开始集成。一:设置密钥在账户中心-密钥管理-开放平台密钥里设置下应用公钥,支付宝会根据我们设置的应用公钥,生成支付宝公钥。可以使用支付宝提供的:RSA签名验签工具 去生成一对公钥和私钥工具下载页面,提供了windows版本和mac版本https://docs.open.alipay.com/291/105971/二:集...原创 2019-07-29 14:59:07 · 719 阅读 · 0 评论 -
java服务端接入微信支付
App里做微信支付的前提是有在微信开放平台注册账号,然后在微信商户平台成为商家,并且在开放平台里绑定商户id一:设置密钥在账户中心-API安全-API密钥 里设置下API密钥。二:写配置文件配置文件WeixinPayConfig.javapublic class WeixinPayConfig { /** * 微信开放平台分配的应用ID * */ p...原创 2019-07-29 15:35:47 · 2121 阅读 · 2 评论 -
springMVC集成redis
Redis现在已经是开发中的标配了,我们在使用SpringMVC的时候可以通过集成Jedis来很方便地操作Redis,Jedis实现了一个redis连接池,以及实现了很多Java操作redis的方法。集成Jedis第一步要引入依赖: <dependency> <groupId>redis.clients</groupId> ...原创 2018-04-01 00:59:18 · 6327 阅读 · 7 评论 -
利用Redis实现高并发计数器
业务需求中经常有需要用到计数器的场景:譬如一个手机号一天限制发送5条短信、一个接口一分钟限制多少请求、一个接口一天限制调用多少次等等。使用Redis的Incr自增命令可以轻松实现以上需求。以一个接口一天限制调用次数为例: /** * 是否拒绝服务 * @return */ private boolean denialOfService(String userId){ long c...原创 2018-03-02 22:58:57 · 47663 阅读 · 13 评论 -
Java并发:Callable与Future的应用
我们都知道实现多线程有2种方式,一种是继承Thread,一种是实现Runnable,但这2种方式都有一个缺陷,在任务完成后无法获取返回结果。要想获得返回结果,就得使用Callable,Callable任务可以有返回值,但是没法直接从Callable任务里获取返回值;想要获取Callabel任务的返回值,需要用到Future。所以Callable任务和Future模式,通常结合起来使用。试想一个场景:需要一个帖子列表接口,除了需要返回帖子列表之外,还需要返回每条帖子的点赞列表和评论列表。一页10条帖子来计原创 2017-08-10 00:17:02 · 825 阅读 · 1 评论 -
tomcat设置不需要项目名便可访问项目(直接用域名或者ip和端口访问)
实际生产中往往访问web项目要求直接使用ip+por或者使用域名t便可直接访问项目,不加/项目名称。配置起来其实是非常简单。在tomcat\conf目录下找到server.xml,在配置里面添加一行配置 docBase是项目的物理路径,path是虚拟路径。将path设置成/便可不需要项目名称便可访问项目。里面可以设置多个项目,每个项目一行Context设置。配置完成后打开浏览器访问原创 2016-10-14 17:13:49 · 16601 阅读 · 3 评论 -
使用Dmo4j解析xml总结
dom4j需要的jar包,仅仅需要dom4j.jar。本例中用的1.6.1的版本,下载地址:http://download.youkuaiyun.com/detail/qq_33556185/9601807已知xml结构如下: 1 10 V1 2 20 V2 3 30 V3 4 40 V4 5 50原创 2016-08-12 15:15:33 · 2011 阅读 · 0 评论 -
java后台封装echarts
前些日子用到了Echarts,觉得比之前用的funshioncharts好用太多!可是拼装数据到前台显示的时候,有点费时费力,于是对Echarts在后台做了封装。具体做法了抽象出众图类、零件之上用零件组装成组件(坐标轴、标题、提示、图例、值域漫游、工具箱、数据项之类),组件之上抽象出图类(柱状图、折线图、饼图、仪表盘、地图、漏斗图之类),然后根据这些图类在图形工厂里灵活组装代码生成整个option原创 2016-01-30 19:43:24 · 18234 阅读 · 12 评论 -
富文本编辑器ueditor初探
UeEdit是百度开源的一款富文本编辑器,官网是:http://ueditor.baidu.com/website/我们下载最新版本1.4.3.3,解压下来目录结构如下:lib包在jsp文件夹下、剩余的4个文件夹是需要的js和css。1:引入资源5个jar包:引入需要的js和css(除jsp文件夹外,其他4个文件夹资源都需要引入)将config.json原创 2017-02-16 17:40:56 · 992 阅读 · 2 评论 -
Java递归获取评论列表
递归算法是一种直接或间接地调用自身的算法。在计算机编写程序中,递归算法往往使算法的描述简洁而且易于理解,譬如获取具有明显父子级结构的数据时(部门树、评论列表等等)。Service层关键代码public List getCommentTree(String topicId,String type) { List list=null; try { list=getTree(t原创 2017-02-21 17:09:07 · 5305 阅读 · 1 评论 -
如何让mysql数据库允许远程访问
在mysqlWorkBench里执行如下命令use mysql;update user set host = '%' where user ='root';如果控制台输出如下:update user set host = '%' where user ='root' Error Code: 1175. You areusing safe update mode a原创 2017-02-14 17:55:57 · 5377 阅读 · 2 评论 -
MyBatis批量操作(mysql)
mybatis批处理的思路是将多条sql合并为1条sql执行,提高效率。1:批量删除以数组为例的写法: delete from group_members where groupId in #{groupId} 以集合为例的写法: delete from gro原创 2017-08-22 15:22:30 · 3282 阅读 · 3 评论 -
maven安装与环境配置
软件环境:Window 7Java 8Maven 3.5.0MyEclipse Professional 20141:下载maven官网下载地址:http://maven.apache.org/download.cgi2:解压缩到固定目录本例中解压缩在d盘根目录,安装目录为:D:\apache-maven-3.5.03:配置环境变量系统变原创 2017-08-20 01:34:17 · 959 阅读 · 1 评论 -
app开放接口签名设计与实现
只要接口暴露在外网,就避免不了安全问题。如果让接口裸奔,其他人只要知道接口地址和参数就可以调用,那简直就是灾难。试想有一个发送注册验证码的接口,如果仅仅知道接口地址和参数(手机号)就可以调用,那短信接口早被人盗刷不知道多少了。理想情况下,我们只希望我们的接口被我们自己的客户端去调用,那么问题来了,我们如何验证调用者身份呢,如何防止参数被篡改呢?如何防止别人盗刷我们的接口来攻击我们呢?常见的做法就是给接口加签名。原理是:每次请求的时候根据请求的参数加上时间戳,根据约定好的规则和秘钥生成一个签名原创 2017-10-21 23:55:53 · 5967 阅读 · 3 评论 -
java配置环境变量教程
(1)在系统变量里新建变量JAVA_HOME 变量值是JDK安装的目录(2)在系统变量里新建变量PATH变量值是%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;(3)在系统变量里新建CLASSPATH变量值为.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;检验是否配置成功 使用jav原创 2016-09-02 12:50:22 · 852 阅读 · 0 评论