E_K_in的博客

私信 关注
E_k_in
码龄5年
  • 175,732
    被访问量
  • 102
    原创文章
  • 47,043
    作者排名
  • 24
    粉丝数量
  • 于 2016-03-16 加入CSDN
获得成就
  • 获得37次点赞
  • 内容获得16次评论
  • 获得87次收藏
荣誉勋章
TA的专栏
  • JAVA
    57篇
  • Design Patterns
    10篇
  • JAVA_基础知识
    6篇
  • JAVA_其他技术
    2篇
  • JAVA_三方工具
    2篇
  • Mysql
  • 其他
    4篇
  • Guava
    4篇
  • Spring
    21篇
  • dubbo
    5篇
  • 微服务
    7篇
  • RocketMq
    3篇
  • 分布式
    1篇
  • 大数据
    4篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

How Java volatile prevent instruction reordering

Two roles voliate keywords1, to ensure the visibility of variables: when a modified volatile keyword variable is modified when a thread, other threads can instantly get the results after revision. When a thread writes data to be modified volatile keywor
转载
12阅读
0评论
0点赞
发布博客于 3 月前

jvm:ObjectMonitor源码

synchronized的使用 synchronized关键字是Java中解决并发问题的一种常用方法,也是最简单的一种方法,其作用有三个:(1)互斥性:确保线程互斥的访问同步代码(2)可见性:保证共享变量的修改能够及时可见(3)有序性:有效解决重排序问题,其用法也有三个: 修饰实例方法修饰静态方法修饰代码块  修饰实例方法 public class Thread1 implements Runn...
转载
25阅读
0评论
0点赞
发布博客于 3 月前

stack guard page for java

jvm 在创建thread的时候会create_stack_guard_pages()来保护我们的线程栈不能超过指定的大小,如果不对栈做限制的话,一旦其超过了为其分配的大小后,将会覆盖后面内存的数据将会产生意想不到的结果,所以jvm使用了stack_guard_pages来做限制。看图吧:...
原创
73阅读
0评论
0点赞
发布博客于 3 月前

如何在JVM内存中确认class文件的常量池?

常量池的描述在java虚拟机规范的4.4节(jvms8)中有很详细的描述,这里就不再描述常量池是什么?其在class文件中是如何表示的?。今天我们主要是看看 hotspotVM 中,如何在内存中查看常量池内容。我们以java.io.FileInputStream.java为例看看它的在hotspotVM中的常量池内容是什么。首先我们通过javap 看看class文件中常量池的表示:然后使用HSDB来看看hotspotVM中的相关内容通过HSDB 我们在hotspotVM内存.
原创
66阅读
0评论
0点赞
发布博客于 6 月前

Integer == int 和 Integer == Integer 的区别

首先来写一段代码Integer a = null; Integer b = 3; boolean r1 = a == 24; boolean r2 = a == b;执行结果是:boolean r1 = a == 24;将会产生运行时异常。boolean r2 = a == b; r2 为false为什么呢?我们看看编译代码(javac 前端编译器):从编译代码中我们可以看到一个Integer和一个 int比较时 javac编译器
原创
94阅读
0评论
0点赞
发布博客于 6 月前

如何调试hospotVM查找死锁

说明:这篇文章并不会详细说明hospotVM查找死锁的算法,只是介绍一种如何了解hospotVM查找死锁的方法。(授人以鱼不如授人以渔)。毕竟每个人的理解层次不一样。环境:先来写一个死锁public class Test { public static void main(String[] a) { final Object o1 = new Object(); final Object o2 = new Object();
原创
78阅读
0评论
0点赞
发布博客于 8 月前

-XX:+UseCompressedOops 与 -XX:-UseCompressedOops

​ 开启(-XX:+UseCompressedOops) 可以压缩指针。 关闭(-XX:-UseCompressedOops) 可以关闭压缩指针。1:关闭(-XX:-UseCompressedOops) 可以关闭压缩指针,对象头16字节(klass pointer 8字节)reference 8字节2:开启(-XX:+UseCompressedOops) 可以压缩指针对象头12...
原创
2352阅读
0评论
1点赞
发布博客于 10 月前

Code Tools: jol

http://openjdk.java.net/projects/code-tools/jol/JOL(Java Object Layout) is the tiny toolbox to analyze object layout schemes in JVMs. These tools are using Unsafe, JVMTI, and Serviceability Agent (...
转载
124阅读
0评论
0点赞
发布博客于 10 月前

HotSpot设计原理与实现:一、初识HotSpot

一、HotSpot内核模块组成和功能框架1、HotSpot内核模块图(1)Prims模块:(2)Service模块:(3)Runtime模块:二、虚拟机生命周期(JVM初始化过程)1、虚拟机生命周期时序图1:Lancher JVM启动器 Lancher是用于启动JVM和应用程序的工具,HotSpot中提供两种Lancher类型:...
转载
159阅读
0评论
0点赞
发布博客于 2 年前

使用jvisualvm定位Full GC频繁的问题

今天性能测试的时候出现一个问题,接口响应时间太长达到了2s。使用JvisualVM定位问题。1:先打开JvisualVM2:找到对应的应用进程(如果需要定位远程应用环境需要远程连接远程)并双击,然后进入Monitor看看CPU和堆内存是否正常,观察发现CPU正常,但是堆内存GC频繁。然后进入 Visual GC查看,发现堆内存Full GC非常频繁,并且Full GC Old区回收的内...
原创
1545阅读
0评论
0点赞
发布博客于 2 年前

JvisualVM分分析CPU波动较大的问题

今天遇到一个问题,在压力测试的时候CPU波动很大。采用JvisualVM工具进行分析。1:先打开JvisualVM2:找到对应的应用进程并双击,然后进入Sampler,在CPU波动的时候点击CPU对CPU进行抽样。注意线上环境千万不要使用Sampler右边的Profiler.3:抽样进行一段时间后(建议3分钟左右就行了,时间越长生成的snapshot越大),点击”stop”,然...
原创
727阅读
0评论
0点赞
发布博客于 2 年前

gitlab+jenkins安装配置

1:首先在jenkins上面安装插件 包括gitlab 和maven的插件2:配置Global Tool Configuration 主要是配置maven git 和jdk3:配置 configure system先在gitlab的某个用户上面新建一个API TOKEN然后添加凭据如果你想把jenkins打成的包通过ssh上传到某个服务器上那么你可以配置一个...
原创
138阅读
0评论
0点赞
发布博客于 2 年前

Google分布式系统三大论文(三)MapReduce: Simplified Data Processing on Large Clusters

原文地址:https://blog.csdn.net/u010359965/article/details/49795213摘要MapReduce是一个编程模型和一个处理和生成大数据集的相关实现。用户指定一个map函数处理一个key-value对来生成一组中间key-value对;指定一个reduce函数合并所有和同一中间key值相联系的中间value值。许多现实世界中的任务以这个模型展现,...
转载
308阅读
0评论
1点赞
发布博客于 2 年前

Google分布式系统三大论文(二)Bigtable: A Distributed Storage System for Structured Data

原文地址:https://blog.csdn.net/u010359965/article/details/49795133摘要Bigtable是一个管理结构化数据的分布式存储系统,它被设计用来处理海量数据:分布在数千台通用服务器上的PB级的数据。Google的很多项目将数据存储在Bigtable中,包括Web索引、Google Earth、Google Finance。这些应用对Bigta...
转载
347阅读
0评论
0点赞
发布博客于 2 年前

Google 分布式系统三大论文(一)The Google File System

原文地址:https://blog.csdn.net/u010359965/article/details/49795047The Google File System中文版摘要我们设计并实现了Google文件系统,一个面向分布式数据密集型应用的、可伸缩的分布式文件系统。虽然运行在廉价的日用硬件设备上,但是它依然了提供容错功能,为大量客户机提供了很高的总体性能。虽然与很多之前的分布...
转载
1185阅读
0评论
0点赞
发布博客于 2 年前

Hadoop集群环境搭建

一:置主机以下配置基于centOS71:修改主机的hostname为master修改 /etc/hostname 文件的内容为 master2: 修改网络配置1:将虚拟机的网路设置为NAT连接:2:进入系统后输入命令“vi /etc/sysconfig/network-scripts/ifcfg-ens33” (可能你的系统配置网络的文件名不叫ifcfg-ens33你可以进...
原创
70阅读
0评论
0点赞
发布博客于 2 年前

RocketMQ消费\生产消息的过程

这几天在看RocketMQ的知识,跟踪了下源码,弄清楚了MQ生产和消费消息的流程,这里记录下MQ消费消息的过程。1:RebalanceService线程构造PullRequest并将request放入pullRequestQueue,而PullRequest的具体信息来源于topicSubscribeInfoTable2:PullRequest放入pullRequestQueue后...
原创
1208阅读
0评论
0点赞
发布博客于 2 年前

集群的概念

以前经常听别人说部署集群的话至少需要3台机器,因为会存在选主的情况。但是有些项目的集群又不需3台可能两台就够了。这是为什么呢?RocketMQ的broker集群为什么可以只有两台节点?答:其实集群分不同的种类,具体的场景不同可能对集群节点数要求不同。比如RocketMQ的集群,你可以只部署两台broker,因为RocketMQ的集群中两个broker节点是对等的,并且两个节点之间不需要任何...
原创
1934阅读
0评论
0点赞
发布博客于 2 年前

redis的三种集群方式

原文地址:https://www.cnblogs.com/51life/p/10233340.htmlredis有三种集群方式:主从复制,哨兵模式和集群。1.主从复制主从复制原理:从服务器连接主服务器,发送SYNC命令; 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 主服务器BGSAVE执行完后,向所有从服务器发...
转载
580阅读
0评论
0点赞
发布博客于 2 年前

Java Socket重要参数讲解

原文地址:http://www.cnblogs.com/ggjucheng/archive/2012/01/06/2314679.htmlSocket参数定义在public interface SocketOptions中TCP_NODELAYSO_BINDADDRSO_REUSEADDRSO_LINGERSO_TIMEOUTSO_SNDBUF/SO_RCVBUFSO_KEEP...
转载
447阅读
0评论
0点赞
发布博客于 2 年前

如何处理GC日志文件过大的情况

Handling large log files produced by long running Java Applicationshttps://bugs.java.com/bugdatabase/view_bug.do?bug_id=6941923This RFE addresses the a problem faced by long running (one or mo...
原创
1757阅读
0评论
0点赞
发布博客于 2 年前

Minor GC和Full GC触发条件

原文地址:https://blog.csdn.net/shi2huang/article/details/80067608在复制原文作者内容前先对Full GC条件做一个补充。执行jmap histo命令也可能会出发Full GC(Heap Inspection Initiated GC)。以及Dump堆内存也会发生GC下图的GC日志有一次Full GC,GC原因是Heap Inspe...
转载
10688阅读
0评论
1点赞
发布博客于 2 年前

使用NMT分析你的java进程到底用了多少内存?

我们分析java程序性能的时候可能会关注我们的进程到底用了多少内存?哪些地方分别用了多少内存呢?jdk提供了一个jcmd的命令工具可以让我们很容易地查询java进程的Native内存使用。(关于Native内存是什么读者可以参考:https://www.ibm.com/developerworks/library/j-nativememory-linux/index.html)NMT介绍可...
原创
1511阅读
0评论
0点赞
发布博客于 2 年前

debug jdk的前端编译器javac

javac主要的功能是将.java文件编译成.class文件,在这个过程中包含3个主要的处理分别为,解析与填充符号表,注解处理,分析与生成字节码。今天主要介绍如何在eclipse中debug javac的源码。:1:首先我们需要下载javac的源码,我这里下载的是openJdk8u:http://hg.openjdk.java.net/jdk8u/jdk8u/langtools/2:源...
原创
360阅读
0评论
0点赞
发布博客于 2 年前

How to Handle Java Finalization's Memory-Retention Issues

原文地址:http://www.devx.com/Java/Article/30192Finalization allows you to perform postmortem cleanup on Java objects, but it can delay the reclamation of resources, even if you do not use it explicitly....
转载
84阅读
0评论
0点赞
发布博客于 2 年前

JVM各种内存溢出是否产生dump

原文地址:https://blog.csdn.net/stevendbaguo/article/details/51366181对于java的内存溢出,如果配置-XX:+HeapDumpOnOutOfMemoryError,很明确的知道堆内存溢出时会生成dump文件。但永久代内存溢出不明确是否会生成,今天来做一个实验:永久代内存溢出,有dump文件。JVM的参数是-XX:PermSize=...
转载
354阅读
0评论
0点赞
发布博客于 2 年前

Efficient data transfer through zero copy

原文地址:https://developer.ibm.com/articles/j-zerocopy/Many Web applications serve a significant amount of static content, which amounts to reading data off of a disk and writing the exact same data bac...
转载
130阅读
0评论
0点赞
发布博客于 2 年前

A recap of native memory

原文地址:https://www.ibm.com/developerworks/library/j-nativememory-linux/index.htmlThe Java heap, where every Java object is allocated, is the area of memory you're most intimately connected with when w...
转载
286阅读
0评论
0点赞
发布博客于 2 年前

JVM的Heap Memory和Native Memory

原文地址:https://blog.csdn.net/u013721793/article/details/51204001JVM管理的内存可以总体划分为两部分:Heap Memory和Native Memory。前者我们比较熟悉,是供Java应用程序使用的;后者也称为C-Heap,是供JVM自身进程使用的。Heap Memory及其内部各组成的大小可以通过JVM的一系列命令行参数来控制,在此...
转载
152阅读
0评论
0点赞
发布博客于 2 年前

Spring启动步骤

经过无数次debug Spring源码,对spring整体启动过程有了大致了解。因为spring体系太过复杂,我也没用能力把spring讲的面面俱到并且没用错误。要想掌握spring的细节,还需要自己去debug源码。spring的启动方式很很多比如通过springboot配置去启动,或者通过ClassPathXmlApplicationContext context = new ClassPat...
原创
105阅读
0评论
0点赞
发布博客于 2 年前

Spring启动步骤

经过无数次debug Spring源码,对spring整体启动过程有了大致了解。因为spring体系太过复杂,我也没用能力把spring讲的面面俱到并且没用错误。要想掌握spring的细节,还需要自己去debug源码。spring的启动方式很很多比如通过springboot配置去启动,或者通过ClassPathXmlApplicationContext context = new ClassPat...
原创
105阅读
0评论
0点赞
发布博客于 2 年前

对CAP的理解

本文是对http://book.mixu.net/distsys/ebook.html这篇文章中关于CAP理论的总结。CAP:Consistency: all nodes see the same data at the same time.对于同一个数据的多个副本,在任何时候副本数据是一致的。-a single copyAvailability: node failures do no...
原创
157阅读
0评论
0点赞
发布博客于 3 年前

C为什么不能跨平台

原文地址:http://www.cnblogs.com/yaoxiaowen/p/7470460.html如果大家能对我的文章推荐一下,关注一下本人博客,那就更开心了,我今后也会更多的写一些计算机系统/原理类的文章,以飨各位读者。再次谢谢。前段时间看了 周志明的那本 《深入理解java虚拟机》。对于平台无关性问题,有了一些新的认识。所以特写一篇博客来进行总结。这是我的第一篇不针对具体技术,...
转载
410阅读
0评论
3点赞
发布博客于 3 年前

在Eclipse中debug时,查看类加载信息

原文地址:https://blog.csdn.net/w_intercool/article/details/7304010在跑程序时,有些时候会发现NoSuchMethodException,出现这种情况很大情况都是包冲突导致的为了查看程序在运行时加载了哪里包,我们可以在调试程序加一些启动参数如: -verbose就可以查看所加载的类设置过程如下:运程程序之后就会有类...
转载
895阅读
0评论
1点赞
发布博客于 3 年前

Spring-test + mockito + junit +cobertura 以及Spring-test + powermock+ junit遇到的坑

最近在研究单元测试,先是搭建了Spring-test + mockito + junit的环境,但是由于发现项目中需要有mock静态方法的地方,于是研究了下Spring-test + powermock+ junit后者我研究了三天踩过无数坑,最终还是放弃了。mockito团队也是建议不要对静态方法进行mock,当然他们也没有实现静态方法的mock。Spring-test + powermoc...
原创
501阅读
0评论
0点赞
发布博客于 3 年前

CRC32、MD5、SHA1算法校验介绍

转自:https://blog.csdn.net/anypkv/article/details/16823797 CRC32、MD5和SHA1是目前用来校验文件信息真实性的主要手段,使用这些校验算法可以发现保存或传输的信息是否受到损坏或篡改,防止文件或信息被恶意篡改。下面将分别介绍这几种校验算法。1、CRC32CRC全称为Cyclic Redundancy Check,又叫循环...
转载
3981阅读
0评论
0点赞
发布博客于 3 年前

RandomAccessFile使用小结

原文地址:https://www.cnblogs.com/baoliyan/p/6225842.htmlRandomAccessFile是Java输入/输出流体系中功能最丰富的文件内容访问类,既可以读取文件内容,也可以向文件输出数据。与普通的输入/输出流不同的是,RandomAccessFile支持跳到文件任意位置读写数据,RandomAccessFile对象包含一个记录指针,用以标识当前读写...
转载
163阅读
0评论
0点赞
发布博客于 3 年前

本地Eclipse调试RocketMQ mqnamesrv服务和mqbroker服务以及mqadmin服务

最近在研究RocketMQ,本着追求源码的精神,想在本地eclispe调试mq的源代码,先从mq的github上把代码拉下来。1:启动mqnamesrvRocketMQ官网文档Quick Start中建议在linux上启动RocketMQ,先通过 “ nohup sh  bin/mqnamesrv &” 命令启动mqnamesrv服务,这就意味着mq启动启动mqnamesrv服务时...
原创
1017阅读
0评论
0点赞
发布博客于 3 年前

RocketMQ管理命令说明

转载地址:https://blog.csdn.net/zhu_tianwei/article/details/409513011.1.  控制台使用RocketMQ提供有控制台及一系列控制台命令,用于管理员对主题,集群,broker等信息的管理;l  登录控制台:首先进入RocketMQ工程,进入/RocketMQ/bin在该目录下有个mqadmin脚本l  查看帮助:...
转载
129阅读
0评论
0点赞
发布博客于 3 年前

RocketMq:No route info of this topic

1:确保NamesrvAddr可访问(如果不可访问则看看是不是防火墙导致的,将防火墙关闭:systemctl stop firewalld.service)2:Broker禁止自动创建Topic,但是用户没有手动创建Topic :2.1:手动创建Topic :sh mqadmin updateTopic –n localhost:9876 –c DefaultCluster –t  top...
原创
563阅读
0评论
0点赞
发布博客于 3 年前

windows重装系统

每次重装系统都不知道从何下手,网上百度都是叫你下载工具重装系统,但是这些工具都不干净,给你弄些乱七八糟的软件和服务。最近了解了下这方面个的知识,了解了gho,iso文件的区别(百度了解下iso与gho文件的区别,你就知道iso文件安装的好处)。这里记录下如何通过iso文件安装干净的操作系统。第一步:准备系统iso文件,可以在下面的地址上去下载,。Windows 7 SP1旗舰版中文版64...
原创
200阅读
0评论
1点赞
发布博客于 3 年前

CentOs7时区更新遇到的坑

最近服务上线,系统用的CentOs7,服务启动成功,但是看日志时间不对。然后把系统的时区改了。再看日志有些服务的日志时间正常了。但是有些服务的时间还是不对。一样的环境,一样的日志框架,服务不同日志显示的时间不同。网上各种找资料,都没法。最后想到改了时区,没有重启服务可能有些服务的时区信息并没有更新。最后重启了所有服务,日志显示的时间就正常了。。。...
原创
452阅读
0评论
0点赞
发布博客于 3 年前

spring boot 2.0.3+spring cloud (Finchley)6、配置中心Spring Cloud Config

原文地址:http://www.cnblogs.com/cralor/p/9239976.htmlSpring Cloud Config 是用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分。其中服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置仓库并为客户端提供获取配置信息、加密 / 解密信息等访问接口;而客户端则是微服务架构中的各个微...
转载
338阅读
1评论
0点赞
发布博客于 3 年前

spring boot 2.0.3+spring cloud (Finchley)5、路由网关Spring Cloud Zuul

原文地址:http://www.cnblogs.com/cralor/p/9234697.htmlZuul作为微服务系统的网关组件,用于构建边界服务,致力于动态路由、过滤、监控、弹性伸缩和安全。为什么需要ZuulZuul、Ribbon以及Eureka结合可以实现智能路由和负载均衡的功能;网关将所有服务的API接口统一聚合,统一对外暴露。外界调用API接口时,不需要知道微服务系统中各服务相互调用的复...
转载
388阅读
0评论
0点赞
发布博客于 3 年前

spring boot 2.0.3+spring cloud (Finchley)4、熔断器Hystrix

原文地址:http://www.cnblogs.com/cralor/p/9230728.html在分布式系统中服务与服务之间的依赖错综复杂,一种不可避免的情况就是某些服务会出现故障,导致依赖于他们的其他服务出现远程调度的线程阻塞。某个服务的单个点的请求故障会导致用户的请求处于阻塞状态,最终的结果是整个服务的线程资源消耗殆尽。由于服务的依赖性,会导致依赖于该故障服务的其他服务也处于线程阻塞状态,最...
转载
990阅读
1评论
0点赞
发布博客于 3 年前

spring boot 2.0.3+spring cloud (Finchley)3、声明式调用Feign

原文地址:http://www.cnblogs.com/cralor/p/9228678.htmlFeign受Retrofix、JAXRS-2.0和WebSocket影响,采用了声明式API接口的风格,将Java Http客户端绑定到他的内部。Feign的首要目标是将Java Http客户端调用过程变得简单。源码地址:https://github.com/OpenFeign/feign本章案例基于...
转载
2333阅读
0评论
0点赞
发布博客于 3 年前

spring boot 2.0.3+spring cloud (Finchley)2、搭建负载均衡Ribbon (Eureka+Ribbon+RestTemplate)

原文地址:http://www.cnblogs.com/cralor/p/9225727.htmlRibbon是Netflix公司开源的一个负载均衡组件,将负载均衡逻辑封装在客户端中,运行在客户端的进程里。本例子是在搭建好eureka的基础上进行的,可参考spring boot 2.0.3+spring cloud (Finchley)1、搭建Eureka 以及构建高可用Eureka Server...
转载
208阅读
0评论
0点赞
发布博客于 3 年前

pring boot 2.0.3+spring cloud (Finchley)1、搭建服务注册和发现组件Eureka 以及构建高可用Eureka Server集群

原文地址:https://www.cnblogs.com/cralor/p/9223994.html一 、搭建Eureka编写Eureka Server由于有多个spring boot项目,采用maven多module的结构,项目结构如下:新建一个maven主工程,在主maven的pom文件中引入eureka-client和eureka-server依赖,以及spring boot和spring ...
转载
1437阅读
0评论
0点赞
发布博客于 3 年前

Java自带的GUI性能监控工具Jconsole以及JisualVM简介

原文链接:http://blog.csdn.net/chendc201/article/details/229055031 Jconsole1.1 简介以及连接  JConsole是一个基于JMX的GUI工具,用于连接正在运行的JVM,它是Java自带的简单性能监控工具。下面以对tomcat的监控为例,带领大家熟悉Jconsole这个工具。  Step 1,在dos/bash命令下输入:jcons...
转载
216阅读
0评论
0点赞
发布博客于 3 年前

DUBBO服务治理与微服务

原文地址:https://blog.csdn.net/suifeng3051/article/details/53992560近期都在谈微服务,本人也正在做相关的工作,应领导要求做了一个微服务的分享,本篇文章主要来源于分享的PPT,所以有些简单,有问题可以在下面留言,大家 一起讨论。本篇文章先简单介绍了互联网架构的演变,进而介绍了服务化,最后再介绍微服务,微服务是服务治理的升级也是互联网架构的进一...
转载
1433阅读
1评论
1点赞
发布博客于 3 年前

Spring+DUBBO传输层之netty-client端执行过程

上篇文章说了server端的执行过程,这篇文章将说一下client端的执行过程,一样地还是从nettyclient的启动开始:1:首先看看nettyclient是什么时候启动的,nettyclient是在spring实例化第一个<dubbo:reference>标签定义的bean,的时候会根据url判断引用的服务端是否有client启动,如果没有的话就会创建client,并监听指定的端...
原创
791阅读
0评论
2点赞
发布博客于 3 年前

Spring+DUBBO传输层之netty-server端执行过程

本文提到的dubbo版本为2.6.1这段时间一直在跟DUBBO和netty的源码,下面描述下dubbo使用netty作为传输层的调用链,首先从dubbo启动nettyserver开始(至于nettyserver何时启动,这里暂时不深入讲解因为涉及到Spring解析ml,加载,实例化,初始化bean的一整套流程,有时间再写文章单独讲解,这里先暂时提一点关键点:ServiceBean<T>...
原创
664阅读
0评论
0点赞
发布博客于 3 年前

Dubbo的线程模型

dubbo的 protocol标签提供了两个参数 dispatcher 和 threadpool来为我们自定义DUBBO协议下的线程模型,其中dubbo自定义了5个线程dispatcher:Dispatcher all 所有消息都派发到线程池,包括请求,响应,连接事件,断开事件,心跳等。direct 所有消息都不派发到线程池,全部在Io线程上直接执行message 只有请求响应消息派发到线程池,其...
原创
652阅读
0评论
0点赞
发布博客于 3 年前

Netty3 VS Netty4 之线程模型

<div id="article_content" class="article_content"><p><span>下面小节我们就详细得对Netty3和Netty4版本的I/O线程模型进行对比,以方便大家掌握两者的差异,在升级和使用中尽量少踩雷。</span></p><h1 id="1-netty
转载
1508阅读
0评论
0点赞
发布博客于 3 年前

dubbo 请求调用过程分析

服务消费方发起请求当服务的消费方引用了某远程服务,服务的应用方在spring的配置实例如下:<dubbo:referenceid="demoService"interface="com.alibaba.dubbo.demo.DemoServ ice" />demoService实例其实是代理工厂生产的代理对象(大家可以参考代理那部分生成的伪代码),在代码中调用demoService.s...
转载
110阅读
0评论
0点赞
发布博客于 3 年前

maven打jar包指定要编译的资源文件很重要

最近在使用dubbo的时候遇到一个问题,在加载自定义扩展的Filter的时候,报错:No such Filter found in ... 大致意思就是说没有找到Filter对应的类com.cn.xxxFilter。并且这个错误只有在测试环境发生,开发环境并没有这个错误。刚开始以为是不是com.cn.xxxFilter.java没有被编译为class。后来查看测试环境打的jar包,发现有com.c...
原创
1720阅读
1评论
0点赞
发布博客于 3 年前

用spring的包读取properties文件避免中文乱码

在项目中有时候需要读取properties文件,但是读取出来的中文可能是乱码的,那么我们就需要将读取出来的内容进行编码。这里将使用spring的包来解决这个问题。代码如下:import java.io.IOException;import java.io.InputStream;import java.util.Properties;import org.springframework.c...
原创
1982阅读
0评论
0点赞
发布博客于 3 年前

使用JIBX实现POJO与xml的相互转换

最近在研究netty,在学习HTTP+XML协议栈开发这个知识点时,需要对POJO-xml进行互相转换,《netty权威指南第二版》简易使用jibx框架来实现POJO-XML的相互转换,下面讲讲具体的实现过程。1:首先去JIBX的官网下载jibx的zip包(注意:jibx_1_2_x在jdk1.8的环境下会出错,jdk1.8建议下载jibx_1_3_x)2:下载zip包后解压出来将解压出来的文件夹...
原创
1151阅读
0评论
0点赞
发布博客于 3 年前

基于Netty实现的简易服务端与客户端的信息交流

1:服务器端所需要的三个类如下:public class TimeServer { public static void main(String[] agrs) { new TimeServer().bind(8080); } private void bind(int port) { EventLoopGroup bossGroup = new NioEventLoopGrou...
原创
105阅读
0评论
0点赞
发布博客于 3 年前

NIO实现的服务端与客户端之间的简单通信

1 服务端启动类public class TimeServer { public static void main(String[] args) { int port = 8080; //这个类负责轮询多路复用器 selector MultiplexerTimerServer mts = new MultiplexerTimerServer(port); //单独开启一个线程来执...
原创
982阅读
0评论
0点赞
发布博客于 3 年前

dubbo向zookeeper发布服务报错:连接超时

在启动spring+dubbo+zookeeper的项目中,zookeeper是服务的注册中心,provider会向zookeeper发布服务,但是........问题来了,在服务发布时可能 连接不上 zookeeper注册中心,在zookeper部署的服务器上我们需要将zookeeper使用的端口默认为2181 暴露出来否则,zookeeper将连接不上就会报错连接超时。下面说说如何配置zook...
原创
3959阅读
0评论
0点赞
发布博客于 3 年前

LINUX网络配置以及搭建zookeeper注册中心

本文将讲述centos7环境下搭建zookeper,先在虚拟机中安装centos系统并配置好网络连接,网络连接步骤如下说明:如果执行本文中的linux 命令失败 可能是你没有用系统管理员账号登录centos那么你需要在命令前输入 sudo 指令1:将虚拟机的网路设置为NAT连接:2:进入系统后输入命令“vi /etc/sysconfig/network-scripts/ifcfg-en...
原创
267阅读
0评论
0点赞
发布博客于 3 年前

Java 并发源码合集

这里的文章详细地介绍了java多线程的并发知识:http://cmsblogs.com/?p=2122
原创
249阅读
0评论
0点赞
发布博客于 3 年前

操作文件的两种方式Channel or Input/OutPstream

下面介绍两种读写文件的对比, 1:InputStream/OutputStream操作byte[]  2:Channel操作buffer(Reader /Writer读写文件的方式就不比较了,其性能比上面两种方式差很多)先来说说两种方式对比后的结果:总体来说第一种方式对比第二种方式有如下的缺点1:速度慢,下面代码运行结果表明 Channel操作buffer速度快于InputSt...
原创
848阅读
5评论
0点赞
发布博客于 3 年前

Java8的四种函数式接口

java8提供的函数式接口在Function包下有几十个接口,但是这几十个接口是从下面4种接口扩展而来的。下面我们看看这四种函数式接口。java8的函数式编程主要就是4类接口。       Consumer(类似于消费者需要传入参数无返回值)       Supplier(类似于生产者不需要传入参数,但有返回值)       Function(有输入也有返回)     
原创
1607阅读
0评论
0点赞
发布博客于 3 年前

JDK自带的观察者模式

Jdk提供了一个类Observable(用于支持被观察者),一个接口(用于支持观察者)。观察者类实现Observer接口,被观察者继承Observable类就可以很方便地实现观察者模式了。代码如下。1:新建一个观察者类:student 其要实现Observer接口/** * 观察者类 * 创建日期: 2018年1月25日 * @author zhaosq */public cla
原创
165阅读
0评论
0点赞
发布博客于 3 年前

Java8 的stream

流与集合有以下几种不同:有存储。 流不是存储元素的数据结构; 相反,它通过计算操作的流水线传送诸如数据结构,阵列,生成器功能或I / O通道的源的元件。 功能性质。 流上的操作产生结果,但不会修改其来源。 例如,过滤从原Stream获得的Stream会将不需要过滤的元素生成新的Stream,而不是从源集合中删除元素。懒惰操作。 许多流操作(如过滤,映射或重复删除)可以懒惰地实现
原创
96阅读
0评论
0点赞
发布博客于 3 年前

基于自定义类加载器的远程调试服务器的方法

今天介绍一个机遇自定义类加载器的远程调试服务器程序的方法,这里只是为了演示类加载器的功能,千万不能再线上通过这种方式加载新的class。因为class最终会被加载到方法区,如果加载大量的class并且没有卸载没用的class的话很容易出现内存溢出异常。下面我们看看代码实现1:新建一个类加载器。其作用是将class文件的二进制流转化为数组,需要注意的是,在构造器里,必须将加载MyClassLoa...
原创
113阅读
0评论
0点赞
发布博客于 3 年前

web应用中 获取ServletContet方法

ServletContet的作用与功能这里就不用说了,大家可以去百度。尤其需要记住的一点是:ServletContet提供对应用程序中所有Servlet所共有的各种资源和功能的访问,以及重要共享数据的存储。在应用中获取ServletContext的几个方法:一:可以新建一个上下文监听类继承org.springframework.web.context.ContextLoaderListen
原创
232阅读
0评论
0点赞
发布博客于 3 年前

服务端通过生成字节码返回客服端解析为图像

在之前做项目的时候遇到过这样的情况,用户需要上传自己的头像图片,为了能在下次登录时展示这个图片,我们会把图片保存到项目中的某一个指定的文件夹里面,以便服务程序能访问到这张图片。(因为这个图片必须放到tomcat容器里面(webapps文件夹下面)能访问到的地方,程序才能访问到)。但是有一个问题是,这不利于程序包的更新,每次发布war包,tomcat将会解析出新的项目文件夹,原有的项目文件夹将会被替
原创
151阅读
0评论
0点赞
发布博客于 3 年前

ScheduledExecutorService 预定执行任务

预定执行任务的用法。public class Test{ public static void main(String[] a){ ScheduledExecutorService s = new ScheduledThreadPoolExecutor(3); Runnable task = new Runnable() { @Override public vo
原创
94阅读
0评论
0点赞
发布博客于 3 年前

ThreadPoolExecutor的四个拒绝策略

下面是建立一个线程池的基本语法,最后一个参数是线程池的拒绝策略。Jdk默认实现了4个拒绝策略。在下面四张图片中可以看到。ThreadPoolExecutor pool = new ThreadPoolExecutor(3, 6, 3000, TimeUnit.MILLISECONDS, new LinkedBlockingDeque(), new T
原创
1814阅读
0评论
0点赞
发布博客于 3 年前

Collections.synchronizedXXX 集合同步

Collections.synchronizedCollection(Collectiont)Collections.synchronizedList(Listlist)Collections.synchronizedMap(Mapmap)Collections.synchronizedSet(Set t)上面几个方法是Collections工具类将集合变为多线程安全集合的主要
原创
646阅读
0评论
0点赞
发布博客于 3 年前

阻塞队列

阻塞队列与非阻塞队列的区别在于:当在阻塞队列没有元素是取出元素将会被阻塞(因为此时队列中没有元素),直到队列中有新的元素被阻塞的线程才会被唤醒。当在阻塞队列元素个数已经达到队列的容量时,若继续向队列新增元素将会被阻塞,直到队列中的元素个数小于队列的容量,被阻塞的线程才会被唤醒。其特点可以用于生产者消费者线程。下面是我自己写的一个很简单的阻塞队列(jdk有自己的官方实现的阻塞队列:ArrayBloc...
原创
85阅读
0评论
0点赞
发布博客于 3 年前

重入锁

只要线程已经获得某个对象的锁或者是获得了某个ReentrantLock锁,那么这个线程在未释放这个锁之前可以多次请求获取并能获得这个锁,因为锁有一个持有计数来跟踪获得锁的次数。比如,某个线程已经获得了一个锁(无论是对象锁还是ReentrantLock锁),那么他就可以继续请求并能获取到这个锁,其获得X次锁,则这个锁的持有计数就为X,每获取一次锁,持有计数加1,每释放一次锁持有计数减1直到持有计数变
原创
259阅读
0评论
0点赞
发布博客于 3 年前

死锁

死锁是什么意思呢?打一个很简单的比喻吧。我(线程A)有一本书(锁a),你(线程B)有一支笔(锁b)。现在我想得到你的笔,而你想得到我的书。但是我必须得到你的笔做完一些事情后才能把书给你,而你也必须得到我的书后才能把你的笔给我。这样你和我一直为了得到对方的东西(实际上永远得不到)而一直阻塞。程序如下: 解决死锁的三个想法是:一:以相同的顺序请求锁,上面的例子中,我先获得书,你先获取笔,程序可
原创
92阅读
0评论
0点赞
发布博客于 3 年前

WeakHashMap(弱引用)

在了解此知识点之前建议了解引用的知识点Renference(引用)(点击查看)先来看看源码:weakHashMap没什么特别的,知识其Entry继承了弱引用类,在新建一个Entry的时候,会根据这个键生成一个弱引用(见下图 2,3,4)去指向这个值,并将这个弱引用放入一个队列(这个队列是一个引用队列 见下图 1)
原创
276阅读
0评论
0点赞
发布博客于 3 年前

引用Reference

引用分为四类:强引用、软引用、弱引用、虚引用。引用的分类是为了垃圾收集器进行垃圾收集时对不同的引用采用不同的收集策略。下面我将用房屋(堆内存)的大扫除(垃圾收集)的场景来模拟垃圾收集时垃圾收集器如何对待这四类引用。强引用:这个对象我正在使用,不允许清除它。软引用:这个对象我正在使用,这个房间还有多余的空间,不允许清除它。(当然如果这个房间没有多余的空降的话,此对象将会被清除)。弱引用:
原创
184阅读
0评论
0点赞
发布博客于 3 年前

LinkedList

LinkedListLinkedList结构比较简单,存放的是“一串”node节点,每个节点不仅包含自己本身的值,还包括指向上一个元素以及下一个元素的引用。LinkedList的插入和删除效率很高,只需要断开原链接,操作(插入、删除)后,重新连接(改变引用指向)即可
原创
52阅读
0评论
0点赞
发布博客于 3 年前

ArrayList

ArrayListArrayList的底层实现比较简单,就是直接操作数组,简单直接、随机访问效率高在add之前调用 ensureCapacityInternal(size +1); 确认数组的大小,如果有需要则扩容。需要说明的是,ArrayList默认初始容量为10,每次扩容x1.5。
原创
58阅读
0评论
0点赞
发布博客于 3 年前

HashSet

HashSetHashSet的内部实现比较简单,其完全是基于HashMap的。下图可以看到,当你new一个hashSet的时候,将会创建一个HashMap, hashSet的add方法也是向HashMap里面put一个entry,entry的键就是你add的元素,entry的值就是一个Object对象
原创
60阅读
0评论
0点赞
发布博客于 3 年前

LinkedHashMap

LinkedHashMapLinkedHashMap存储方式仍然是HashMap的存储原理,只是存储的元素Node基于HashMap的Node进行了扩展,添加了支持链表结构的属性用于指向Node前后元素的before和after。此外LinkedHashMap多了一个用于是否支持LRU排序(最近最少使用原则)的accessOrder属性。1:首先LinkedHashMap继承了Ha
原创
51阅读
0评论
0点赞
发布博客于 3 年前

HashMap

HashMap HashMap的底层结构仍然是数组,下图中,hashMap有一个table属性,其是一个Node数组,这个Node实现了Map.Entry接口,即map所有的entry都是存放到这个数组里面的。下面我将用反射技术获取hashMap中的这个数组到底是如何存放数据的(注意Node<K,V>有一个next属性,这个属性很重要,也体现了HashMap设计的优美)...
原创
122阅读
0评论
0点赞
发布博客于 3 年前

java 多线程-for-join框架

for-join框架主要是用来支持执行计算密集型任务的,比如图像、视频处理等其工作原理是:我们将大的复杂的计算任务划分为无数的小任务(我看了下源码,所有的小任务都被放在了一个队列里面),最后将各个小任务的处理结果整合返回(递归思想),如果有多余的处理器的话,这些小任务可以并行运算。下面我们来看一个例子:在一个大的int数组(存放的值为 0-100的随机数),我们将计算数组中数值大于
原创
1564阅读
0评论
0点赞
发布博客于 4 年前

java 多线程-障栅CyclicBarrier

一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。public class Test{ public static void main(String...
原创
629阅读
0评论
1点赞
发布博客于 4 年前

java 多线程-信号量 Semaphore

public class Test{ public static void main(String[] arg){ Semaphore semaphore = new Semaphore(3);//定义信号量 //SecurityManager sm = System.getSecurityManager(); //ThreadGroup group = sm == null ? T
原创
120阅读
0评论
0点赞
发布博客于 4 年前

java 多线程-实例数据交换器 Exchanger

实例数据交换器用于在两个线程之间,相同类型的实例数据交互。比如讲线程A中的一个People实例的数据传递给线程B的一个People实例,public class Test{ public static void main(String[] arg){ Exchanger ex = new Exchanger<>(); Runnable taskA = ()->{ Pe
原创
160阅读
0评论
0点赞
发布博客于 4 年前

java 多线程-倒计时门栓 CountDownLatch

java 倒计时门栓 是指Java的CountDownLatch类;它是Java用于并发编程的辅助类中的其中一个。它的主要功能正如其名称所示:以倒计时为门栓标准。指定线程只有计数为0时,系统才会放开权限让该线程开始执行。CountDownLatch类常用于指定某个工作线程只有等待其他准备线程都准备完(count计数也就变为0)才能开始执行具体的工作任务public class Test{ pub...
原创
1312阅读
0评论
0点赞
发布博客于 4 年前

类加载

类加载主要包括5个步骤(加载、验证、准备、解析和初始化)加载:加载需要完成3件事1:首先是通过一个类的全限定名称来获取定义此类的二进制字节流2:将转化的二进制字节流代表的静态存储结构转化为 方法区  的运行时数据结构3::在内存中生成一个代表这个类的 java.lang.Class对象(HotSpot虚拟机中,这个对象 放在了 方法区而不是堆中)验证:主要是为了保证Clas
原创
82阅读
0评论
0点赞
发布博客于 4 年前

try catch finally的执行顺序即结果

在java中数据的传递分为两种,一种是 值传递、另外一种是应用传递。值传递主要针对8中基本类型以及String类型。而应用传递则针对对象(包括8中基本类型的封装对象)。下面对于这两种数据的传递分别用程序来测试下;public class Test { public static void main(String[] aStrings){ int x = 3; String str
原创
107阅读
0评论
0点赞
发布博客于 4 年前

Apache Shiro的使用

本文将讲述在Spring+SpringMvc项目中使用Shiro来保障系统的安全。关于shiro理论性的东西本文不深入讲解,重点在于在Spring项目中配置和使用shiro.关于理论性的东西,可以看看 张开涛的《跟我学Shiro》。话不多说,先来看看如何配置Shiro。1 在web.xml中添加一个ShiroFilter shiroFilter org.springframewor
原创
141阅读
0评论
0点赞
发布博客于 4 年前

Spring MultipartFile 文件上传

在以前的处理上传文件的时候我都是将文件标签单独置于一个 form 标签中,每次提交表单,先提交文件的表单,然后上传文件成功后返回一个文件的id,再将文件的id绑定到外层的表单上。其实并不需要这么麻烦,文件可以和其他属性通过一次提交全部将数据交给控制器。下面我将实现一个 在一个表单通过一次请求 提交一个实体对象以及文件到控制器,并实现数据的持久化。1 首先配置是spring支持Multipart
原创
584阅读
0评论
0点赞
发布博客于 4 年前

Spring项目处理异常

spring对于非ajax提交的请求可以有两种处理方式:一种是一种是将异常映射为HTTP状态码,通过状态码将不同的错误状态定义到指定的错误页面。一种是通过@ExceptionHandler处理指定的异常类型。非Ajax提交异常处理一:将异常映射为HTTP状态码1 首先在异常的地方抛出自定义异常 throw new NotFoundException()@Reques
原创
149阅读
0评论
0点赞
发布博客于 4 年前

Spring 视图技术 xslt以及文档视图

Spring的一个优秀之处在于,把view层技术与MVC框架的其他部分分离开来。 例如,选择使用Velocity或者XSLT来代替已有的JSP方式只需要修改配置就可以实现。一:xslt视图下面利用xslt视图技术实现word形式的视图1 首先在ServletConfig.java中注册xslt的视图解析器。@Bean public ViewResolver viewRe
原创
296阅读
0评论
0点赞
发布博客于 4 年前

Spring 国际化

ApplicationContext接口扩展了MessageSource接口,因而提供了消息处理的功能(i18n或者国际化)。当一个ApplicationContext被加载时,它会自动在context中查找已定义为MessageSource类型的bean。此bean的名称须为messageSource。如果找到,那么所有对上述方法的调用将被委托给该bean。否则ApplicationContex
原创
132阅读
0评论
0点赞
发布博客于 4 年前

Spring BeanPostProcessor(后处理器)的简单使用

Spring创建bean是根据配置来的,你可以通过xml文件配置,也可以通过java 的方式来配置,Spring在IOC容器完成bean的实例化、配置和初始化后可以通过BeanPostProcessor(后处理器)对创建的bean进行各种处理。你可以在这里修改bean的属性或者增强bean,spring AOP创建jdk代理或者cglib代理的过程就是在BeanPostProcessor(后处理器
原创
1586阅读
1评论
0点赞
发布博客于 4 年前

Spring Bean的作用域以及lookup-method标签的使用

Spring Framework支持五种作用域,如下图所示:singleton:表示一个容器中只会存在一个bean实例,无论在多少个其他bean里面依赖singleton bean,整个容器都只会存在一个实例。相当于是容器的全局变量。prototype:一个容器中可能会存在多个bean实例,prototype bean的实例产生有两种情况,一种是其他bean请求依赖prototyp
原创
702阅读
0评论
0点赞
发布博客于 4 年前

Spring MVC 零配置 / Spring MVC JavaConfig

Spring MVC 零配置 / Spring MVC JavaConfig1. Spring MVC的核心就是DispatcherServlet类,Spring MVC处理请求的流程如下图所示:  2. Spring MVC中典型的上下文层次当我们初始化一个DispatcherServlet类时,Spring MVC会在web应用的WEB-INF目录下查找
转载
171阅读
0评论
0点赞
发布博客于 4 年前

Spring in Action : MVC 配置(JAVA方式)

异步赠书:9月重磅新书升级,本本经典    SDCC 2017之区块链技术实战线上峰会    程序员9月书讯    每周荐书:ES6、虚拟现实、物联网(评论送书)Spring 4 学习笔记7:MVC 配置(JAVA方式)标签: springspring mvc2016-09-28 07:17 2996人阅读 评论(0)收藏举报
转载
126阅读
0评论
0点赞
发布博客于 4 年前

spring form 以及数据校验

本文将讲述spring form的一些常用标签,以及基于org.hibernate.validator和javax.validation 的javabean数据校验。1 在views/home/下面建一个index.jsp 在jsp头部引入  然后写一个form表单。该表单每个标签下面都有一个   标签 这个标签是用来接收该属性的错误信息的 用户名: 密码: 年龄:
原创
310阅读
0评论
0点赞
发布博客于 4 年前