java
文章平均质量分 58
yuruixin_china
世界上有10种人,一种懂二进制,一种不懂二进制 !
展开
-
PageHelper踩坑--莫名其妙分页
昨天同事提测的时候,遇到一个问题。明明没有进行分页的查询,被莫名加了limit 1,20今天早上聊起,同事说大概是对象里有两个字段:pageNum和pageSize都被给了初始值造成的(机智boy,定位准确)pageHelper的Page类里也有两个同名字段: pageNum和pageSize ,这其中莫非有什么牵扯?pagehelper除了分页还有个隐式分页?有了线索,查阅资料,发现也有网友遇到类似问题,最终都指向了PageHelper 的supportMethodsArguments。su.原创 2020-06-30 11:28:16 · 1072 阅读 · 1 评论 -
spring状态机与自建状态机
状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。目前网上已经有很多实现方案,可以根据自己需要采用。spring状态机框架:Spring StateMachine在网上看了下关于spring状态机的文章,很多都很相似,好像都来自“程序员DD”的《使用Spring StateMachine框架实现状态机》 一文。但是文中只是简单举了正常的例子,对于异常逻辑没有详细写出。狗尾续貂一下,补充下异常流程的demo。package online.javaadu.statemachin.原创 2020-05-24 19:10:19 · 1568 阅读 · 0 评论 -
java8日期类常用方法使用总结
java8已经推出了五六年时间了,项目中也经常用到它的一些特性,但是在日期使用方面,没有进行过较为全面的梳理,临近年关,今日得空整理出来,一来备忘而来分享。日期时间方面的常用类有三个LocalDate、LocalTime 、LocalDateTime ,最为常用当属LocalDateTime以上三种使用方式大同小异,着重记录下LocalDateTime 的使用import org.juni...原创 2020-01-21 10:26:07 · 364 阅读 · 0 评论 -
记一次线上事故的罪魁祸首--poi的oom
最近发生了一次线上故障,由于poi导出大量数据引发的之前有了解过poi在大数据量读取或导出的时候会存在oom问题,不过因此引发线上bug还是第一次最佳解决方案是exsyexcelJAVA解析Excel工具easyexcel Java解析、生成Excel比较有名的框架有Apachepoi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一...原创 2019-12-30 18:32:50 · 1043 阅读 · 0 评论 -
Hystrix常用配置
Netflix公司开源的Hystrix框架,对延迟和故障可以提供强大的容错能力,在分布式系统中对请求远程系统、服务或者第三方库产生的错误,通过熔断、线程池隔离等手段,可以及时停止系统中的级联错误从而起到自适应调节的作用。Hystrix设计的原则:阻止任何单一的第三方依赖使用掉整个容器的全部用户线程快速失败而不是在队列中积压请求提供fallback错误回调机制任何第三方依赖之间相互隔...转载 2019-11-14 19:47:47 · 428 阅读 · 0 评论 -
通过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 · 4176 阅读 · 0 评论 -
solr安装、使用、配置中文分词器
solr 是基于lucene搜索库的一个搜索引擎框架,它将lucene进行了封装,实现了企业级应用框架。有提供完整集群及索引库优化方案。 solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引...原创 2018-04-22 16:25:07 · 946 阅读 · 0 评论 -
由一个单例模式引发的对指令重排的思考
先说下单例模式,由于频繁创建对象比较浪费资源,就考虑将所有用到某个类的实例时,公用同一个实例,于是就有了单例模式。单例模式写法有很多,于是我看到了这么一种写法:public class SingletonTest { private SingletonTest() { } private static SingletonTest singletonT...原创 2018-06-02 18:23:05 · 4910 阅读 · 2 评论 -
java对象的几种引用方式
在看java的ThreadLocal的源码实现时,涉及到了弱引用,对于这种引用方式,并不太常用到,翻看各种博客文档,将java的各种引用总结如下: 1.强引用User user = new User();在我们日常编码中,使用最广的引用方式。 只要强引用还存在,对象就不会被垃圾回收器回收。 可以通过将引用置空的方式,让JVM回收该对象。 2.软引用 S...原创 2018-05-27 21:48:14 · 1986 阅读 · 0 评论 -
ThreadLocal原理实现
之前有在项目中应用过ThreadLocal的示例,不过用的时候,也只是大致了解了ThreadLocal的应用场景,对于它的实现原理,并没有去深入看过。正巧在办公桌上的《java高并发程序设计》中看到了,遂了解一番,记录一波。 ThreadLocal是线程的局部变量,线程间无法读取彼此的数据,只能在当前线程访问到数据,是线程安全的。常见的应用场景:管理数据库的Connection。书中的示例代...原创 2018-05-28 22:36:49 · 409 阅读 · 0 评论 -
robots.txt在java项目中分环境打包的具体实现
不同环境环境下的爬虫协议是不同的,尤其测试、开发的数据,不允许被搜索引擎爬虫。所有有了这个需求,最终解决方案: 0. 基于maven的分环境打包 1. 文件放于分环境打包的不同环境目录下 2. 使用maven-resources-plugin插件实现将robots.txt文件复制至war的根目录下<plugin> <artifactId>maven-r...原创 2018-07-01 18:10:44 · 924 阅读 · 0 评论 -
Jenkins快速安装
目前项目应用了dubbo作为分布式框架,随着项目的迭代,服务增至六个。虽然不是太多,但每次发各种环境的版本服务时,都不得不放下手中工作,花费近半小时的时间进行更新。作为一名程序员,怎么能容忍被重复的劳动占用宝贵的开发时间呢!遂决定,引入Jenkins,关于Jenkins的详述,网上很多,不再赘述总之给我的感觉,就像他的logo一样。他就像一个管家,为你工作,减轻你的负担安装Jen...原创 2018-07-01 18:24:54 · 282 阅读 · 0 评论 -
基于Git+Maven+Jenkins的可持续集成及自动化构建
由于项目是采用分布式架构,需要多节点部署,加之对Jenkins的pipeline不是特别熟悉,决定更多的使用shell实现。 创建一个任务 配置参数化构建(使之支持回滚) 配置源码git地址 配置定时触发 配置构建shell(支持回滚)case $deploy_env in deploy) echo "deploy:$deploy_env"...原创 2018-07-01 21:38:13 · 1569 阅读 · 0 评论 -
lucene基本概念
lucene是一个基于java的全文搜索工具包,实现了为应用提供索引和搜索功能。目前很多应用的搜索均基于lucene实现。 lucene可以为文本类型的数据建立索引,而不限制数据来源,可以是来自文件、db等任何数据存储的地方。lucene采用的是反向索引机制。 在lucene为你传给他的文本类型数据简历索引之后,索引会保存在磁盘或内存中,此时再使用查询条件进行查询就可以了。 使用过程: 存...原创 2018-04-22 11:40:29 · 360 阅读 · 0 评论 -
切面编程与分布式锁的结合应用尝试
在目前开发的产品中,由于产品需求的原因,许多地方不得不加上分布式锁。由于锁的是用户,所以对性能的影响也还可以接受。但是,由于使用锁的地方较多,遂决定将分布式锁从业务代码中抽离出来,通过切面编程的思想将目前项目中对分布式锁的应用进行改造。目前网络上相关方式的应用并不多,记录下来,供各位指正。 改造前: 所有应用分布式锁的地方都需要如下代码:RLock redissonLock = red...原创 2018-03-05 00:27:37 · 529 阅读 · 0 评论 -
websocket实现聊天室等功能
最近有做一个h5项目,有如下场景需求: 1.实现实时聊天。 2.多人登录,有一个教师角色可控制其他角色用户的视频播放(播放,暂停,快进)。 最初考虑视频控制的实现方向是推流,但是由于没有接触过这方面,着实头疼了一阵。最后,经过一夜梦中思考,次日上午,采用指令的方式实现对视频的控制。 是不是听着很高大上?其实很简单,以上两个功能都是通过onmessage函数实现,将教师端的页面加上监控视频的事原创 2017-03-31 17:55:25 · 1783 阅读 · 0 评论 -
阿里云服务器不能发送smtp协议邮件问题
遇到一个大大的坑。。。 之前在一个阿里云的WindowsServer可以正常发送,本地开发环境也可以,换到阿里云的centos环境下就出问题了,总是提示 一番查找之后,定位问题为:阿里云自去年之后购买的服务器均屏蔽掉了25端口,只能转而使用smtps协议的方式发送邮件。 扔代码import java.security.Security;import java.util.Date;impo原创 2017-08-02 16:42:42 · 3155 阅读 · 3 评论 -
业务层遍历单表查询与使用mybatis的collection实现一对多查询的效率对比
由于公司急着上版本,一周的时间写两个模块,终于告一段落,但是里面还是有可待优化的内容。趁此间歇,将优化前后的查询做一次效率对比。 场景一:一对多查询 涉及表:医馆表,图片表,医馆图片关系表 查询结果:一个医馆对象里有一个含多个图片的集合,还有一个含多个领域的集合优化前(方案一)的查询方式如下public MedicalHospital selectHospitalById(String id)原创 2017-12-18 16:36:52 · 3818 阅读 · 1 评论 -
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 · 4981 阅读 · 2 评论 -
spring中事务不生效问题
最近忙得要死(┬_┬),记录一下前几天遇到的一个使用spring管理事务的项目中,事务不生效问题。 最近项目中有一处逻辑较为复杂,涉及到多少张表操作的方法。在开发过程中,偶然发现事务竟然不能正常生效,明明抛出异常了,执行过的数据更新还是没有被回滚。带着沉痛的心情,反复审视这这段代码。因为在之前由测试过项目的事务管理,是生效的,为何现在不生效了,不是说代码不会骗人么??? 找了原创 2018-01-28 20:41:23 · 894 阅读 · 0 评论 -
maven插件解决项目中静态资源版本问题
产品从第一次上线后,迭代发了两个版本了。由于含web客户端,由于浏览器的静态资源缓存策略,出现了静态资源的版本管理问题。开发人员每次修改完js或css文件后都需要自己在html文件中修改版本号,这给开发带来极大不便,且容易出现漏改版本号。 初步解决方案是为所有静态资源引入都加入一个当前版本的版本号,每次发版前全局替换。缺点是会改变源码文件,且使项目的所有静态资源缓存都失效了。这会影响用户体验。...原创 2018-03-09 22:01:56 · 2087 阅读 · 3 评论 -
线程的创建方式及生命周期
线程创建的两种方式/** * 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 · 360 阅读 · 0 评论 -
匿名内部类方式创建线程
/** * 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 · 467 阅读 · 0 评论 -
spring 事务REQUIRES_NEW 不起作用的解决方法
spring 的事务传播这边就不提了,各种可百度到。但在用REQUIRES_NEW的时候,发现没有起作用。 原因:spring的事务管理通过切面实现,如果直接使用this.方法()或者方法(),不会触发切面中对事务的管理。应使用该方法所在的类的实例.方法()。解决方案1:需要将两个方法分别写在不同的类里。解决方案2:方法写在同一个类里,但调用B方法的时候,将service自己注入...转载 2018-03-05 00:13:11 · 3117 阅读 · 4 评论 -
Jenkins权限控制
Jenkins本身是不支持权限控制的,所以需要使用使用插件:Role-based Authorization Strategy,实现Jenkins角色权限控制,具体如下图:原创 2018-07-03 09:37:31 · 460 阅读 · 0 评论 -
web应用实现跨域请求的两种常用方式(CORS、JSONP)
什么是跨域?由于浏览器的同源策略,不允许跨域调用其他页面的对象。所谓跨域是指跨域名。同一域名是指协议、域名、端口三者均相同,任一不同都不属于同一域名,举例如下:当网站http://www.domain.com/work.html文件中发起一个ajax请求时,若请求的URL为下列情况时,跨域结果如下: URL 说明 是否跨域 http://www.domai...原创 2018-07-26 14:15:13 · 985 阅读 · 0 评论 -
java中的同步集合与并发集合
同步集合可以简单地理解为通过synchronized来实现同步的集合。如果有多个线程调用同步集合的方法,它们将会串行执行。 arrayList和vector、stack: 1. Vector是线程安全的,源码中有很多的synchronized可以看出,而ArrayList不是。导致Vector效率无法和ArrayList相比 2. ArrayList和Vector都采用线性连续存储空间,当存...原创 2018-08-26 17:01:14 · 10814 阅读 · 0 评论 -
使用mybaits将 对象属性-json字符串 相互转化
/** * @ClassName: JsonTypeHandler * @Description: * mapper里json型字段到类的映射。 * 入库:#{jsonDataField, typeHandler=com.yx.smp.basic.handler.JsonTypeHandler} * 出库: * <resultMap type="com.yx.smp.busine...原创 2019-02-26 10:18:11 · 2523 阅读 · 1 评论 -
springboot扫描自定义类注解、方法注解
import lombok.Data;import org.springframework.context.ApplicationListener;import org.springframework.context.event.ContextRefreshedEvent;import org.springframework.core.annotation.AnnotationUtils;...原创 2019-03-26 18:57:39 · 14978 阅读 · 2 评论 -
重新认识zookeeper
第一次接触zookeeper是在使用dubbo的时候,它作为服务的注册中心。当时只是简单了解到zookeeper是一个分布式应用程序协调服务,没有深入系统地对它进一步了解。近日,在思考一个分布式锁问题:目前在项目中使用的是基于redis的分布式锁,为了防止主机宕机或网络中断之后造成死锁,需要设置超时时间;那么有没有一种方式,不需要等到超时,只要主机断开或故障,就将锁释放掉呢?zook...原创 2019-04-25 19:43:09 · 197 阅读 · 0 评论 -
你猜一个 TCP 连接上面能发多少个 HTTP 请求
一道经典的面试题是从 URL 在浏览器被被输入到页面展现的过程中发生了什么?大多数回答都是说请求响应之后 DOM 怎么被构建,被绘制出来。但是你有没有想过,收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢?要搞懂这个问题,我们需要先解决下面五个问题:现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求...转载 2019-05-29 19:24:30 · 275 阅读 · 0 评论 -
线程间通信--"wait/notify"机制
"wait/notify"机制:等待/通知机制,wait使线程暂停运行,而notify 使暂停的线程继续运行使用wait ,notify 和 notifyAll 时需要先对调用对象加锁调用wait 方法后,线程状态有 Running 变为 Waiting,并将当前线程放置到对象的 等待队列notify或者 notifyAll 方法调用后, 等待线程依旧不会从 wait 返回,需要调用 no...原创 2019-07-29 09:33:23 · 200 阅读 · 0 评论 -
nginx监听相同端口通过域名分发到不同的服务
下面的配置主要解决两个问题:通过请求的不同域名分发到不同的服务在后台服务中获取真实的远程ipnginx配置server { listen 80; proxy_set_header X-Real-IP $remote_addr; #记录远程访问ip,方便应用中获取 server_name m.baidu.com; ...原创 2019-08-08 22:03:21 · 2801 阅读 · 0 评论 -
guava中的事件总线(观察者模式的应用)
观察者模式:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,所有依赖它的对象都会得到通知并自动更新。Guava框架中的EventBus(事件总线)是对观察者模式的一种实现。EventBus是在单体架构内实现的松耦合的绝佳方式,通过它可以很简洁的实现事件注册监听和消费。Guava框架中提供了EventBus(同步)和AsyncEventBus(异步,继承于EventBus)两种时...原创 2019-09-23 21:29:49 · 1382 阅读 · 0 评论 -
两个properties文件 比较工具类
文件1:app1.propertiessms.registerTemplate = SMS_123456sms.registerExpireTime = 600billcode.size = 200feign.name.produce = abc-produceyrx.cloud.applicationId = 777888999444555666文件2:app2.propertie...原创 2019-02-12 09:42:08 · 1229 阅读 · 0 评论 -
自定义注解+redis实现简单易用的分布式锁
最近项目中有的模块功能涉及到并发,为了提高项目中分布式锁的易用性,在之前的一个思路基础上进行了迭代改进。https://blog.csdn.net/yuruixin_china/article/details/79441260这是之前写的一篇关于分布式锁的文章。最近测试了一把之前的这个设计思路,发现有逻辑漏洞如上图中,当finally代码块中释放锁的逻辑执行时,该处切入的方法实际还没有...原创 2018-12-28 20:35:07 · 791 阅读 · 1 评论 -
类生命周期、加载机制、双亲委派模型
类的生命周期:加载、连接(包括验证、准备、解析)、初始化、使用、卸载加载:1、将.class文件的二进制数据读入内存中,并放入运行时数据区的方法区。2、堆区创建一个java.lang.Class对象,用来封装类在方法区内的的数据结构,并提供访问方法区内数据结构的接口。验证:确保被加载类的正确性(文件格式、元数据、字节码、符号引用等)准备:为类的静态变量分配内存并赋初始值(若静态变量被...原创 2018-11-04 18:22:42 · 435 阅读 · 0 评论 -
通过栈(LIFO)实现FIFO
今天偶然看到朋友分享的一个文章,里面提到一个问题。就是如何通过栈实现队列的先进先出特性?栈是一个后进先出的数据结构,而栈是一个先进先出的数据结构。若要达到先进先出的效果,显然一个栈是不够用的。将一个栈里的内容,依次取出,然后放入另一个栈里,此时栈里的元素顺序会发生倒序。代码如下:public class Q<T>{ Stack<T> in = ...原创 2018-10-27 15:11:40 · 3449 阅读 · 1 评论 -
Semaphore的简介及应用场景
Semaphore是一个计数信号量,常用于限制可以访问某些资源(物理或逻辑的)线程数目。 常用函数: 信号量的构造函数 非公平:public Semaphore(int permits);//permits就是允许同时运行的线程数目公平(获得锁的顺序与线程启动顺序有关):public Semaphore(int permits,boolean fair);//perm...原创 2018-08-26 21:40:56 · 10008 阅读 · 5 评论 -
CyclicBarrier的简介及应用场景
CyclicBarrier(循环屏障) 直译为可循环使用(Cyclic)的屏障(Barrier)。它可以让一组线程到达一个屏障(同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续工作 CyclicBarrier构造函数 public CyclicBarrier(int parties);//parties表示屏障拦截的线程数量public ...原创 2018-08-27 20:38:07 · 4187 阅读 · 0 评论