自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

刘劭的博客

博客记录学习

  • 博客(16)
  • 收藏
  • 关注

原创 基于redis分布式锁实现“秒杀”

最近在项目中遇到了类似“秒杀”的业务场景,在本篇博客中,我将用一个非常简单的demo,阐述实现所谓“秒杀”的基本思路。业务场景所谓秒杀,从业务角度看,是短时间内多个用户“争抢”资源,这里的资源在大部分秒杀场景里是商品;将业务抽象,技术角度看,秒杀就是多个线程对资源进行操作,所以实现秒杀,就必须控制线程对资源的争抢,既要保证高效并发,也要保证操作的正确。一些可能的实现刚才提到

2015-12-18 08:15:51 218129 47

原创 浅谈Java动态代理

相信了解设计模式的developer对代理(proxy pattern)模式都不陌生。代理模式的基本思想就是在调用者和被调用者之间加上一层“代理”,这层代理对于调用者而言是透明的,因为代理往往和被代理对象实现相同的借口。那么既然实现相同的接口,代理的意义又何在?因为我们常常需要在原本的接口上封装一些业务逻辑,比如日志、缓存、访问控制。

2015-11-21 20:41:11 722

原创 【设计模式】Filter-Chain 的应用

Filter-Chain模式简介 从7月份实习以来,因为项目中运用alibaba DRUID 数据库中间件、Spring Framwork等开源框架,所以就稍微阅读了部分源码,果然优秀的架构就是优秀的架构,学习里面对设计模式的应用,应该会对设计模式有更加深刻的理解。Druid中增加模块就是通过Filter-Chain模式实现的,任何模块只要实现Filter接口里定义的方法,并在初始化时ad

2015-11-08 22:16:55 5146

转载 【jvm】java垃圾回收

转载自 http://flora95.github.io/2015/12/13/Java-Garbage-Collection/Java的一大特性就是内存的分配和回收都是自动进行的。当程序规模不大时,我们完全可以不考虑内存的使用情况。但是一旦程序的规模足够大,对性能的要求足够高时,了解Java垃圾收集(GC)的内部机制并根据具体的应用特征来调整使用的垃圾收集算法就显得十分重要了。GC属性吞吐量(Th

2016-01-02 15:02:30 937

原创 【jvm】JAVA运行时数据区与内存分配

java虚拟机在运行时会将内存空间划分为不同的数据区域。每个区域都有各自的用途以及生命周期。有些区域伴随着JVM进程的存在而存在,有些区域“随线程而生,随线程而死”。 程序计数器作用:当前线程所执行的字节码的行号指示器,字节码解释器在工作时通过改变计数器的值来选取下一条需要执行的字节码指令。 特点: 1、线程私有,JVM多线程是通过轮流切换并分配CPU时间的,在任何一个时刻,一个CPU(一个核

2015-11-30 08:55:50 3603 1

原创 rabbitMQ学习笔记(4):pub/sub

在实际的rabbitMQ使用中,大部分场景都比较复杂,没有像上一篇学习笔记里介绍的单个consumer那么简单。通常会将一个消息deliver到多个consumer。这就是rabbitMQ实现的pub/sub模式,也就是发布/订阅模式。        为了阐述这个模式,我们实现一个简单的日志系统来演示pub/sub。系统的功能十分简单,一个生产者向rabbitMQ写入log,两个消费者监听ra

2015-11-12 22:36:45 2526

原创 【面经】Morgan Stanley IT简易面经

职位Morgan Stanley 2015 IT summer analyst(JAVA)校招的话仅供参考,流程大概类似,不过也有可能多几轮。一定要穿正装!电面自我介绍+十道左右问题+一道简单算法,全英文问题都比较基础,类似什么是递归、快排、进程线程区别、堆栈区别、多态定义、GC等。算法也比较简单,我当时问的是二分查找相关的。主要是要把自己知道的东西清楚的用英文表述出来

2015-10-26 22:12:59 1696

原创 rabbitMQ学习笔记(3):Work Queues

在上一篇文章中,我们解决了rabbitMQ使用中最简单的问题:producer如何把最简单的helloworld消息通过rabbit Server发送给consumer,这篇文章在上篇文章的基础上探讨一下rabbitMQ任务分发机制(work queues/task queues)。rabbitMQ任务分发机制的核心出发点就是避免立刻进行“资源密集”或者说time-consuming的

2015-10-25 19:19:27 777

原创 rabbitMQ学习笔记(2):最简单的helloworld

上一篇文章提到了rabbitMQ的体系结构和一些核心概念,这篇文章就通过一个最简单的Java版helloWorld实例来看实际代码中这些概念的体现。前期准备1、在自己的电脑上安装rabbitMQ server2、下载rabbitMQ 的java API,就是一个jar包,并在工程中导入introduction上一篇说到MQ解决的主要问题是降低系统之间、模块之间的

2015-10-21 22:38:33 721

原创 rabbitMQ学习笔记(1):基本介绍与核心概念

1、历史RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现。AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),

2015-10-20 22:58:51 678

转载 java 并发操作之原子性与可视性

原子性原子是世界上的最小单位,具有不可分割性。比如 a=0;(a非long和double类型) 这个操作是不可分割的,那么我们说这个操作时原子操作。再比如:a++; 这个操作实际是a = a + 1;是可分割的,所以他不是一个原子操作。非原子操作都会存在线程安全问题,需要我们使用同步技术(sychronized)来让它变成一个原子操作。一个操作是原子操作,那么我们称它具有原子性。java的

2015-06-25 15:38:25 1135

原创 android service基础(二)

上一篇简单介绍了android使用service的一种方式,即startservice和stopservice。除了这种方式外,还可以通过在activity中绑定和解绑定service来启动service。第一步:首先建立一个自定义的service类,这个自定义service类持有一binder引用,在activity中bindservice时会用到。public class MySe

2015-04-24 20:08:00 505

原创 android service基础(1)

自定义service:package com.example.services;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.util.Log;public class MyService extends Service{ pub

2015-04-22 20:34:58 504

原创 android http交互框架二次封装

在android与http服务器交互的方式主要是用httpClient类以及httppost、httpresponse结合的方式进行。这里记录一个android客户端和http服务器交互的框架,框架的核心在于:1、封装http请求信息,用ReqBean封装。2、封装服务器返回数据信息,用httpres类封装。3、客户端与服务器交互的耗时操作另开线程处理,并用回调机制获得服务器返回的

2015-04-21 16:26:06 634

转载 Android ADB server didn't ACK * failed to start daemon * 简单有效的解决方案

http://blog.csdn.net/xiaanming/article/details/9401981

2015-02-10 09:40:06 619

原创 android HttpClient与服务器交互

与服务器交互有GET和POST两种方法,在android中,wan

2014-10-09 20:08:56 512

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除