java
文章平均质量分 80
微观技术
一个讨厌内卷的码仔
展开
-
如何解决分布式事务
事务有四个特性:原子性、一致性、隔离性、持久性。这四个属性通常称为 ACID随着分布式架构理念提出,软件系统架构开始迈入一个新时代。一个臃肿的应用会拆分出若干个微服务中心,按业务域维度划分系统边界,大家各司其职,在自己负责的领域深耕细作,可谓好处多多。但同时也增加了系统复杂度,每个子业务系统都涉及数据库操作,如何解决分布式事务是一个绕不开的话题。什么是分布式事务,一句话概括:分布式事务...原创 2020-01-23 15:06:36 · 917 阅读 · 0 评论 -
浅谈spring——bean创建过程(四)
spring容器从配置文件读取到创建一个完整Bean的流程步骤:1. ResourceLoader加载spring配置文件2. BeanDefinitionReader读取Resource所指向的配置文件资源,解析配置文件,将每一个解析成一个BeanDefinition对象,并保存到BeanDefinitionRegistry3. 利用后处理器BeanFactoryPost原创 2013-03-17 10:14:24 · 3240 阅读 · 2 评论 -
浅谈spring——增强接口(六)
AOP支持5种类型的增强。增强接口关系图:1)前置增强:BeforeAdvice,表示在目标方法执行前实施增强。2)后置增强:AfterReturningAdvice,表示在目标方法执行后实施增强。3)环绕增强:MethodInterceptor,表示在目标方法执行前后实施增强4)异常增强:ThrowsAdvice,表示在目标方法抛出异常后实施增强5)引介增原创 2013-04-01 09:04:06 · 2365 阅读 · 0 评论 -
浅淡spring的注入
spring一个很大优点就是通过IOC方式,根据xml配置文件自动注入,从来避免了在java类中直接出现大量的实例化代码,省时省力。Spring依赖注入方式:a) 使用构造器注入(使用较少)b) 使用属性setter方法注入(使用较多,常见方式)c) 使用Field注入,用于注解方式(使用较多,常见方式)上述三点有一个共同点都是依靠java反射机制,动态注入。其中c原创 2012-06-20 08:50:02 · 1893 阅读 · 0 评论 -
Spring内核研究-管理bean的声明周期一(InitializingBean和init-method)
InitializingBean Spirng的InitializingBean为bean提供了定义初始化方法的方式。InitializingBean是一个接口,它仅仅包含一个方法:afterPropertiesSet()。Bean实现这个接口,在afterPropertiesSet()中编写初始化代码: package research.spring.bea原创 2011-07-31 14:23:34 · 1373 阅读 · 0 评论 -
java小案例(1)
一、大家都知道当执行一个方法时,如果中途有return会提前结束方法。思考下面的一段代码会返回什么样的结果?第一种情况:public static String methodA(){ try{ System.out.println("try methodA"); return "A"; }finally{原创 2012-04-13 19:50:00 · 1333 阅读 · 0 评论 -
浅谈spring——切面(七)
之前提到的五大增强是被织入目标类的所有方法中。但如果想选择性增强(织入某些类的某些方法上),则要借助于切点。spring 主要通过org.springframework.aop.Pointcut 来描述切点Pointcut接口定义public interface Pointcut { /** * Return the ClassFilter for th原创 2013-04-13 22:00:11 · 2233 阅读 · 0 评论 -
java的System.getProperty()方法使用
java给main方法传递参数通常是借助于args[]数组来解决。代码示例:package com.alibaba.test;/** * 启动脚本传递参数 * * @author onlyone 2013-6-14 下午10:02:11 */public class ArgsTest { public static void main(String[] a原创 2013-06-15 09:36:19 · 7891 阅读 · 1 评论 -
JMS & ActiveMQ小结
ActiveMQ 是apache的一个开源消息总线。支持JMS1.1 和J2EE 1.4规范,在中间件领域扮演着重要角色。原创 2013-07-28 15:11:34 · 1710 阅读 · 0 评论 -
浅谈spring——自动创建代理(八)
浅谈spring——切面(七)这一节提到通常要借助ProxyFactoryBean创建织入切面的代理子类,虽然对目标类进行了增强,但是增加了很多额外的配置。spring提供自动代理机制,可以帮我们从烦琐的工作中解救出来。其实现机制借助于BeanPostProcessor的自动代理创建器的实现类。自动代理创建器的继承关系: 代理器有三类:1. 基于Bean的名字的自动原创 2013-04-29 10:52:28 · 4297 阅读 · 0 评论 -
浅谈spring——注解配置(九)
spring定义一个切面是件麻烦的事情,需要实现专门的接口,还要进行一些较为复杂的配置,有没有较为简单的方法???@AspectJ注解可以很容易定义一个切面,且不需要实现任何的接口。缺点是对JDK的版本有限制,要求是5.0以上当然对于不足5.0的版本,可以通过Schema的配置定义切面,方便程度和@AspectJ相差无几。无论是基于XML配置的AOP还是基于@AspectJ注解原创 2013-08-06 23:34:10 · 1542 阅读 · 0 评论 -
浅谈spring——DAO管理(十)
目前市场上的持久化技术框架有:Hibernate、ibatis、JDO、JPA、TOPLink等。由于框架繁杂,spring需要提供模板类简化各种持久化技术的使用(设计模式方面使用:模板模式、适配器模式),体现了“开-闭原则”JDBC数据访问操作流程:1. 获取数据库连接2. 开启事务3.获得prepareStatement执行功能,预加载sql语句,设置参数,执行,对Re原创 2013-08-10 22:13:25 · 2357 阅读 · 0 评论 -
浅谈spring——spring MVC(十一)
springMVC框架主要是围绕DispatcherServlet这个核心展开,它负责拦截请求并将其分派给相应的的处理器处理,然后将结果响应给用户。包括注解驱动控制器、请求及响应信息处理、视图解析、本地化解析、上传文件解析、异常处理、表单绑定等springMVC是基于Model2来实现的,利用处理器分离模型、视图和控制,达到不同技术层级间松散层耦合的效果,提高系统灵活性、复用性和可维护性。而Model1则是将展现逻辑和业务逻辑集中在一起,耦合性高,不容易扩展。原创 2013-08-24 15:46:11 · 2014 阅读 · 0 评论 -
j2ee中常用的五种远程调用协议
一、综述本文比较了RMI,Hessian,Burlap,Httpinvoker,web service等5种通讯协议的在不同的数据结构和不同数据量时的传输性能。RMI是java语言本身提供的远程通讯协议,稳定高效,是EJB的基础。但它只能用于JAVA程序之间的通讯。Hessian和Burlap是caucho公司提供的开源协议,基于HTTP传输,服务端不用开防火墙端口。协议的规范公开,可以用于任意语原创 2013-09-23 22:19:40 · 5809 阅读 · 3 评论 -
浅谈spring——Spring资源加载(十二)
Spring将各种形式的资源封装成一个统一的Resource接口。通过这个Resource接口,你可以取得URL、InputStream和File对象。当然,Resource对象所代表的资源可能不存在,此时InputStream就取不到。如果Resource不是代表文件系统中的一个文件,那么File对象也是取不到的。Spring通过“注入”的方式来设置资源。假如你有一个Java类:public c原创 2014-01-19 22:13:18 · 2394 阅读 · 0 评论 -
CyclicBarrier介绍
CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。CyclicBarrier 支持一个可选的 Runnable 命令,在一原创 2014-03-04 19:20:59 · 1358 阅读 · 0 评论 -
MAT使用教程
MAT 全称 Eclipse Memory Analysis Tools 是一个分析 Java堆数据的专业工具,可以计算出内存中对象的实例数量、占用空间大小、引用关系等,看看是谁阻止了垃圾收集器的回收工作,从而定位内存泄漏的原因。什么时候会用到MAT?a) OutOfMemoryError的时候,触发full gc,但空间却回收不了,引发内存泄露b)java服务器系统异常,比如load飙高,io异原创 2015-09-27 00:36:16 · 22891 阅读 · 6 评论 -
APNS开源包的内存泄露问题
APNS(全称:Apple Push Notification Service),主要是用于往苹果设备推送push消息通知!基本流程:今天要聊的问题集中在第4个环节,我们自己的服务器往苹果的消息中心推送通知。现状:历史原因,push的代码散落在各个应用中,随着新消息通道不断接入,开发、维护成本较高,开始考虑构建push中心,封装dubbo接口对外提供服务,对外屏蔽各种差异,将所有的push业务逐步原创 2015-09-29 21:35:39 · 3011 阅读 · 2 评论 -
浅谈spring——AOP思想(五)
软件重构的理念,如果多个类中出现相同的代码,可以考虑定义一个共同的抽象类,将这些相同的代码提取到抽象类中。但如果是重复的横切代码(比如性能监控,方法开始时,执行一段代码,方法快结束时再执行一段代码)就很难采用上面的方式。如图:此时,AOP(aspect oriented programming)应运而生,通过横向抽取机制为这类无法通过纵向继承体系进行抽象的重复性代码提供了解决方原创 2013-03-24 09:06:15 · 2201 阅读 · 0 评论 -
浅谈spring——属性注入与事件(三)
spring配置文件,可以将String、 int 等字面值注入到Bean中,也可以将集合,Map,对象等类型数据注入到Bean中。注:如果字面值含有 &的特殊处理标签,以防止某些字符串对XML格式造成破坏;当然也可以使用XML转义序列表示这些特殊的字符特殊符号转义序列<>>&& "&q原创 2013-03-17 18:00:44 · 2236 阅读 · 0 评论 -
浅谈spring——引言(一)
引言做开发已有几年光景,随着项目的不断深入,对spring的了解也越来越多,深深为spring的灵活设计、强大功能所折服。以下内容是开发过程中的一些心得体会,可能会有些杂乱,希望对你有所帮助spring是Java EE应用一站式的轻量级开源框架,以IOC(Inverse of Control)控制反转和AOP(Aspect Oriented Programming)面向切面的编程为原创 2013-03-10 21:47:17 · 3005 阅读 · 1 评论 -
JAVA判断字符串是否为数字
下面有四种方法,估计好用的应该是第三种吧。1.用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = str.length();--i>=0;){ if (!Character.is原创 2011-08-16 20:59:58 · 833 阅读 · 0 评论 -
关于ArrayBlockingQueue队列的一些问题
背景:最近接手一个新的应用-商机快递,主要是给用户发送营销邮件,由于不定期会有漏发的情况,所以在里面加了一些逻辑来修复这个问题,由于系统采用了多线程的方式,改之前考虑的不周全,最后会导致重发的现象。 // 创建一个阻塞队列,容量为maxThread*2原创 2011-09-15 22:18:55 · 1091 阅读 · 0 评论 -
String 、 StringBuffer 、StringBuilder 的区别
StringBuffer提供了同步机制,所以并发线程访问是线程安全的。适合多线程。StringBuilder没有提同步机制,所以线程不安全,适合单线程。但如果是单线程的话,要比StringBuffer快。 简要的说, String 类型原创 2011-09-18 23:10:05 · 783 阅读 · 0 评论 -
Json的使用
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language,Standard ECMA-262 3rd Edition -原创 2011-09-18 22:42:19 · 835 阅读 · 0 评论 -
杂谈ThreadLocal
ThreadLocal很容易让人认为是一个"本地线程"。其实ThreadLocal并不是一个Thread,而是Thread的局部变量。ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。原创 2011-08-28 18:39:27 · 839 阅读 · 0 评论 -
Integer大小比较的一些事
首先如下代码: public class Test { public static void main(String[] args) { Integer a = 10; Integer b = 10; S原创 2011-10-14 22:11:44 · 848 阅读 · 0 评论 -
BigDecimal的使用
商业计算,我们都知道不能用float和double,因为他们无法进行精确计算。BigDecimal可以完善float和double类无法进行精确计算的缺憾。另外一些基本数据类型,如int,float,double,long,和BigDecimal对象相互转换。很简单:基本类型通过构造函数转换成对应的BigDecimal对象,而BigDecimal类提供了诸如intValue(), floa原创 2011-10-24 12:34:57 · 3586 阅读 · 1 评论 -
Java 对象序列化
Java 对象序列化是 JDK 1.1 中引入的一组开创性特性之一,用于作为一种将 Java 对象的状态转换为字节数组,以便存储或传输的机制,以后,仍可以将字节数组转换回 Java 对象原有的状态。实际上,序列化的思想是 “冻结” 对象状态,传输对象状态(写到磁盘、通过网络传输等等),然后 “解冻” 状态,重新获得可用的 Java 对象。所有这些事情的发生有点像是魔术,这要归功于Objec原创 2011-11-25 00:02:36 · 1444 阅读 · 0 评论 -
java基本数据类型精度思考
今天code发现一个问题,本来已经精确到小数点后两位的float类型的数据(12.08),经过为opensearch build索引后,取回来的数据精度增多了,如12.08000。而页面显示的为小数点精确到后两位的数据,当然进行数据截取的方式很多。 感觉有一种方式:借助类型转换,来处理更方便方式一:(int)(12.08000*100)/100.0方式二:of原创 2011-12-12 12:29:35 · 1058 阅读 · 0 评论 -
java类加载的思考
问题From: 前几天开发一个需求,涉及到industry_center服务化的改造,在预发布验证时,发现服务化的改动并没有起效果,检查发现ops同学已将最新的rpm包部署到预发布机上了,查看服务启动时间发现原来部署后服务没有重启,内存加载的依然是旧版本。因此有一个假设,如果java命令运行一个程序后(类似while循环不会自动退出),删除其java源文件、编译后的class文件,并不会原创 2011-12-10 23:31:41 · 1165 阅读 · 0 评论 -
java精度思考(1)
问题:public class FloatDoubleTest { public static void main(String[] args) { float f = 20014999; double d = f; double d2 = 20014999; System.out.println("f=" + f); System.out.printl原创 2011-12-15 11:45:10 · 989 阅读 · 0 评论 -
经典代码片段(1)
引言:在编码过程中总会发现很多代码片段写的很巧妙,虽然没有架构设计那么光彩夺目,但也能象星星一样发出晶莹的光芒,正所谓无数的星星也可以点亮黑色的天空.代码片段1: /** * 临时一个标题方法,后面的需求将启用getNewSubject方法 * * @param context * @return */ p原创 2011-12-25 18:50:48 · 1028 阅读 · 0 评论 -
Java I/O 的工作机制
引言: I/O 问题可以说是当今互联网 Web 应用中所面临的主要问题之一,因为当前在这个海量数据时代,数据在网络中随处流动。这个流动的过程中都涉及到 I/O 问题,可以说大部分 Web 应用系统的瓶颈都是 I/O 瓶颈。本文的目的正是分析 I/O 的内在工作机制,你将了解到:Java 的 I/O 类库的基本架构;磁盘 I/O 工作机制;网络 I/O 的工作机制;其中以网络 I/O 为重点介绍 J原创 2011-12-27 19:35:44 · 1448 阅读 · 0 评论 -
java关于concurrent的使用
引言:并发处理在实际开发中应用场景还是挺多了,查阅了一些资料,对一些并发常用类、方法做了简单汇总,希望对大家有所帮助!正文:1. AtomicLong 在 Java 语言中,协调对共享字段的访问的传统方法是使用同步,确保完成对共享字段的所有访问,同时具有适当的锁定。通过同步,可以确定(假设类编写正确)具有保护一组给定变量的锁定的所有线程都将拥有对这些变量的独占访问权原创 2012-04-10 12:51:39 · 1035 阅读 · 0 评论 -
java集合并发处理
在Java类库中出现的第一个关联的集合类是 Hashtable ,它是JDK 1.0的一部分。 Hashtable 提供了一种易于使用的、线程安全的、关联的map功能,确实比较方便。然而,线程安全性是有代价的――Hashtable 的所有方法都是同步的。因此,无竞争的同步会导致可观的性能代价。(从目前参与的项目来看,这种场景较少,因为无论是全局变量或者局部变量,每次请求时,线程都是创建一个prot原创 2012-05-06 19:18:13 · 1174 阅读 · 0 评论 -
性能跟踪利器——Btrace
Btrace是由Kenai开发的一个开源项目,是一种动态跟踪分析JAVA源代码的工具。它使用OjbectWeb ASM组件来完成字节码层面上的跟踪分析,帮助我们对运行时的JAVA程序分析,监控等操作优点:》无侵入性(只查看,不会修改)》不修改应用任何应用数据》限制跟踪行为,没能有循环 一、 Btrace 原理:本地编写跟踪类,由Bt原创 2012-11-03 17:21:27 · 2419 阅读 · 1 评论 -
浅谈spring——Bean的生命周期(二)
spring通过配置文件描述bean与bean之间的依赖关系,利用java的反射机制来实例化bean并建立bean之间的依赖关系。其中BeanFactory是spring框架最核心的接口,管理不同类型的java对象,面对spring本身。ApplicationContext建立在BeanFactory的基础之上,提供面向应用的功能,称为应用上下文,面向使用spring框架的开发者。注:原创 2013-03-15 00:54:02 · 9868 阅读 · 9 评论 -
关于private public protected 的使用
1.只能在本类中使用是private2.想被子类继承,但不想被子类实例的对象调用 protected(继承:protected和public 都可以,但调用只能是public)3.一个方法想被调用 public原创 2011-02-19 18:38:00 · 882 阅读 · 0 评论