
Java基础
文章平均质量分 72
墨染百城
目前专注于数据分析、大数据计算方面的学习
展开
-
自定义RPC框架实现计划
自定义的RPC框架就叫Mrpc吧,然后分三大步实现整个框架。时间是2天。Step1 用几个小Demo程序分别实现框架的各种功能。Step2 在一个工程中利用之前的Demo小程序实现整个框架的功能,包括客户程序、和框架Step3 把框架划分成几个项目,使用Maven管理依赖,打成可用的Jar包文档什么的就先算了。。。Step1 功能细分demo1 对象与byte[]的相互转换,可用Proto原创 2017-02-04 21:30:47 · 516 阅读 · 0 评论 -
Java同步关键字
Java同步关键字synchronized如果代码中有一段代码被synchronized代码块包含起来了,那么线程中的run()方法执行到这段代码时,其他线程不能执行这段代码。用一段代码同时只能由一个线程执行。samplepackage com.mrbcy.bigdata.basic.thread.testthread;public class MySynchronized { public原创 2017-01-31 14:34:38 · 1048 阅读 · 0 评论 -
JMS简介及ActiveMQ使用
JMSJMS即Java消息服务(Java Message Service)是一套规范,用于在分布式系统中发送消息。体系架构系统一般包含下列的元素:JMS提供者provider:连接面向消息中间件的,JMS接口的一个实现。提供者可以是Java平台的JMS实现,也可以是非Java平台的面向消息中间件的适配器。JMS客户:生产或消费基于消息的Java的应用程序或对象。生产者+消费者JMS生产者:创建原创 2017-02-01 13:30:27 · 349 阅读 · 0 评论 -
【JVM基础】参数&工具
JVM参数列表用法: java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0-Xmx3550m:最大堆内存为3550M。-Xms3550m:初始堆内存为3550m。 此值可以设置与-Xmx相同,以避免每原创 2017-02-15 13:14:36 · 375 阅读 · 0 评论 -
Java反射常用API
Java反射概述Java通过反射技术可以动态的创建类的实例并可以拿到类的定义、方法、属性等,从而可以实现非常灵活的功能。Java反射常用API直接上代码。MyReflect.javapackage com.mrbcy.bigdata.basic.reflect;import java.lang.reflect.Constructor;import java.lang.reflect.Field;原创 2017-02-01 20:22:45 · 426 阅读 · 0 评论 -
Java动态代理初探
动态代理概述想要说清动态代理是什么,首先我们聊聊代理模式。代理模式代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 按照代理的创原创 2017-02-01 21:32:02 · 410 阅读 · 0 评论 -
java中volatile关键字的含义
文章转自 http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关转载 2017-02-02 00:45:09 · 342 阅读 · 0 评论 -
netty简介及使用
netty简介Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。作为当前最流行的NIO框架,Netty在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,一些业界著名的开源组件原创 2017-02-02 18:23:42 · 790 阅读 · 0 评论 -
Java nio简介及使用示例
同步-阻塞io的缺点之前的socket实现rpc中我们使用了类似下面的代码来从服务端获取客户端的输入:while(true){ line = br.readLine(); if(line.equals("goodbye")){ break; } // handle business}这种的处理明显是有些问题的。如果因为某些原因如突然断电等原因导致客原创 2017-02-02 01:10:41 · 541 阅读 · 0 评论 -
Spring框架的配置
Spring的核心功能IOCAOP这里我们只简单使用Spring的IOC技术。Spring 4.3.6的配置在Spring官网(http://projects.spring.io/spring-framework/#quick-start)上我没找到Spring的下载地址。现在官方推荐用maven来配置Spring了。因为目前还没有在项目里面用过maven,就先用maven把Spring下载下原创 2017-02-02 22:53:47 · 379 阅读 · 0 评论 -
Java自定义注解
当某个类标注了我们的自定义注解以后,可以通过Spring的context获得标注了我们自定义注解的对象。先来定义一个注解。RpcService.javapackage com.mrbcy.bigdata.basic.spring.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retent原创 2017-02-03 00:40:48 · 356 阅读 · 0 评论 -
使用Spring获得包含自定义注解的对象
直接上代码比较容易理解。RpcService.javapackage com.mrbcy.bigdata.basic.spring.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;原创 2017-02-03 00:50:35 · 1463 阅读 · 0 评论 -
使用Maven管理Java项目中的依赖
之前的博客里说以后学习在项目中使用Maven,说干就干。MyEclipse集成Maven可以参见http://huihai.iteye.com/blog/1993972,这里不再赘述。创建Maven项目过程如下:创建Maven项目填写项目相关信息填写项目名称、包名、打包类型项目创建成功的目录列表使用添加Spring框架的依赖项修改pom.xml文件,添加Spring依赖保存后,MyEclips原创 2017-02-03 01:43:12 · 582 阅读 · 0 评论 -
Java并发包中的线程池的种类和特性介绍
Java并发包中的线程池的种类和特性介绍Java并发包提供了包括原子量、并发集合、同步器、可重入锁、线程池等强大工具。这里我们来学习一下线程池的种类和特性介绍。线程池介绍如果给每项任务都分配一个线程,当任务特别多的时候,可能会超出系统承载能力。而且线程的创建和销毁是非常耗费资源的操作。如果我们在系统启动时就维持几个固定的线程,如果有新的任务到来就分配这些线程来执行操作,当操作完成后继续等待新的任务到原创 2017-01-31 19:59:37 · 738 阅读 · 0 评论 -
Java中concurrent包中线程池的使用
Java中concurrent包中线程池的使用Sample1 通过Runable提交任务一个Runable就是一个任务。ThreadPoolWithRunable.javapackage com.mrbcy.bigdata.basic.thread.pool;import java.util.concurrent.ExecutorService;import java.util.concurren原创 2017-01-31 23:13:23 · 548 阅读 · 0 评论 -
BlockingQueue的功能和使用
使用synchronized时,哪个线程拿到锁时不可预料的,BlockingQueue可以实现线程按顺序拿到锁。BlockingQueue的主要API主要的方法是:put、take一对阻塞存取;add、poll一对非阻塞存取。插入:add(anObject):把anObject加到BlockingQueue里,即如果BlockingQueue可以容纳,则返回true,否则抛出异常,不好offer原创 2017-01-31 23:42:44 · 2054 阅读 · 0 评论 -
自定义RPC框架实现计划
自定义的RPC框架就叫Mrpc吧,然后分三大步实现整个框架。时间是2天。Step1 用几个小Demo程序分别实现框架的各种功能。Step2 在一个工程中利用之前的Demo小程序实现整个框架的功能,包括客户程序、和框架Step3 把框架划分成几个项目,使用Maven管理依赖,打成可用的Jar包文档什么的就先算了。。。Step1 功能细分demo1 对象与byte[]的相互转换,可用Proto原创 2017-02-04 21:32:02 · 304 阅读 · 0 评论 -
自定义RPC框架实现计划
自定义的RPC框架就叫Mrpc吧,然后分三大步实现整个框架。时间是2天。Step1 用几个小Demo程序分别实现框架的各种功能。Step2 在一个工程中利用之前的Demo小程序实现整个框架的功能,包括客户程序、和框架Step3 把框架划分成几个项目,使用Maven管理依赖,打成可用的Jar包文档什么的就先算了。。。Step1 功能细分demo1 对象与byte[]的相互转换,可用Proto原创 2017-02-04 21:32:07 · 336 阅读 · 0 评论 -
【Mrpc】 Demo1 对象与byte[]的相互转换
实现rpc框架时服务端与客户端之间的通讯发送的数据都是二进制数据,但实际上它们传送的内容都是一个个的对象。因此需要一个工具类来实现对象与byte[]的相互转换代码资源已上传到http://download.youkuaiyun.com/detail/mrbcy/9747217所用技术我使用了protostuff框架来辅助进行转换操作。工具类代码如下:ProtostuffUtil.javapackage tech原创 2017-02-05 00:30:04 · 484 阅读 · 0 评论 -
【Mrpc】Demo2 基于Zookeeper的服务器感知及负载均衡
由于服务器经常会维护,把服务实现服务端的地址直接写在客户端(包括配置文件里)都是不太好的。比较好的办法是服务端启动的时候把自己的地址注册到ZooKeeper集群中,然后客户端启动时即可获得所有服务器列表,并选择一个合适的服务器为自己提供服务。这样解决了服务端地址的获取问题,同时也解决了服务端的负载均衡问题。来看一下相应的代码。项目源码已经上传到http://download.youkuaiyun.com/det原创 2017-02-05 19:57:06 · 301 阅读 · 0 评论 -
【Mrpc】Demo3 基于netty的服务器和客户端。
Demo3实现如下功能,客户端发送一个Request对象(包含id,方法名,方法参数列表和调用参数列表)到服务端,服务端解析后调用客户端指定的方法,并返回一个Response对象(包含id,是否异常,异常,返回值)。客户端和服务端均基于netty实现。代码已上传到http://download.youkuaiyun.com/detail/mrbcy/9747693要点解析netty这个真的很重要,具体的参考官方原创 2017-02-06 03:00:49 · 871 阅读 · 0 评论 -
【Mrpc】Demo4 客户端动态代理的创建
本来第4个demo应该是Spring框架获取自定义注解的类的实例对象列表。但是这篇文章已经写过,不再赘述,可以参考http://blog.youkuaiyun.com/mrbcy/article/details/54839463因为接口的实现是在服务端的,因此客户端没有办法直接拿到一个实现类的对象的,因此必须由框架提供一个动态代理。这个动态代理截获客户的调用请求,然后向服务器发起调用,最后将服务器的响应发回给客原创 2017-02-06 14:34:41 · 358 阅读 · 0 评论 -
学习TDD(2)--实例:ProtoStuffUtil类的测试
上篇讲了TDD的步骤和各种好处,俗话说的好,站在岸上是学不会游泳的。所以我们还是要拿个例子出来,实践一下TDD。因为是第一次尝试,我想还是选个简单的例子,之前写的那个ProtoStuffUtil类就很不错。这个类主要负责对象跟byte[]之间的相互转换。可以参考http://blog.youkuaiyun.com/mrbcy/article/details/54869113。其实这个类已经写好了,不太符合TDD原创 2017-02-07 01:41:31 · 448 阅读 · 0 评论 -
【JVM基础】内存管理
本篇主要了解一下JVM对内存的管理。内存结构方法区:也称为永久区。类的定义,常量,静态变量,即时编译器编译后的代码等存放在该区域堆:主要是对象和数组数据。各线程共享资源。栈: 程序运行时有一个线程在工作。就是调用程序的方法。方法中可能产生一些局部变量。对对象的引用存放在栈中。 程序运行时可能有多个线程,因此它们的变量不能放在一起,必须分开存放。因此栈空间是线程私有的。 栈帧:存储在用户栈原创 2017-02-14 14:50:13 · 285 阅读 · 0 评论 -
Java中线程实现的两种方法
Java中线程实现的两种方法进程与线程 进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位。每一个进程都有一个自己的地址空间,即进程空间或(虚空间)。进程空间的大小 只与处理机的位数有关,一个 16 位长处理机的进程空间大小为 216 ,而 32 位处理机的进程空间大小为 232 。进程至少有 5 种基本状态,它们是:初始态,执行态,等待状态原创 2017-01-31 12:54:41 · 609 阅读 · 0 评论 -
java并发编程的一些总结
1.不应用线程池的缺点有些开发者图省事,遇到需要多线程处理的地方,直接new Thread(…).start(),对于一般场景是没问题的,但如果是在并发请求很高的情况下,就会有些隐患:新建线程的开销。线程虽然比进程要轻量许多,但对于JVM来说,新建一个线程的代价还是挺大的,决不同于新建一个对象资源消耗量。没有一个池来限制线程的数量,会导致线程的数量直接取决于应用的并发量,这样有潜在的线程数据巨大原创 2017-02-01 00:57:05 · 335 阅读 · 0 评论 -
Java利用Socket进行远程过程调用
需求概述服务器上有一个getData()方法,客户端想调用服务器的getData()方法,此时必须通过RPC来进行调用了。WebService太冗余,为了提高性能,决定直接用socket进行实现。实现代码(Socket通讯模板代码)BusinessServer.javapackage com.mrbcy.bigdata.basic.socket;import java.io.IOException;原创 2017-02-01 00:28:52 · 879 阅读 · 0 评论 -
自定义RPC框架思路整理
RPC框架数据流程RPC框架服务端启动原理要使用我们自定义的RPC框架,服务端必须要做下面两件事:在业务接口的实现类上面添加@RPCService注解在Spring框架的applicationContext.xml文件中配置框架提供的bean<bean id="rpcServer" class="cn.itcast.rpc.server.RpcServer"> <constructor-原创 2017-02-04 00:26:20 · 1930 阅读 · 0 评论