- 博客(119)
- 资源 (2)
- 收藏
- 关注
原创 lucene基本概念
lucene是一个基于java的全文搜索工具包,实现了为应用提供索引和搜索功能。目前很多应用的搜索均基于lucene实现。 lucene可以为文本类型的数据建立索引,而不限制数据来源,可以是来自文件、db等任何数据存储的地方。lucene采用的是反向索引机制。 在lucene为你传给他的文本类型数据简历索引之后,索引会保存在磁盘或内存中,此时再使用查询条件进行查询就可以了。 使用过程: 存...
2018-04-22 11:40:29
418
原创 Stream的高级操作:collect,flatMap和 reduce
collect:可以将stream元素转换为不同类型的结果(List, Set , Map) 转list(需要set而不是list,使用Collectors.toSet()):List<Person> personList = Arrays.asList( new Person(1, 18, "小明"), new...
2018-04-01 16:26:24
4276
原创 助你写出更加有效、简洁、紧凑的代码-Stream
JAVA8中引入的Stream与 I/O中的InputStream和OutputStream是两个不同的概念。这里的Stream其实是函数式编程里Monad的概念。(在函数式编程中,monad是一个表示计算(步骤序列)的结构。一个带有monad结构的类型或该类型的嵌套函数定义了其链式操作的意义。)Stream中的操作可以分为两大类: 中间操作与结束操作: 1. 中间操作:中间操作返...
2018-04-01 15:20:34
643
1
原创 优雅地使用Optional
Optional在java8中的另一个热门API,为开发者解决的痛点是:NullPointException 问题构造方法Optional.of(Object object):入参object不能为空,否则会抛出空指针异常Optional.ofNullable(Object object):入参object可以为空,如果object不为空,就创建一个Optional实例;如果o...
2018-03-31 18:32:02
671
原创 lambda与函数式接口
说来惭愧,一个14年就出来的重要java版本,在java10也已发布的现在。我对于java8的某些新特性还没整明白,趁最近不忙,周末坐下,静静梳理一下下。。。函数式接口(一个接口里面只能有一个抽象方法。这种类型的接口也称为SAM接口,即Single Abstract Method interfaces。) 函数式接口里允许定义默认方法函数式接口里允许定义静态方法函数式接口里...
2018-03-31 16:43:22
268
原创 匿名内部类方式创建线程
/** * Description: 采用匿名内部类方式创建一个线程<br> * * @author: name:yuxin <br>email: yuruixin@ixincheng.com <br> * Create Time: 2018/3/10 0010-下午 9:14<br> */public class ThreadDemo...
2018-03-10 22:04:48
502
原创 线程的创建方式及生命周期
线程创建的两种方式/** * Description: <br> * * @author: name:yuxin <br>email: yuruixin@ixincheng.com <br> * Create Time: 2018/3/10 0010-下午 5:30<br> */public class MyThread1 ex...
2018-03-10 20:21:14
412
原创 maven插件解决项目中静态资源版本问题
产品从第一次上线后,迭代发了两个版本了。由于含web客户端,由于浏览器的静态资源缓存策略,出现了静态资源的版本管理问题。开发人员每次修改完js或css文件后都需要自己在html文件中修改版本号,这给开发带来极大不便,且容易出现漏改版本号。 初步解决方案是为所有静态资源引入都加入一个当前版本的版本号,每次发版前全局替换。缺点是会改变源码文件,且使项目的所有静态资源缓存都失效了。这会影响用户体验。...
2018-03-09 22:01:56
2140
原创 切面编程与分布式锁的结合应用尝试
在目前开发的产品中,由于产品需求的原因,许多地方不得不加上分布式锁。由于锁的是用户,所以对性能的影响也还可以接受。但是,由于使用锁的地方较多,遂决定将分布式锁从业务代码中抽离出来,通过切面编程的思想将目前项目中对分布式锁的应用进行改造。目前网络上相关方式的应用并不多,记录下来,供各位指正。 改造前: 所有应用分布式锁的地方都需要如下代码:RLock redissonLock = red...
2018-03-05 00:27:37
589
转载 spring 事务REQUIRES_NEW 不起作用的解决方法
spring 的事务传播这边就不提了,各种可百度到。但在用REQUIRES_NEW的时候,发现没有起作用。 原因:spring的事务管理通过切面实现,如果直接使用this.方法()或者方法(),不会触发切面中对事务的管理。应使用该方法所在的类的实例.方法()。解决方案1:需要将两个方法分别写在不同的类里。解决方案2:方法写在同一个类里,但调用B方法的时候,将service自己注入...
2018-03-05 00:13:11
3193
4
原创 spring中事务不生效问题
最近忙得要死(┬_┬),记录一下前几天遇到的一个使用spring管理事务的项目中,事务不生效问题。 最近项目中有一处逻辑较为复杂,涉及到多少张表操作的方法。在开发过程中,偶然发现事务竟然不能正常生效,明明抛出异常了,执行过的数据更新还是没有被回滚。带着沉痛的心情,反复审视这这段代码。因为在之前由测试过项目的事务管理,是生效的,为何现在不生效了,不是说代码不会骗人么??? 找了
2018-01-28 20:41:23
938
原创 使用git进行项目版本管理
为了更好地管理目前公司内的源码版本,让大家更好的协同工作,前阵子看了不少关于git版本管理的文章,总结除了一个相对简单的管理规范,并在实践一段时间后,进行了调整。最终版如下:为规范源代码版本管理,现将各分支表述如下:1.master分支 存放的应该是随时可供在生产环境中部署的代码 当开发活动告一段落,产生了一份新的可供部署的代码时,master分支上的代码
2018-01-15 10:47:59
32515
原创 Redis支持的数据类型
Redis支持五种数据类型: string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。 string类型是Redis最基本的数据类型,一个键最大能存储512MB。127.0.0.1:6379> set name yuxinOK127.0.0.1:6379> get name"yuxin"hash
2018-01-11 21:46:51
3181
原创 业务层遍历单表查询与使用mybatis的collection实现一对多查询的效率对比
由于公司急着上版本,一周的时间写两个模块,终于告一段落,但是里面还是有可待优化的内容。趁此间歇,将优化前后的查询做一次效率对比。 场景一:一对多查询 涉及表:医馆表,图片表,医馆图片关系表 查询结果:一个医馆对象里有一个含多个图片的集合,还有一个含多个领域的集合优化前(方案一)的查询方式如下public MedicalHospital selectHospitalById(String id)
2017-12-18 16:36:52
3914
1
原创 居安思危,mysql的binlog初探
目前公司的生产环境的数据库操作维护都由我负责,每次上生产都是提心吊胆啊,生怕把数据抹掉了。。。 居安思危,为了能心安一些,抽出一个周末的下午学习下binlog,让自己活的更心安些(真诚的手动微笑)前期准备: 先看下自己的数据库有没有开启binlog 在数据库中执行如下语句SHOW VARIABLES LIKE 'log_%'; 如上图所示说明未开启,进行如下操作第一步,在my.cnf文件中
2017-12-16 18:47:52
264
原创 Spring Boot项目页面报错 OTS parsing error: Failed to convert WOFF 2.0
今天实在受不了项目的一个子系统(一个使用springboot做的bbs系统)每次手动修改配置数据库了,给项目配置了一个分环境打包 然后就在晚上发版前发现了神奇的一幕。。。 编辑器的图标出现问题,显示不出来了浏览器调试发现报错:OTS parsing error: Failed to convert WOFF 2.0搜索之,果然找到一个与我问题相似的结果。按图索骥,成! 记录如下: 在sp
2017-12-16 00:29:02
5100
2
原创 通过Redisson实现基于redis的分布式锁
除了上一篇写的基于Jedis利用redis的setnx函数实现分布式锁之外。redis官方推荐使用Redisson作为分布式锁的首选。使用Redisson,不需要自己去封装lock和unlock方法。只需引入pom文件,加入相关调用方法即可。1.pom文件<dependency> <groupId>org.redisson</groupId> <artifactId>redisso
2017-11-14 15:46:09
4313
原创 基于单点redis服务的分布式锁简单实现
由于项目中有需要需要加锁的方法,而项目的pc和和移动端又在不同的服务器里。由于项目处于不同的jvm中,jdk自带的锁机制无法达到效果了。故看了一些基于redis实现分布式锁的方式,总结如下: 分布式锁可以基于很多种方式实现,比如zookeeper、redis…。基本原理是想通的:用一个状态值表示锁,对锁的占用和释放通过状态值来标识。 在 Redis 里,有一个 SETNX函数,是「SET
2017-11-14 14:32:57
477
原创 IntelliJ Idea常用命令
使用idea一个多月时间了,现整理出常用快捷键,以供大家参考。查看方法的调用链Ctrl+Alt+H返回至上次浏览的位置Ctrl+Alt+ left/right 切换已打开的代码视图Alt+ left/right最近打开的文件Ctrl+E在编辑器里不同的方法之间快速移动Alt-Up 和 Alt-Down显示注释文档Ctrl+Q...
2017-11-06 17:07:24
1539
原创 linux命令随记
周末的下午,坐在公司里,完成了手头的工作。感受着海南秋季的惬意,本着不能浪费这份美好的初衷,整理几个常用命令的详细意义。知其然,且知其所以然。 ps -ef |grep renren-security[root@localhost soft]# ps -ef|grep renren-securityroot 7934 1 0 11月03 ? 00:05:46 j
2017-11-05 17:38:05
372
原创 使用多线程获取大量数据集合中的关键数据
/** * 将一个list均分成n个list * @param source * @return */ public <T> List<List<T>> averageAssign(List<T> source,int n){ List<List<T>> result=new ArrayList<List<T>>();
2017-10-30 19:33:10
1580
转载 基于js的简单队列实现
/** * [Queue] * @param {[Int]} size [队列大小] */function Queue(size) { var list = []; //向队列中添加数据 this.push = function(data) { if (data==null) { return false; }
2017-09-03 16:27:09
3710
转载 Tomcat进程意外退出的问题分析
Tomcat进程意外退出的问题分析节前某个部门的测试环境反馈tomcat会意外退出,我们到实际环境排查后发现不是jvm crash,日志里有进程销毁的记录,从pause到destory的整个过程:org.apache.coyote.AbstractProtocol pause Pausing ProtocolHandler org.apache.catalina.core.Standa...
2017-09-01 09:59:15
414
原创 由一个自动部署脚本引发的血案。。。This is very likely to create a memory leak
前阵子,为了提高项目部署的效率,写了个shell脚本如下:#!/bin/shexport tomcat_name=apache-tomcat-8.5.16-frontexport tomcat_home=/data/$tomcat_nameTomcatID=$(ps -ef |grep tomcat |grep -w $tomcat_name|grep -v 'grep'|awk '...
2017-09-01 09:55:40
13773
2
原创 使用smack基于xmpp服务实现即时通讯
由于平台中礼物系统需要一个后台主动的广播,之前基于Strophe.js的前端客户端无法满足需要,故添加了smack(一个开源,易于使用的XMPP(jabber)客户端类库。)pom依赖 <!-- im相关 --> <dependency> <groupId>org.igniterealtime.smack</groupId
2017-08-26 20:31:37
1114
原创 阿里云服务器不能发送smtp协议邮件问题
遇到一个大大的坑。。。 之前在一个阿里云的WindowsServer可以正常发送,本地开发环境也可以,换到阿里云的centos环境下就出问题了,总是提示 一番查找之后,定位问题为:阿里云自去年之后购买的服务器均屏蔽掉了25端口,只能转而使用smtps协议的方式发送邮件。 扔代码import java.security.Security;import java.util.Date;impo
2017-08-02 16:42:42
3279
3
原创 常用但没记住命令
centos7开启端口号 firewall-cmd –zone=public –add-port=80/tcp –permanent
2017-07-31 19:15:07
326
原创 使用Strophe.js基于xmpp服务实现即时通讯
最近要做一个直播的礼物功能。刚开始打算使用websocket去实现数据的时效性,但是考虑到后期的并发以及pc+h5+app三端的对接,最终选用 ejabberd作为服务,ejabberd是基于Jabber/XMPP协议的即时通讯服务器,是可扩展性最好的一种Jabber/XMPP服务器,支持分布多个服务器,并且具有容错处理,单台服务器失效不影响整个cluster运作。最初,同事给了一个converse
2017-07-29 18:30:30
12174
15
原创 HttpURLConnection实现java后台上传文件和其他参数
最近在对接某第三方视频服务商的接口,使用java在后台调用他们的接口。在对接设置封面时遇到一个问题,他们需要对个参数,且有一个参数的类型为file。苦寻半天,果。遂记录如下。import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;
2017-07-18 18:09:04
2440
原创 tomcat中运行的项目多次加载处理方式
通常我们会遇到一些莫名其妙的问题,比如一个项目莫名启动两次。。。 将host标签中的内容修改如下可临时解决:<Host appBase="webapps" autoDeploy="false" deployOnStartup="false" name="localhost" unpackWARs="true">即如下两个关键属性设置 autoDeploy=”false” deployOnSta
2017-07-16 00:44:40
406
原创 创建mysql用户,并分配一个数据库
配置一个用户,可操作所有数据库GRANT SELECT,INSERT,UPDATE,DELETE ON *.* TO ehr@'%' IDENTIFIED BY '123456'配置一个用户,分配一个jysystem数据库的增删改查权限GRANT SELECT,INSERT,UPDATE,DELETE ON jysystem.* TO ehr@'%' IDENTIFIED BY '123abc'F
2017-07-05 11:18:07
554
原创 使用iframe来实现的系统,长时间未操作易发生的尴尬界面
在项目开发中,尤其后台管理系统,通常对于登录状态有一个时间限制,长时间不操作会被清除session,并跳转至登录界面。对于使用iframe来实现的页面之间交互的,此时就会显得尤为尴尬,发生下图的问题: 解决方式: 在页面头文件中添加如下一段代码:<script type="text/JavaScript"> if(window != window.top){ win
2017-06-22 19:30:18
683
原创 linux系统中jdk环境安装配置方法
准备阶段:卸载自带的OpenJdk安装好的CentOS会自带OpenJdk,用命令 java -version ,会有下面的信息: java version “1.6.0” OpenJDK Runtime Environment (build 1.6.0-b09) OpenJDK 64-Bit Server VM (build 1.6.0-b09, mixed mode) 最...
2017-06-19 09:26:46
505
原创 发送邮箱验证码(带html格式)
场景:用于用户注册、密码重置等。1 . 邮件html模板 emailTemplet.html<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <meta charset="utf-8" /></
2017-06-15 10:44:51
47960
12
原创 @InitBinder注解 解决form表单向springmvc传递多个对象参数
需求:有如下一个表单,包含两个对象的属性,name以“对象名.属性名”命名,传到后台。<form class="form-horizontal" role="form" action="updateCompanyResult.do" method="post"> <div class="alert alert-success" role="alert"> <strong>公司信息 —— <
2017-05-22 17:23:29
1864
1
原创 bootstrap与pagehelper实现分页
最近做的一些小项目中,都有用到分页,需要自己去搞。就把整个分页实现整理下吧,方便自己也方便他人。 前台1.引入paging.js//分页,页码导航,要求参数为一个对象function createPageNav(opt) { opt= opt || {}; var $container = opt.$container || null, //必需,页码容
2017-05-17 16:00:05
6432
原创 时间戳与时间
1494407292000–>2017/5/10 下午5:08function getLocalTime(nS) { return new Date(parseInt(nS)).toLocaleString().replace(/:\d{1,2}$/,' '); }
2017-05-10 17:44:43
500
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人