
Java
文章平均质量分 97
夏天的技术博客
这个作者很懒,什么都没留下…
展开
-
快速掌握一个语言最常用的50%
现在的开发工作要求我们能够快速掌握一门语言。一般来说应对这种挑战有两种态度:其一,粗粗看看语法,就撸起袖子开干,边查Google边学习;其二是花很多时间完整地把整个语言学习一遍,做到胸有成竹,然后再开始做实际工作。然而这两种方法都有弊病。第二种方法的问题当然很明显,不仅浪费了时间,偏离了目标,而且学习效率不高。因为没有实际问题驱动的语言学习通常是不牢固不深入的。有的人学着学着成了语言专家,反而忘了转载 2015-05-08 12:55:38 · 725 阅读 · 0 评论 -
【Java并发编程】之二十:并发新特性—Lock锁和条件变量(含代码)
原文链接简单使用Lock锁 Java 5中引入了新的锁机制——java.util.concurrent.locks中的显式的互斥锁:Lock接口,它提供了比synchronized更加广泛的锁定操作。Lock接口有3个实现它的类:ReentrantLock、ReetrantReadWriteLock.ReadLock和ReetrantReadWrite转载 2016-07-25 15:10:43 · 640 阅读 · 0 评论 -
理解Java对象序列化
原文地址 理解Java对象序列化感谢作者分享:)理解Java对象序列化关于Java序列化的文章早已是汗牛充栋了,本文是对我个人过往学习,理解及应用Java序列化的一个总结。此文内容涉及Java序列化的基本原理,以及多种方法对序列化形式进行定制。在撰写本文时,既参考了Thinking in Java, Effective Java,JavaWorld,developerWorks中的相关文章和其它网络转载 2016-06-19 16:55:00 · 623 阅读 · 2 评论 -
JVM 常见参数设置和分析
打印 GC 日志这里以 IDEA 为例:菜单栏: Run -> Edit Configurations -> VM options 添加 -XX:+PrintGCDetail写个简单的测试程序package VM;/** * Created by andy.wwh on 2016/7/16. */public class TestPrintGcDetails { public原创 2016-07-16 16:20:15 · 4728 阅读 · 1 评论 -
Thinking in Java -- 并发(一)
并发的多面性基本的并发定义任务 线程可以驱动任务,我们通过实现 Runnable 接口来提供,需要实现 Runnable 接口的 run() 方法。package concurrency;/** * Created by wwh on 16-3-24. */public class LiftOff implements Runnable { protected int count原创 2016-04-07 22:06:15 · 3122 阅读 · 0 评论 -
ibatis 使用入门
简介 iBatis 是apache 的一个开源项目,一个O/R Mapping 解决方案,iBatis 最大的特点就是小巧,上手很快。如果不需要太多复杂的功能,iBatis 是能够满足你的要求又足够灵活的最简单的解决方案,现在的 iBatis 已经改名为 Mybatis 与 Hibernate 相比 iBatis 是一个半自动化的 ORM 框架,它没有像 Hibernate 一样将对象和表映射原创 2016-07-27 14:56:55 · 3769 阅读 · 0 评论 -
深入浅出CGlib——打造无入侵的类代理
原文链接CGlib是什么? CGlib是一个强大的,高性能,高质量的Code生成类库。它可以在运行期扩展Java类与实现Java接口。 当然这些实际的功能是asm所提供的,asm又是什么?Java字节码操控框架,具体是什么大家可以上网查一查,毕竟我们这里所要讨论的是cglib, cglib就是封装了asm,简化了asm的操作,实现了在运行期动态生成新的class。 可能大家还感觉不到转载 2016-07-18 16:05:30 · 1455 阅读 · 0 评论 -
Java开发必须掌握的线上问题排查命令
转自 Java开发必须掌握的线上问题排查命令作为一个合格的开发人员,不仅要能写得一手还代码,还有一项很重要的技能就是排查问题。这里提到的排查问题不仅仅是在coding的过程中debug等,还包括的就是线上问题的排查。由于在生产环境中,一般没办法debug(其实有些问题,debug也白扯。。。),所以我们需要借助一些常用命令来查看运行时的具体情况,这些运行时信息包括但不限于运行日志、异常堆栈、堆使用情转载 2016-07-19 16:51:41 · 1888 阅读 · 0 评论 -
Mock 模拟测试简介及 Mockito 使用入门
Mock 是什么 mock 测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。这个虚拟的对象就是mock对象。mock对象就是真实对象在调试期间的代替品。简单的看一张图我们在测试类 A 时,类 A 需要调用类 B 和类 C,而类 B 和类 C 又需要调用其他类如 D、E、F 等,假如类 D、E、F 构造很耗时又或者调用很耗时的话是非常不便于...原创 2016-07-18 11:19:58 · 83236 阅读 · 10 评论 -
如何在数据库事务提交成功后进行异步操作
问题业务场景业务需求上经常会有一些边缘操作,比如主流程操作A:用户报名课程操作入库,边缘操作B:发送邮件或短信通知。业务要求操作A操作数据库失败后,事务回滚,那么操作B不能执行。(失败后也可以重新进行自调度)操作A执行成功后,操作B也必须执行成功如何实现普通的执行A,之后执行B,是可以满足要求1,对于要求2通常需要设计补偿的操作一般边缘的操作,通常会设置成为异步的,以提升性能,比如发送MQ转载 2016-08-05 10:10:29 · 3141 阅读 · 0 评论 -
Java 锁机机制——浅析 Synchronized
剖析 SynchronizedSynchronized 介绍Synchronized 方面的文章网上有很多了。它主要是用来进行同步操作。也被称为重量级的锁,它的同步包括:对于普通方法同步,锁是当前实例对象对于静态方法同步,锁是当前类的 Class 对象对于方法块同步,锁是 Synchronized 括号里的对象那么如何理解锁是“对象”。Java 编程语言中号称一切皆对象。当我们 new 一个原创 2016-07-23 17:54:31 · 9399 阅读 · 1 评论 -
Java CountDownLatch 和 CyclicBarrier 使用
CountDownLatch 和 CyclicBarrierCountDownLatch 和 CyclicBarrier 适用场景都是某一个任务想要往下执行必须依靠其他任务的执行完毕才可以。 举个例子:工人干活,工人完工之后,老板才能检查。CountDownLatchCountDownLatch 是设定一个计数器,当其它任务通过 countDown() 方法将计数器值减为 0 时触发阻塞在 a原创 2016-07-24 16:51:50 · 579 阅读 · 0 评论 -
使用 hsdis 查看 JIT 生成的汇编代码
原文:使用hsdis查看jit生成的汇编代码 感谢博主分享背景 JVM 有 HotSpot引擎可以对热代码路径进行有效的 JIT优化,大幅度提升计算密集代码的性能。默认一个方法至少被调用10k次以上才可能被JIT优化。查看JIT工作情况 Java代码public class VolatileBarrierExample { long a; volatile long v转载 2016-05-26 16:02:10 · 2471 阅读 · 0 评论 -
java 'i++' 计数器的性能测试
java ‘i++’ 计数器的性能测试所谓的volatileSynchronized同步原语JDK1.5的AtomicLongJava8 LongAddr Vs AtomicLong总结:比较,该用哪个 ?CAS(compare and swap)1.所谓的volatile上一篇文章我也写到volatile的作用:当我们写一个变量时,它会被立刻刷新到主内存中去,保证了变量对其他线程的可见性原创 2015-05-19 02:54:55 · 1823 阅读 · 0 评论 -
java 设计模式 -- 责任链模式
设计模式 – 责任链模式介绍: 责任链模式是一种动态行为模式,有多个对象,每个对象分别拥有其下家的引用,连起来形成一条链,待处理对象则传到此链上,在此链进行传递,且待处理对象并不知道此会被链上的哪个对象处理,这使得我们可以动态的增加链上的对象并且分配责任。纯责任链和非纯责任链 责任链分为两种,纯责任链和非纯责任链。 纯责任链是待处理对象request在处理对象handler链上传递,原创 2015-07-30 15:28:02 · 1467 阅读 · 1 评论 -
Thinking in Java -- 类型信息RTTI
Thinking in Java – 类型信息RTTI 个人感觉 java 中的比较难的部分了,在看了些netty源码发现其实这块非常有用。原创 2015-08-07 10:41:45 · 1720 阅读 · 0 评论 -
重构:运用Java反射加多态 “干掉” switch
前言:本篇文章主要描述我是如何通过Java的反射加多态干掉 swtich这个代码的坏味道目录代码的坏味道《重构》曰遭遇switch利剑:多态加反射结束战斗代码的坏味道 有这么一句话:普通的代码是写给机器看的,优秀的代码是写给人看的,在软件开发的过程中,不知道大家有没有遇到过if-else或switch满天飞,函数长的看都不想看这种情况,先不说软件的扩展性怎么样,这样的代码就算是我们原创 2015-10-21 22:08:10 · 12530 阅读 · 4 评论 -
聊聊编程语言学习之路
这篇文章是自己编程语言学习之路的总结(还在进行中),因为也踩过不少“坑”,希望能对后面的一些初学编程语言的朋友或者希望学习其他编程语言的朋友有一些帮助,避过一些不必要的坑。我先简单的介绍下自己学习的路线:c -> c++ -> python -> java 我比较熟悉c和c++,python和java只能说能拿来用吧,说出这个是想让看的朋友带着审视的眼光,毕竟水平有限,比如你不熟悉c++你可以原创 2015-09-08 22:29:19 · 12299 阅读 · 34 评论 -
Java实现单例的难点
原文链接: dzone 翻译: ImportNew.com - rainsbaby 译文链接: http://www.importnew.com/16995.html有简单又高效的方法可以实现单例模式,但没有一种方式能在任何情况下都确保单例的完整性。单例模式是指某个类只被实例化一次,用来表示全局或系统范围的组件。单例模式常用于日志记录、工厂、窗口管理器和平台组件管理等。我认为要尽量避免使用单例模式转载 2015-10-28 21:32:42 · 633 阅读 · 0 评论 -
java多线程与内存模型(一)
主要简单的聊聊 java多线程的内存模型,因为只有知道了JVM帮我们偷偷干了什么,才能写出更安全健壮的多线程并发程序。原创 2015-05-15 14:01:37 · 1203 阅读 · 0 评论 -
Thinking in Java -- 类型信息
运行时类型信息(RTTI:Run-Time Type Identification)使得你可以在程序运行时发现和使用类型信息RTTI为什么需要 RTTI通常,我们希望大部分代码尽可能的少了解对象的具体类型,仅仅与对象家族中的一个通用表示打交道。这样的代码会更容易写,更容易读,且更容易维护;设计也更容易实现、理解和改变。所以“多态”是面向对象编程的基本目标。来看书上的一个例子:package typ原创 2016-03-21 21:55:30 · 1414 阅读 · 4 评论 -
thinking in java 多态,接口,内部类,异常小结
多态1.类内private方法是禁止覆盖的和继承的,它默认为final。 在派生类中使用名字最好和基类名字不同2.类方法中的数据域一般为private,我们调用getter它方法来访问它,setter方法来设置它,如果你直接访问某个域而不是传引用,多态会在编译进行解析3.static方法不具有多态性,它是所有此类对象共有的4.构造器默认为static的,构造方法是从基类构造到派生类,因为派生类有可原创 2015-09-07 01:08:43 · 1662 阅读 · 0 评论 -
高并发的核心技术-幂等的实现方案
一、背景 我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。 例如: 前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果。 我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统bug重发,也应该只扣一次钱; 发送消息,也应该只发一次,同样的短信发给用户,用户会哭的; 创建业务订单,一次业务请求只能创建一个,创建多个就会出大问题转载 2016-08-17 20:27:41 · 1430 阅读 · 0 评论