- 博客(60)
- 收藏
- 关注
原创 深入理解JVM—JVM内存模型
我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等待成本,但是随着CPU的发展,内存的读写速度也远远跟不上CPU的读写速度,因此,为了解决这一纠纷,CPU厂商在每颗CPU上加入了高速缓存,用来缓解这种症状,因此,现在CPU同内存交互就变...
2016-11-26 20:44:50 64
原创 返回零长度的数组或者集合,而不是null
如果一个方法的返回值类型是集合或者数组 ,如果在方法内部需要返回的集合或者数组是零长度的,也就是没有实际对象在里面,我们也应该放回一个零长度的数组或者集合,而不是返回null。如果返回了null,客户端程序员就要检测返回的是不是null,然后才能进行下一步操作,否则就会引发NullPointException。但是如果是返回的的是空数组或者集合,就不会再后续的使用这个对象上,引发空指...
2016-11-26 18:41:09 120
原创 threadLocal遇上线程池导致局部变量变化
这两天一直在查无线app一个诡异的问题,表象是stg的接口返回数据,和线上接口的返回数据不一致。 1、初步判断:有缓存,查看代码后发现缓存时间直邮6分钟,而且同一个接口,其他调用方的返回数据,stg和线上是保持一致的。 2、确认版本后,把线上版本和stg环境的版本号,进行多次check,发现版本是一致的。 3、线上和stg接口的返回数据,来源于我依赖的接口,现在接口stg...
2016-11-26 16:16:20 189
原创 Spring 整合 Redis
pom构建: [html] view plain copy print?<modelVersion>4.0.0</modelVersion> <groupId>com.x.redis</groupId> <artifactId>springredis</artifactId>...
2016-11-22 15:50:51 61
原创 redis - 环境搭建
一:简介(来自百科) redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memc...
2016-11-22 15:45:21 70
原创 Spring3.X jdk8 java.lang.IllegalArgumentException
异常提示: 1 javax.servlet.ServletException: Servlet.init() for servlet springMVC threw exception 2 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504) 3 ...
2016-11-22 12:22:48 57
原创 Spring的refresh()方法相关异常
如果是经常使用Spring,特别有自己新建ApplicationContext对象的经历的人,肯定见过这么几条异常消息:1.LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via the context: ......2.BeanFactory not initialize...
2016-11-22 10:28:28 130
原创 解决Eclipse 启动后总是Building WorkSpace(sleeping)
今天打开eclipse后eclipse总是在Building WorkSpace(sleeping),我的解决方案是,Project -> Building AutoMatically关闭就好了,以下是我网上搜到的其他解决方案,没有亲测Eclipse 一直不停building workspace完美解决总结 一、产生这个问题的原因多种 1、自...
2016-11-22 10:10:35 509
原创 The declared package does not match the expected package
eclipse使用import导入源代码到项目中或者通过svn检出等方式导入源码到项目中,控制台容易出现大量错误。但同时直接使用ant脚本进行编译则能编译成功。这个时候请不用担心,打开错误可以看到在很多类的开头部分:package出现错误,提示为:The declared package does not match the expected package错误的原因是:ec...
2016-11-21 16:54:19 1289
原创 Log4j 日志文件存放位置设置
以DailyRollingFileAppender 为例:假设每天一个日志文件有以下设置:log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender log4j.appender.A1.File=app.loglog4j.appender.A1.DatePattern='.'yyyy-MM-ddlog4j.appen...
2016-11-21 16:23:24 138
原创 Kafka Producer端封装自定义消息
这篇文章主要讲kafka producer端的编程,通过一个应用案例来描述kafka在实际应用中的作用。如果你还没有搭建起kafka的开发环境,可以先参考:<kafka开发环境搭建>首先描述一下应用的情况:一个站内的搜索引擎,运营人员想知道某一时段,各类用户对商品的不同需求。通过对这些数据的分析,从而获得更多有价值的市场分析报表。这样的情况,就需要我们对每次的搜索进行记录,当然,...
2016-11-18 10:20:16 468
原创 搭建Dubbo+Myeclipse+Maven3问题集锦
1. 找不到dubbo2.8.4包的问题在编译Maven工程的过程中,出现如下问题:Description Resource Path Location TypeArtifactDescriptorException: Failed to read artifact descriptor for com.alibaba:dubbo:jar:2.8.4: Unresolvab...
2016-11-18 10:14:31 199
原创 maven 打包时spring.handlers spring.schemas被覆盖问题
有两种方式第一是修改maven pom 文件增加 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.1&...
2016-11-18 10:13:29 486
原创 Kafka Producer机制优化-提高发送消息可靠性
名称解释:Broker:负责消息的存储和转发,也可以叫消息中介节点 Topic:每种消息的分类叫做主题(Topic)。 Partition:每一个Topic被切分为多个Partitions。背景Producer构造Message对象时,传入key参数,当Producer发送Message,会根据key确定目标Partition,当Kafka集群中某个Partition所有存活的节点...
2016-11-18 10:09:44 440
原创 使用maven命令来分析jar包之间的依赖关系
一直有个疑问就是,我在pom文件里面引用了那些配置信息,它是如何找到各自的依赖的,后来发现原来一些jar包的配置信息已经自己在开发的时候就写入了pom信息了,各自的依赖都在maven官方仓库里挂着,这个我们自己不用操心,那既然这样,我们又该从哪里查到这些依赖信息呢,这就需要用maven的命令了,如果你是在myeclipse或者eclipse中集成的maven开发环境,那么看到如下截图,你就明白了...
2016-11-17 09:09:39 237
原创 Maven-关于compile/install和local repository的理解
背景说明:工作的项目是一个多模块Maven工程,平时增量时需要使用命令对关联的模块进行编译,初步检查代码有没有错,但是最近一编译就报一大堆import找不到或者找不到符号的问题,这个问题比较常见,网上一搜也有很多人问。因为最初对Maven没什么概念(其实现在也一样),编译的命令被我从 install 改成了 compile ,因为这样更快一些。。但之前都一直很正常,现在突然就...
2016-11-17 09:03:30 559
原创 聊聊JVM(五)从JVM角度理解线程
这篇说说如何从JVM的角度来理解线程,可以对Java的线程模型有一个更加深入的理解,对GC的一些细节也会理解地更加深刻。本文基于HotSpot的OpenJDK7实现。 我们知道JVM主要是用C++实现的,JVM定义的Thread的类继承结构如下:Class hierarchy - Thread - NamedThread - VMThread - Concurr...
2016-11-17 07:56:14 106
原创 JAX-RS规范-常用注解浅析
一、@Path 若希望一个Java类能够处理REST请求,则这个类必须至少添加一个@Path("/")的annotation; 对于方法,这个annotation是可选的,如果不添加,则继承类的定义。(1)@Path里的值可以是一个复杂的表达式,例如@Path("{id}") ,其中 {id}表达式代码了一个模板参数; 一个模板参数是一个定义在@Path里的...
2016-11-17 07:42:26 99
原创 RESTEasy注解及使用
RESTEasy简介接上一篇《JAX-RS规范的版本.实现.jar对应关系》,我们已经知道RESTEasy是JAX-RS规范的实现,本篇内容告诉我们该怎样去使用它。常用注解RESTEasy以jaxrs-api.jar包为基础对JAX-RS进行实现,该包中包含了JAX-RS规范所声明的注解。注解列表这里我们根据3.0.7.Final这一版本对一些常用注解进行说明,以下是注解列...
2016-11-17 07:24:34 167
原创 Dubbo Jackson序列化使用说明
Jackson序列化提供了对基本数据类型和简单Bean的序列化的支持, 以及对类继承的支持。已经经过测试的数据类型包括:Boolean/booleanLong/longInteger/intDouble/doubleShort/shortFloat/floatByte/bytejava.util.Dateorg.joda.time.DateTime...
2016-11-16 14:18:06 738
原创 dubbox Demo应用简单运行指南
这个简单介绍只是方便大家运行了解dubbo以及rest功能步骤如下:git clone https://github.com/dangdangdotcom/dubbox在checkout出来的dubbox目录执行mvn install -Dmaven.test.skip=true来尝试编译一下dubbo(并将dubbo的jar安装到本地maven库)在checkout出来的d...
2016-11-16 14:17:25 149
原创 在Dubbo中开发REST风格的远程调用(RESTful Remoting)
完善中……本文篇幅较长,因为REST本身涉及面较多。另外,本文参照Spring等的文档风格,不仅仅局限于框架用法的阐述,同时也努力呈现框架的设计理念和优良应用的架构思想。对于想粗略了解dubbo和REST的人,只需浏览 概述 至 标准Java REST API:JAX-RS简介 几节即可。TODO 生成可点击的目录目录概述REST的优点应用场景快速入门...
2016-11-16 14:14:34 96
原创 使用dubbox为dubbo提供REST服务
Dubbo 是阿里多年前开源的一套服务治理框架,在众多互联网企业里应用广泛。当当在dubbo的基础上开发了 dubbox (Dubbo eXtensions),支持REST风格远程调用。本文在 服务治理框架dubbo上手指南 的基础上使用dubbox提供的REST服务。 准备环境首先参考 服务治理框架dubbo上手指南 ,实现自己的dubbo服务。在此基础上,让我们来看看 在Dubbo中...
2016-11-16 14:09:43 559
原创 kafka安装和启动
假设你现在没有Kafka和ZooKeeper环境。Step 1: 下载代码下载0.10.0.0版本并且解压它。> tar -xzf kafka_2.11-0.10.0.0.tgz > cd kafka_2.11-0.10.0.0Step 2: 启动服务运行kafka需要使用Zookeeper,所以你需要先启动Zookeeper,如果你没有Zookeepe...
2016-11-16 14:00:29 188
原创 java -classpath
jar cvf xx.jar ./* Java执行jar包中的class 命令为: java -classpath xxx.jar package.HelloWorld java命令引入jar时可以-cp参数,但时-cp不能用通配符(多个jar时什么烦要一个个写,不能*.jar),面通常的jar都在同一目录,且多于1个。前些日子找到(发现)-Dj...
2016-11-15 15:10:41 70
原创 一些设计上的基本常识
1. API与SPI分离 框架或组件通常有两类客户,一个是使用者,一个是扩展者, API(Application Programming Interface)是给使用者用的, 而SPI(Service Provide Interface)是给扩展者用的, 在设计时,尽量把它们隔离开,而不要混在一起, 也就是说,使用者是看不到扩展者写的实现的, 比如:一个Web框架,它有一个API接口叫Action...
2016-11-14 22:21:51 83
原创 java 实现WebService 以及不同的调用方式
java 实现WebService 以及不同的调用方式webservice: 就是应用程序之间跨语言的调用 wwww.webxml.com.cn 1.xml 2. wsdl: webservice description language web服务描述语言 通过xml格式说明调用的地址方法如何调用,可以看错webservice的说明书 ...
2016-11-14 21:49:16 71
原创 调用第三方提供的webService服务
互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取天气预报数据和查询国内手机号码归属地为例进行说明。 气象中心的管理系统将收集的天气信息并将数据暴露出来(通过WebService Server), 而各大站点的应用就去调用它们得到天气信息并以不同的样式去展示(WebServi...
2016-11-14 21:44:37 77
原创 使用JDK开发WebService
一、WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1、 使用JDK开发(1.6及以上版本) 2、使用CXF框架开发(工作中)二、使用JDK开发WebService2.1、开发WebService服务器端 1、定义一个interface,使用@WebService注解标注接口,使用@WebMethod注解标注...
2016-11-14 21:43:56 74
原创 WebService的相关概念
一、序言 大家或多或少都听过 WebService(Web服务),有一段时间很多计算机期刊、书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成 分。但是不得不承认的是WebService真的是一门新兴和有前途的技术,那么WebService到底是什么?何时应该用? 当前的应用程序开发逐步的呈现了两种迥然不同的倾向:一种是基于浏览器的瘦客户端应用程序,一...
2016-11-14 21:42:46 57
原创 一个对象占用多少字节?
老早之前写过一篇博客,是关于一个Integer对象到底占用多少字节的,现在看来,那篇文章竟然计算错了。这次再去计算,是因为之前写的一篇关于字长的文章里,看到了hotspot jvm里,对象占用空间是8字节对齐的,再加上之前关于字节那文章里带着一点-XX:+UseCompressedOops压缩指针参数的疑问,重新探究了下一个对象到底占用多少字节,以及如何计算它占用空间的方法。主要...
2016-11-13 15:30:33 98
原创 查看java对象在内存中的布局
接着上篇《一个对象占用多少字节?》中遇到的问题: UseCompressOops开启和关闭,对对象头大小是有影响的,开启压缩,对象头是4+8=12byte;关闭压缩,对象头是8+8=16bytes。这个如何观察验证呢? 基于上述事实,通过new A()和new B()占用字节推断,基本类型int在开启、关闭压缩情况下都是占用4个bytes的,这个没有影响。...
2016-11-13 15:26:46 85
原创 一个Java对象到底占多大内存?
最近在读《深入理解Java虚拟机》,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存?在网上搜到了一篇博客讲的非常好:http://yueyemaitian.iteye.com/blog/2033046,里面提供的这个类也非常实用:import java.lang.instrument.Instrumentation;...
2016-11-13 15:25:50 85
原创 一个Java对象到底占用多大内存?
一个Java对象到底占用多大内存? 最近在读《深入理解Java虚拟机》,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存?在网上搜到了一篇博客讲的非常好:http://yueyemaitian.iteye.com/blog/2033046,里面提供的这个类也非常实用:import java.l...
2016-11-12 20:26:21 70
原创 cpu字长、操作系统字长和jvm中各数据类型占用的字节数关系
cpu字长是指cpu同时参与运算的二进制位数,现在主流的pc的机器字长都是64位的。机器字长直接决定着机器可寻址的虚拟空间地址大小。 Java代码 The word size of a computer generally indicates the largest integer it can process in a single instruc...
2016-11-12 15:38:21 526
原创 JVM运行时的数据区 (内存溢出实例)
一、概述运行时数据区是jvm运行时的内存布局,类装载到内存后存放的位置,为执行引擎提供所需指令和数据。运行时数据区包括:堆、栈、方法区、本地方法栈、pc计数器。接下来会详细介绍各个部分,并介绍直接内存访问和方法区中的常量池,另外对于每个区域可能发生的内存异常用demo做讲解。二、详细介绍各部分1、堆分配运行时产生的对象分配在堆中,但是并不是一定就分配在堆中,随着运行时编译器...
2016-11-12 15:36:38 101
原创 synchronized 不公平锁
import java.util.ArrayList;import java.util.List;/* * 这段代码大多数情况下运行正常,但是某些情况下会出问题。什么时候会出现什么问题?如何修正? * * notify时如果入口区也有等待线程,这时需要等待区和入口区线程竞争获得锁。 * synchronized是不公平锁 */public class My...
2016-11-12 13:33:44 2063
原创 BitSet的源码研究
这几天看Bloom Filter,因为在java中,并不能像C/C++一样直接操纵bit级别的数据,所以只能另想办法替代:1)使用整数数组来替代;2)使用BitSet;BitSet实际是由“二进制位”构成的一个Vector。如果希望高效率地保存大量“开-关”信息,就应使用BitSet。它只有从尺寸的角度看才有意义;如果希望的高效率的访问,那么它的速度会比使用一些固有类型的数组慢一些。...
2016-11-12 12:20:59 103
原创 让eclipse变得快点,取消validation
1.关掉不必要的validation选择打开的项目点击右键,选 properties - Builders,在右边只对java Builder选中,其它的不要选。 2.取消自动 validation IT人乐园(第一步取消validation后,这步已经失效) 在eclipse的窗口,选 windows - perferences - validation,除了Manua...
2016-11-07 14:42:11 91
原创 Eclipse使用Git图解教程
打开Eclipse,以此点击菜单Help——Install New Software…, 此时将弹出Install对话框,如下图所示: 点击Add按钮,此时将弹出Add Repository对话框,如下图所示: 在其中输入Git插件的地址http://download.eclipse.org/egit/updates/,并输入插件相应的名字,点击OK按钮,此时Eclips...
2016-11-07 14:08:46 170
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人