- 博客(81)
- 资源 (13)
- 收藏
- 关注
原创 PLSQL安装流程备忘
去ORACLE官网下载PLSQL安装包,如plsqldev1208x64(具体根据个人主机操作系统位数)。需要注册账号才能下载。 去Oracle官网下载oracle客户端压缩包instantclient_12_1(注意,一定要下载简易版,其他的不行,会老是报解析tnsname.ora中的连接串错误的异常,十分坑),解压,修改NETWORK\ADMIN 目录下的tnsn...
2018-08-06 20:16:34
318
原创 Eclipse切换JDK,JRE版本步骤总结
切换整个eclipse环境的版本1. 首先得明白,所谓的切换版本是分成两大块,JDK和JRE,这两者要切换一致2. Window-> Preferences—>Java—>Compiler右侧面板选择想要的版本3. Window-> Preferences—>Java—>Installed JREs右侧面板选择想要的版本--上面可以看到,两个步骤就可以
2017-12-26 17:17:07
5415
原创 非web java项目部署到linux总结(非打包成jar,配置文件可以随时修改)
1. 首先要在eclipse中编译成功,并且运行没有问题。2. 上传项目目录下的子目录,可以根据需要上传,但是bin和lib目录是必不可少的。Lib目录里应包含所有用到的依赖外包。3. 编辑运行脚步,实际上是完成eclipse的工作。例子如下:start-coms.sh:#!/usr/bin/envshexportLANG=UTF-8HOME_
2017-12-20 17:15:07
1398
原创 Dubbo动态改变端口配置
对于一个dubbo服务程序,如果需要在一台机上启动多个进程,就需要每个进程占用不同的端口,对于dubbo而言,是不能在代码层面改变配置信息的,所以需要在JVM参数中指定不同的端口号:java -Ddubbo.protocol.port=20882 xxx.jar
2017-11-29 14:59:30
5874
原创 Dubbo调度机制解析(cluster扩展或者路由扩展)
1. 更详细的duboo的集群路由和负载均衡机制分析首先进入XXClusterInvoker类:invoke(final Invocation invocation)-> Directory.list(invocation)进入XXDirectory(RegistryDirectory)类:list(invocation)->doList(Invocation invoc
2017-11-13 17:12:03
1405
原创 Dubbo调度机制解析(LoadBalance扩展)
由于项目需求特殊,需要在dubbo中实现一种能指定远程地址的分发机制,刚开始想在直连的配置上解决,后来发现对于已经加载了dubbo xml配置的spring容器中是无法在代码层面进行有效的修改的(因为貌似会重新加载xml文件中原有的配置记录),另一方面,这种做法会产生并发冲突的隐患。后来经同事提醒,使用了dubbo留出来的扩展点的方法实现了这个功能,也就是实现了AbstractLoadBalanc
2017-11-03 17:00:20
8033
2
原创 Hbase API使用总结
举个例子:Hbase的java的API接口相对比较简单,举个创建表的例子来看:public class HbaseApiTest { staticConfiguration conf = null; static{ conf = HBaseConfiguration.create(); conf.set("hbase
2017-10-27 16:54:05
794
原创 Hbase初步学习总结
Hbase单机版安装对于单机版而言,hbase的安装非常简单1. 下载hbase压缩包,比如hbase-1.3.1-bin.tar.gz,然后解压2. 配置环境变量JAVA_HOME(如果机器上以及配置该变量,则直接使用)3. 然后去conf目录下修改配置文件hbase-site.xml,增加下面内容: hbase.rootdir f
2017-10-24 17:25:09
424
原创 Java NIO之文件监控机制
由于业务需要在主备切换时读取程序返回值文件,这样一来就涉及到了文件监控读取的问题,比较low的做法是程序备进程变主进程后每隔一段时间去轮询相关的文件,并读取里面的返回值。后来突然想到了socket相关有个NIO机制,于是觉得socket和文件对操作系统其实都是外设,应该有相关的NIO机制。后来发现java单独提供了一个很好用的NIO相关机制。例子比较简单,直接分析:WatchService
2017-09-28 11:27:11
976
原创 Dubbo配置以及使用总结2
1. 消费方调用所有服务提供方的配置<dubbo:serviceinterface="operatingPlatform.DispatchServer" ref="DispatchServerImpl"executes="20"cluster="broadcast"/>--注意红色部分,这个配置说明是广播模式调用服务提供方,在这种配置情况下,所有注册到注册中心的服务提供方都会收到客户
2017-09-26 17:21:14
454
原创 Zookeeper的API调用的同步和异步机制以及watcher机制总结
同步和异步调用对于zookeeper的所有API调用都提供了正常的同步调用和异步调用两种类型的调用接口,比如zookeeper创建某个目录节点的接口为例:同步调用接口: String create(final Stringpath, bytedata[], List acl, CreateMode createMode)异步调用接口: voi
2017-09-25 15:53:19
2212
原创 日志控制log4j的使用总结
Log4j是个广泛使用的日志控制工具,并且使用起来相对方便,之前一直搞不大清楚如何使用。这两天稍微花时间简单使用和测试了一下。把使用过程和细节进行总结,以便以后忘记的时候进行翻阅。1.引入jar包首先准备引入log4j-1.2.16.jar包,还有说法说要同时引入commons-logging-1.1.1.jar包,姑且就两个包都引入。2.编写log4j.properties配置文件
2017-09-21 16:38:22
518
原创 Dubbo配置以及使用总结
一直被dubbo的spring相关配置搞得比较晕,dubbo作为淘宝自己搞得东东,也没有太多像样的成系统的书籍资料,所以相关知识显得比较零碎。趁机会把相关知识尤其是配置知识整理记录一下,以供记忆。Application层的配置--应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者,这一层目前只知道name字段的配置,表示应用的名字,服务端和客户端名字不同Registry层
2017-08-23 16:45:27
551
原创 Zookeeper客户端源码分析
1. 从ZooKeeper构造方法开始: public ZooKeeper(String connectString, intsessionTimeout, Watcher watcher, long sessionId, byte[]sessionPasswd, boolean canBeReadOnly) throws IOExceptio
2017-08-08 18:37:14
625
原创 Kafka的安装和使用总结
Kafak的单实例安装1. 下载安装http://apache.mirror.colo-serv.net/kafka/这个网址有各个版本的kafka下载解压 tar -xzf kafka_2.11-0.11.0.0.tgz进去bin目录下执行bin/zookeeper-server-start.shconfig/zookeeper.properties bin/k
2017-08-03 18:53:54
746
原创 Redis cluster 集群搭建以及API访问
1. 修改配置文件拷贝原来非集群的配置文件并进行修改如cluster_redis_6379.conf,其他配置可以保持不变,只要把以下三项配置项去掉注释#就行cluster-enabled yescluster-config-file nodes-6379.conf //该文件会生成在数据持久化文件目录下cluster-node-timeou
2017-08-01 11:07:56
1652
原创 Redis主从集群以及sentinel集群安装和配置总结
1. 单机单实例或多实例安装单实例的安装步骤很简单(1)首先去redis官网上下载最新的稳定版本(可以直接去redis中文官网http://www.redis.cn/download.html)wget http://download.redis.io/releases/redis-4.0.1.tar.gz(2)下载的是压缩包,解压tar xzf redis-4.0.1
2017-07-29 10:58:04
598
原创 如何简单地实现易用的ShardedJedisSentinelPool
Jedis包中有个很恶心的问题,那就是包里面有支持分片的ShardeJedis客户端类,也有支持哨兵的池类JedisSentinelPool,就是没有既支持分片又支持哨兵的池类,所以必须自己自定义一个ShardedJedisSentinelPool,定义这个类,在网上有个很受欢迎的版本,是继承了Pool类后重写相关的池操作的方法,个人觉得这种方案太麻烦,而且据反馈也有很多考虑不全面的细节,造成bu
2017-07-27 15:34:05
3796
原创 从字节码角度分析java泛型数组的问题
关于java的泛型数组这个问题,之前就有遇到过,不过当时以为是自己代码语法错误的问题,现在系统地对java的基础知识进行深入总结,才发现这个问题某种程度是和泛型的类型擦除机制有关,其实我觉得这个解释有它的道路但是还是比较勉强。下面我们从字节码角度试图去分析一下java某种意义上是不支持泛型数组原因比如源码:List[]list3 = new ArrayList[10];//错误定义格式
2017-07-24 15:50:46
660
原创 通过字节码扒一扒java编译器瞒着我们做了什么(3)
1. 数组和二维数组在字节码中的实现源码: int[] list1 = {1,2};int[][] list2 = {{1,2},{3,4}};字节码: int[] list1; descriptor: [I flags: int[][] list2; descriptor: [[Iflags:
2017-07-24 11:20:39
438
原创 从字节码角度分析泛型类,泛型方法,泛型接口的实现机制(类型擦除)
在java中泛型本质上是个语法糖,跟C++不一样,java根本不会创建泛型类,一切都只不过是编译器通过类型擦除机制实现的障眼法而已,比如源码:public classChildTest extends test { Ta = (T) "hello world"; public void fun(T t){ System.out.pri
2017-07-23 21:35:12
697
原创 从字节码角度分析接口中的成员域
在java中接口是可以有成员变量的,比如下面源码:public interfaceTestInterface { int a = 999; Stringstr="hello world";} 字节码: Last modified 2017-7-23; size 213 bytes MD5checksum 60dbee19d1d48536e214
2017-07-23 16:36:08
346
原创 通过字节码深入分析java的枚举类型enum
1. Java中的枚举究竟是什么鬼?如果从C++转java的话,会发现一个现象那就是在java中的枚举跟C++区别非常大,甚至可以说除了名字一样外,其他实现等都是非常不同的,在C++枚举更像个常数,而java的枚举更靠近正常的普通成员内部类。让我们从字节码角度看看java中的enum究竟是什么东西吧源码: public enum book{ BOO
2017-07-23 14:49:51
761
原创 通过字节码扒一扒java编译器瞒着我们做了什么(2)
1. Int[] a={}和int[] a=newint[]{}有何区别?定义数组时经常会产生一些以为,比如说上面两种数组定义格式是否在就JVM中的实现不同,是否前者没有new所以不会在堆中分配内存?如果不了解编译器私自做了什么,很容易被这个问题困扰住,那我们从编译后的字节码中看看这两种定义形式的实现吧。其实这两种定义的字节码是一样的。比如int[] list = {888,777,
2017-07-22 20:00:42
406
原创 从字节码角度深入分析内部类(局部内部类,成员内部类,静态内部类,匿名内部类)
1. 局部内部类源码:public void subscribeQueue(Jedis jedis,String[] channels) { // TODO Auto-generated method stub class MyJedisPubSub extendsJedisPubSub{
2017-07-22 16:02:50
721
原创 通过字节码扒一扒java编译器瞒着我们做了什么(1)
1. Foreach和泛型语法糖Map map = newHashMap();for(Entry iter:test.map.entrySet()){ Stringstr = iter.getValue(); }--看看字节码是什么内容: 8:aload_1 9: getfie
2017-07-20 17:38:03
429
原创 Java字节码(class文件)解析
Java编译后生成的.class字节码文件里面的内容究竟是什么呢?一直比较困扰,现在终于看到了庐山真面目,比如对于test.class使用javap -p -verbose test可以查看生成的字节码里面的内容。用一个简单的test类来分析字节码里面的内容。test.java:/** * * @author :zhengrf1* @date 创建时间:2017年7月19日 上
2017-07-19 17:26:27
670
原创 jedis API接口批量处理包装(事务,管道,分布式锁,lua脚本,发布订阅)
import java.util.List;import java.util.Map;import java.util.Set;import redis.clients.jedis.Jedis;/** * * @author : zhengrf1* @date 创建时间:2017年7月11日 下午4:04:58 * @version 1.0 */
2017-07-12 17:13:55
674
原创 Java加载类(Class)文件过程
其实对于任何编程语言而言,编译和链接都是必不可少的环节,对于java而言编译这环节比较简单,就是按照JVM指定的规范生成字节码文件(Class文件),因为字节码是JVM能认识的,并且会把这些字节码翻译成本地机器的机器指令。至于链接这块,Java作为动态动态编译编程语言,链接这块相对静态链接语言而言要复杂很多。某种程度可以说java的Class文件加载处理的过程其实就是为了完成链接这个目标。链接这个
2017-07-10 19:29:39
546
原创 Java与C++差异总结(1)
最近的工作是把几份C++代码翻译成java,不搞不知道,一搞吓一跳,真的很麻烦,C++和java的语法和其他细节差异太大了。下面就把遇到的一些差异整理总结一下:1. 一维数组的定义:C++:分为静态数组和动态数组,其中静态数组 int a[5],或int a[2]={1,2} 动态数组 int * a= new int[5],或 int * a = new
2017-07-07 19:15:11
352
原创 JNI转换通俗易懂的总结(Java调用C++篇)
相对C++调用java而言,使用JNI实现Java调用C++相对比较简单点,因为不用自己启动和管理一个JVM。最简单的流程:1. 编写一份简单的HelloWorld.javaclass HelloWorld {public native void displayHelloWorld(); static {System.loadLibrary("hello");
2017-06-29 17:12:16
527
原创 JNI转换通俗易懂的总结(C++调用java篇)
主要的内容分成以下三部分:1. 启动java虚拟机(JVM),C++和java接口的交互,实际上就是C++和JVM的交互。例子如下:JavaVMOption options[3];JNIEnv *env;JavaVM *jvm;JavaVMInitArgs vm_args;long status;char normalOpt[] ="-Djava.clas
2017-06-28 15:32:55
571
原创 HDFS初步学习总结
网上关于hdfs的一些初步总结不大好找,搞得初步了解hdfs花了比较多时间。现在准备写点初步学习总结以便能加深记忆,顺便为网上多添点资料。以下就从5大方面进行初步总结:1. 整体框架:总体来说,hdfs的大体框架是比较简单的,作为分布式文件系统,相比普通的文件系统有很多类似之处。主要分成两大类型节点,一个是NameNode,另一个是DataNode,前者承担着文件系统的元信息
2017-06-26 17:36:06
490
原创 kafka消息队列运维工具和相关安装目录文件总结
kafka自带维护脚本工具总结:topic管理脚本:kafka-topics.sh(包括topic的创建,修改,删除,查询)创建topic: sh kafka-topics.sh –zookeeper 132.121.121.4:2181 –create –topictest1 –partitions 4 --replication-factor 2列出所有topic: sh kafk
2017-05-08 18:33:22
415
原创 Kafka服务端异步刷盘性能测试
前置条件:每条话单大概0.7K写客户端单线程props.put("acks","all");props.put("retries", 0);props.put("batch.size", 16384);props.put("linger.ms", 100);props.put("buffer.memory", 33554432);props.put("key.ser
2017-04-28 11:14:44
2124
原创 Kafka消息队列原理总结
最近在测试kafka的读写性能,所以借这个机会了解了kafka的一些设计原理,既然作为分布式系统,我们还是按照分布式的套路进行分析。 Kafka的逻辑数据模型:生产者发送数据给服务端时,构造的是ProducerRecord(String topic, Integer key,String value)对象并发送,从这个构造函数可以看到,kafka的表面逻辑数据模型是key-value。
2017-04-26 16:49:38
10687
原创 Java基本类型的一些总结
Java基本类型的长度以及和C++的对比Java(字节数) C++(字节数)Byte 1 C++没有字节类型,可以用unsigned char代替Short 2
2017-03-24 15:33:07
407
原创 ReenTrantLock可重入锁(和synchronized的区别)总结
ReenTrantLock可重入锁(和synchronized的区别)总结可重入性:从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁。 锁的实现:Synchronized是依赖于JVM实现的
2017-03-23 11:31:29
50837
5
原创 Java锁性能提高(锁升级)机制总结
锁的使用很难避免,如何尽量提高锁的性能就显得比较重要了锁偏向所谓的偏向锁是指在对象实例的Mark Word(说白了就是对象内存中的开头几个字节保留的信息,如果把一个对象序列化后明显可以看见开头的这些信息),为了在线程竞争不激烈的情况下,减少加锁及解锁的性能损耗(轻量级锁涉及多次CAS操作)在Mark Word中有保存这上次使用这个对象锁的线程ID信息,如果这个线程再次请求这个对象锁,那么只
2017-03-21 11:38:37
7560
10
原创 java中File类常用API总结
public class FileTest {/** * * @author : zhengrf1* @date 创建时间:2017年3月15日 下午5:01:09 */public static void main(String[] args) {// TODO Auto-generated method stubFile file = new File(
2017-03-15 18:08:27
716
flex写的计算器
2011-09-21
java画板 比较简单的画板
2010-10-16
java 写的吹泡泡 java界面小游戏
2010-10-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人