11 Ydoing

尚未进行身份认证

想认识志同道合的朋友请加微信号 csuxajy

等级
TA的排名 5k+

Elasticsearch源码编译

下载源码https://github.com/elastic/elasticsearch,github下载源码,分支切换到5.5,用ieda打开,等待漫长的编译过程下载安装包直接编译的源码不能直接使用,需要依赖安装包一些插件等,下载5.5.3安装包,下载地址https://www.elastic.co/downloads/past-releases,解压放到/opt/search/e...

2018-09-19 17:22:44

可供参考的互联网电商订单中心设计

最近在做订单中心领域模型设计,虽然还不完善,这里分享出来,希望能给大家提供一个思路。有不懂的,请多多交流,谢谢啦!

2018-06-09 09:56:33

分布式事务一些思考和总结

最近在做交易订单的事情,随着系统越来越复杂,交易量越来越大,出现不一致的情况也频发。不禁引人思考,这里做一些总结记录。分布式事务有一些理论,最常听的是CAP,ACID等。这里就不做介绍了,大家自己去查资料看看。分布式事务也经常提到2PC,3PC,因为不太适用互联网场景,这里也不做介绍。下面我们来看看一个电商典型的场景,下单后发送消息给其他业务系统,很多同学喜欢这样做@Trans...

2018-03-23 10:56:19

mybatis线上问题查找

线上反映查不到数据,根据业务逻辑把sql找出来执行,实际是有数据的。不知道什么原因,记录一下查找问题过程。greys查找问题greys对查找线上问题还是挺有帮助的,地址https://github.com/oldmanpushcart/greys-anatomy进入greys首先通过jps查到Java进程IDsudojps-l切换到jetty账号,执行greys脚本进入s

2017-10-30 20:56:00

RocketMQ有序消息研究

在订阅消息的时候,有时我们希望消息能按照一定业务顺序消费,比如一个订单创建,订单修改,订单完成。这时候是需要顺序消息。RocketMQ支持顺序消费,下面来研究一下实现逻辑。样例生产者publicclassOrderedProducer{publicstaticvoidmain(String[]args)throwsException{//Instant

2017-10-28 19:19:41

一次JVM调优实战

早上查看低峰期gc情况,发现昨晚上fgc有274次,感觉有些不正常,开始查找原因[jump@order-binlog-data002spring-boot]$sudojstat-gc20028400010S0CS1CS0US1UECEUOCOUMCMUCCSCC

2017-07-17 19:15:32

ThreadPoolExecutor源码剖析的一些思考和总结

最近迁移一个项目,涉及到线程池的问题。特意看了一下ThreadPoolExecutor源码,记录一下。思考几个问题ThreadPoolExecutor的基本实现思路是什么?-在线程池正在运行(running)的状态下,提交任务到线程池以后,如果线程数量小于corePoolSiez,则创建新的工作线程加入workers中,并启动该线程;如果大于等于corePoolSiez,则加入任务队列中,等待

2017-06-05 17:54:33

从dubbo看Netty使用

Netty是个高性能的Java网络传输框架,在很多中间件或者分布式框架中几乎都能看到它的身影。既然Netty这么受欢迎,那到底怎么把netty嵌入到我们的系统中了?笔者在几年前就接触了Netty,也开发了个小项目。一直问题困扰自己,Netty使用场景是什么?怎么使用Netty?我们可以从dubbo中找到些答案。dubbo是高性能轻量级的RPC框架。netty本质的功能负责网络传输,dubbo使用ne

2017-05-11 09:32:37

关于分库分表的实现

当数据大的时候,都会考虑分库分表的实现。分库分表可以在不同的层做。一般来说有以下几种:jdbc层:实现复杂,属于轻量级,对应用基本没有侵入性;缺点是不能复用数据库连接,在应用部署多的时候资源耗费大,不适于大规模部署。类似当当网的sharding-jdbc.ORM层:比如蘑菇街TSharding框架封装mybatis,实现简单。缺点是必须依赖ORM层,侵入性比较大。DBProxy层:如cobar

2017-03-10 15:14:16

Java中sleep和wait有什么区别?

sleep和wait有什么区别?大家都说是sleep不会释放锁,wait会释放锁。一直都不是很理解。最近在看AQS代码,才找到一些蛛丝马迹。AQS的await和wait实现思想类似,释放当前占有的锁,让其他线程继续获取锁。等适合机会唤醒后再重新占有锁。await方法有fullyRelease的方法1.先将线程插入等待队列;2.释放当前的占有的资源,即释放锁;3.让当前线程停止,等待唤醒;

2017-03-05 16:08:41

从ReentrantLock去分析AbstractQueuedSynchronizer

在并发中,锁是一个重要的工具,能帮助程序处理好数据并发处理不一致的问题,而AbstractQueuedSynchronizer在其中扮演中重要的角色。在设计所锁的时候,应该思考怎么锁能解决什么问题,而这个问题本质是由于什么原因引起。并发问题说到底是由于资源共享竞争使用引起的。锁就是为了防止资源不合理竞争使用导致的并发问题。AQS简介AbstractQueuedSynchronizer简称AQS,是J

2017-03-04 18:06:06

Spring中@Transactional什么时候开启事务?

在使用注解事务的情况时,Spring会把每个方法的执行封装为AOP执行过程。每次执行被事务注解方法时,会判断是否有必要创建事务。如果创建事务成功,则继续调用业务逻辑方法。事务是在方法执行最开始阶段创建的,因此方法要越小越好。事务的执行入口是TransactionInterceptor的invoke方法@OverridepublicObjectinvoke(finalMetho

2017-03-01 21:45:39

JVM的Perm区持续增长导致OOM问题记录

查找问题先用jstack看看线程栈是否正常,确认正常后用jmap查看(因为线上用的OpenJDK,需要安装debuginfo包)堆中快照情况。jmap一些命令可能会造成JAVA进程挂起,特别是jmap-permstat会造成STW,程序无法响应。建议使用jmap命令应该与线上环境隔离才能用。使用jmap-permstat发现大量dead状态的class对象,其中class为groovy/lang

2017-02-05 17:33:48

这些年读过有关计算机的书

快过年了,正在整理买的书,发现一大堆,还有些成就感,故总结记录一下。Java后端Java编程思想这本书是大学的教科书,买的是盗版的,现在工作了,就买了本正版的。总的来说,这本书在Java领域名气大,但我读起来有些费劲,一个是排版的问题,一个是作者的文笔的问题。作者用了很多源码例子讲述Java语法,并没有归纳总结,读起来真累。怪不得当初在大学的时候有些排斥Java,也有这本书的原因。Java核心技术该

2017-01-23 20:56:57

Spring AOP自定义实现

上一遍文章研究了SpringAOP实现源码,现在自己也想自己实现。假如要对以下接口BarService织入Before增强和After增强接口定义publicinterfaceBarService{voiddoSomething();}接口实现@ServicepublicclassBarServiceImpimplementsBarService{@Ove

2017-01-02 10:44:07

Spring AOP源码研究笔记

实现思路通过BeanPostProcessor的postProcessAfterInitialization方法,对初始化后的Bean创建代理。InstantiationModelAwarePointcutAdvisorImpl是Advisor的默认封装。MethodBeforeAdviceInterceptor是Before的默认实现。关键源码解析AbstractAutoProxyCreator类

2016-12-31 16:28:44

AOP的实现的几种方式

静态AOP在编译期,切面直接以字节码的形式编译到目标字节码文件中。AspectJ属于静态AOP,是在编译时进行增强,会在编译的时候将AOP逻辑织入到代码中,需要专有的编译器和织入器。优点:被织入的类性能不受影响。缺点:不够灵活动态AOPJDK动态代理在运行期,目标类加载后,为接口动态生成代理类,将切面植入到代理类中。Java从1.3引入动态代理。实现原理是为被代理的业务接口

2016-12-04 16:57:33

初识Spring Batch

概念SpringBatch是一个优秀的离线批处理框架。可以批量处理的数据格式可以是文本文件、xml文件以及持久化的数据。当然SpringBatch还提供了丰富的接口可以扩展,处理不同格式的数据。处理规模为中小型(对于海量的数据可以考虑Hadoop)。使用场景可以考虑账单对账,数据迁移,定时批量更新数据等等。层次架构如上图。分三层:应用层,核心层,基础设施层。应用层包括所有的batch作业和

2016-12-02 11:52:19

Spring中Bean的生成过程

Spring是个Bean大工厂,负责Bean的创建和注入。核心接口BeanFactory是Spring最核心接口,它是Bean的容器,所有Bean的创建和注入几乎都与它有关。很多后缀是“Context”的类都继承或扩展了它,比如ClassPathXmlApplicationContext。最核心的方法是getBean,当然getBean有很多种重载形式,这里不一一列出。publicinterfac

2016-11-02 15:31:00

关于ThreadLocal内存泄漏引起的思考

概述最近在对一个项目进行重构,用到了ThreadLocal。场景如下:外围系统会调用接口上传数据,在接口中要记录数据的变化Id,在上传数据完后需要集中在一个地方把这些Id以消息形式发送出去。使用场景样例代码publicResult<Void>uploadOrder(TotalPayInfoVototalPayInfoVo){try{sav

2016-11-01 19:59:17

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!