自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

决定你人生高度的不是你的才能而是你的态度

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

原创 通过跟踪源码分析BindingException: Invalid bound statement (not found)产生的原因

通过跟踪源码分析BindingException: Invalid bound statement (not found)产生的原因

2022-02-23 08:15:00 260

原创 git协同工作流,你们公司使用哪一种呢

1 TBD2 功能分支协同工作流3 GitFlow 协同工作流4 GitHub Flow5 GitLab Flow6 阿里AoneFlow思考总结,目前使用AoneFlow协同工作流的本质

2022-02-13 12:13:20 450

原创 Dubbo源码分析8之服务降级

Dubbo源码分析8之服务降级1.简介可以通过服务降级功能临时屏蔽某个出错的非关键服务,并定义降级后的返回策略。服务降低的方式有两种:容错和屏蔽。配置方式:可以通过dubbo监控中心控制台配置,也可以通过代码配置。向注册中心写入动态配置覆盖规则:RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(Re...

2020-01-13 14:22:33 182

原创 Dubbo源码分析9哪些地方用到了哪些设计模式

Dubbo源码分析9哪些地方用到了哪些设计模式1.模板方法模式1.1服务目录Directory服务目录是什么:服务目录中存储了一些和服务提供者有关的信息,通过服务目录,服务消费者可获取到服务提供者的信息,比如 ip、端口、服务协议等。通过这些信息,服务消费者就可通过 Netty 等客户端进行远程调用,可以理解成Invoker的列表抽象类 AbstractDirectory ,有两个子类St...

2020-01-13 14:19:58 190

原创 Dubbo源码分析7之服务调用过程

Dubbo源码分析7之服务调用过程1. 简介在前面的文章中,我们分析了 Dubbo SPI、服务导出与引入、以及集群容错方面的代码。经过前文的铺垫,本篇文章我们终于可以分析服务调用过程了。Dubbo 服务调用过程比较复杂,包含众多步骤,比如发送请求、编解码、服务降级、过滤器链处理、序列化、线程派发以及响应请求等步骤。限于篇幅原因,本篇文章无法对所有的步骤一一进行分析。本篇文章将会重点分析请求的...

2020-01-13 14:18:32 200

原创 Dubbo源码分析6之负载均衡

Dubbo源码分析6之负载均衡1.简介LoadBalance 中文意思为负载均衡,它的职责是将网络请求,或者其他形式的负载“均摊”到不同的机器上。避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况。通过负载均衡,可以让每台服务器获取到适合自己处理能力的负载。在为高负载服务器分流的同时,还可以避免资源浪费,一举两得。负载均衡可分为软件负载均衡和硬件负载均衡。在我们日常开发中,一般很难接触...

2020-01-13 08:48:07 117

原创 Dubbo源码分析5之服务目录

1. 简介本篇文章,将开始分析 Dubbo 集群容错方面的源码。集群容错源码包含四个部分,分别是服务目录 Directory、服务路由 Router、集群 Cluster 和负载均衡 LoadBalance。这几个部分的源码逻辑相对比较独立,我们将会分四篇文章进行分析。本篇文章作为集群容错的开篇文章,将和大家一起分析服务目录相关的源码。在进行深入分析之前,我们先来了解一下服务目录是什么。服务目录...

2020-01-13 08:47:00 159

原创 Dubbo源码分析4之服务引用

此文转自 原文 ,在最后做了一点补充目录1.简介2.服务引用原理3.源码分析3.1 处置配置3.2 引用服务3.2.1 创建 Invoker3.2.2 创建代理4.总结补充服务引用调用链1.简介在 Dubbo 中,我们可以通过两种方式引用远程服务。第一种是使用服务直连的方式引用服务,第二种方式是基于注册中心进行引用。服务直连的方式仅适合在调试或测试服务的场景下使用,不适合...

2020-01-13 08:45:43 297

原创 Dubbo源码分析3之服务发布

1.服务发布概述Dubbo 服务导出过程始于 Spring 容器发布刷新事件[dubbo:service --> ServiceBean --> onApplicationEvent(ContextRefreshedEvent event)],在接收到ContextRefreshedEvent 事件后执行服务导出逻辑。整个逻辑大致可分为三个部分:第一部分是前置工作,主要用于检查参...

2020-01-12 08:04:47 359

原创 Dubbo源码分析2之SPI自适应扩展Adaptive原理

目录原理概述为什么设计@Adaptive注解dubbo源码中哪些地方什么时候使用到了,具体如何体现@Adaptive扩展加载过程源码分析总结原理概述首先看以下官网的关于自适应扩展的描述:在 Dubbo 中,很多拓展都是通过 SPI 机制进行加载的,比如 Protocol、Cluster、LoadBalance 等。有时,有些拓展并不想在框架启动阶段被加载,而是希望在拓展方法被调...

2020-01-12 08:02:12 298

原创 dubbo源码分析1之SPI原理以及IOC和AOP原理

1.Dubbo SPI是什么首先看下dubbo官网的描述:SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。SPI 机制在第三方框架中也有所应用,比如 ...

2020-01-12 08:00:27 419

原创 Netty学习(3) 使用NIO实现群聊客户端和服务端

NIO编写的和客户端和服务端示例服务端:package com.nettyStudy.nio.groupChat;import org.omg.Messaging.SyncScopeHelper;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;impor...

2019-12-17 17:30:15 117

原创 Netty学习(2) BIO实现服务端

BIO存在的问题:每个请求都要创建独立的线程与对应的客户端进行交互并发量大的时候需要创建大量的线程来处理连接,系统资源占用比较大连接建立后,如果当前线程没有数据可读,则线程阻塞再read操作上,造成线程资源浪费...

2019-12-17 17:25:04 124

原创 Netty学习(1)IO模型BIO/NIO/AIO

IO我们非常熟悉了,IO不仅仅针对文件的操作,网络编程socket的通信,就是IO操作。通常所说的 BIO 是相对于 NIO 来说的,BIO 也就是 Java 开始之初推出的 IO 操作模块,BIO 是 BlockingIO 的缩写,顾名思义就是阻塞 IO 的意思BIO、NIO、AIO的区别BIO(Block IO) 就是传统的 java.io 包,它是基于流模型实现的,交互的方式是同步、...

2019-12-17 17:24:12 132

原创 SpringBoot原理分析

1 @SpringBootApplication启动原理@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFilters = { ...

2019-12-13 18:21:02 82

原创 反射工具类

package org.smart4j.framework.util;import java.lang.reflect.Field;import java.lang.reflect.Method;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * 反射工具类 * */public final class R

2015-09-21 23:51:32 722

原创 快速排序java

设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。然后对关键字前面和后面的部分分别再进行上面的步骤。一趟快速排序的算法是:1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;2)以第一个数组元素作为关键数据,赋值给key,即key=

2015-08-21 00:26:28 602

原创 插入排序和希尔排序

插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。public static void sortInsert(int[] datas){ int N = datas.length;

2015-08-15 17:57:29 667

原创 最有效的方法来增加在Map中的值

关于这个是在一个博客上看到的,就像试一下,测试结果出人意料。看到这个标题可能还是觉得有点抽象,那么首先来一段代码:int count = map.containsKey(string) ? map.get(string) : 0;map.put(string, count + 1);其中contains(),get() and put()方法都要在map中根据key查找,需要朝找三次

2015-08-04 00:27:17 4235

原创 IO read and write. demo

package test1;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;impor

2015-08-02 13:38:11 1046

原创 java中打印数组的5种方法

Arrays.toString(arr) for(int n: arr) System.out.println(n+", "); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + ", "); } System.out.println(Arrays.asList(

2015-07-31 00:15:32 52456 2

原创 物理查询优化之索引

索引是建立在表上的,本质上是通过索引直接定位表的物理元组,加速数据获取的方式,所以索引优化应该归属到物理查询优化阶段。1. 如何利用索引通常查询优化器所使用索引的原则如下:● 索隐裂座位条件出现在WHERE、HAVING、ON 子句中,这样有利于索引过滤元组;●  索引列是被链接的表对象的列且存在于连接条件中;● 还有一些情况可以使用索引,如排序操作、在索引列上球MIN、MAX

2015-06-27 11:24:31 748

原创 java内存分配策略

1. 对象优先在Eden分配大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够的空间时,虚拟机将发起一次Minor GC。在如下的测试代码中,尝试分配3个2MB大小和1个4MB大小的对象,在运行时通过参数-Xmx20M,-Xms20M,-Xmn10M这三个参数限制了java堆大小为20MB,不可扩展,其中10MB分配给新生代,剩下的非配给老年代。-XX:SurvivorRatio=8决定了新生代中Eden区与一个Survivor区的比例为8:1,即 Eden: from Survivor:

2015-05-14 00:05:04 1480

原创 垃圾收集器与内存分配策略

1.对象已死吗?在堆里存放这java世界几乎所有的对象实例,垃圾回收器在对堆进行回收前,第一件事就是要确定这些对象之中那些对象还“存活”着,哪些对象已经“死去”(即不可能再被任何途径使用的对象)。1.1 引用计数器法给对象添加一个引用计数器,每当有一个地方引用它时,计数器值加1;当引用失效时就减1;任何计数器为0的对象就是不可能再被使用的。引用计数器法实现简单,判断效率

2015-05-09 15:11:45 697

原创 Java内存区域与内存溢出异常与Eclipse运行速度调优

java虚拟机所管理的内存包括以下几个运行时数据区域,如图所示: 既:程序计数器,Java虚拟机栈,本地方法栈,Java堆和方法区。 程序计数器是一块较小的内存空间,他可以看作是当前线程执行的字节码的行号指示器。 由于java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时间,一个处理器(对于多核处理器来说是一个内核)都只会执行一个线程中的指令。因此

2015-05-09 13:59:34 3004 4

原创 虚拟机类加载机制

类加载的时机:类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。其中准备、验证、解析3个阶段统称为链接。加载、验证、准备、初始化和卸载这5个步骤顺序是确定的,而解析阶段则不一定:在某些情况下可以再初始化阶段之后再开始,这是为了支持Java语言的运行时绑定(也成为动态绑定或晚期绑定)。【动态绑定就是说在程序运行时自动

2015-04-21 22:13:45 631

原创 实现Comparable接口对树形结构数据进行排序

背景:数据库中无序的数据要按树形结构出输出,如图所示: 每一个记录 对应 一条数据库的 数据,需求来了,那么怎么实现呢,首先最简单的是直接从数据库 按顺序 查出,然后依次打印,简单点说吧,oracle数据库有相应的语句可以实现,很容易,但是sql server 没有,尝试了下没有成功,考虑数据库的兼容性,就像把数据到后台去排序,那么,这也就是这篇雯所说的内容

2015-02-05 22:44:55 1507

原创 java.lang.OutOfMemoryError:GC overhead limit exceeded

之所以写下来,是因为不想在下次遇到事有到处找,很多时候错误信息一样,但是导致的原因却有很多。我试驾了一个虚拟机启动采纳数:-XX:-UseGCOverheadLimit把原文链接写上,标示感谢;http://www.cnblogs.com/hucn/p/3572384.html我遇到这样的问题,本地部署时抛出异常java.lang.OutOfMemoryError:GC

2015-01-16 21:10:22 789

原创 Java was started but returned exit code = 1

具体不知道什么原因,电脑有点卡,在我debug的时候,突然Eclipse不见了,然后发现一个错误信息的框框,无奈关了重启任然不起效,值得去找解决的办法,经过多次的尝试,在StackOverflow上找到一个可行的符合我情况的办法:我的eclipse.ini修改后的配置文件的内容如下:-startup plugins/org.eclipse.equinox.launcher_

2015-01-16 21:02:55 1144

原创 一道面试题:StringBuffer a=new StringBuffer ("A"); StringBuffer b=new StringBuffer

前几天又看到这个面试题,再次看看public class Jtest{      public static void main(String[] args) {            StringBuffer a=new StringBuffer ("A");             StringBuffer b=new StringBuffer ("B");

2015-01-16 20:37:40 8754 2

原创 js 写一个私有方法供方法内部多处调用

1.自然代码function myMethod(tempAge){ var name = "zhansganfeng"; var age = 128; if(tempAge > age){ alert("牛...");//类似代码1 假设代码比较多 }else{ alert("...");///类似代码2 假设代码比较多 , 需要抽离一个私有方法 showMessage(st

2014-12-14 16:49:10 1145

原创 带复选框的下拉框

效果图:、css:/* 带复选框的下拉框 */ul li{ list-style: none; padding:0px; margin: 0px;} .select_checkBox{ border:0px solid red; position: relative; display:inline-block; } .chartQuota{

2014-09-28 16:35:39 6700 3

原创 关于一个算法题的两点新思路

在网上看到一个算法题,不是很难,搜一下也有解决办法,但是一般都是几层for循环,试着写了下 /** * 给你一组字符串 如 {5,2,3,2,4,5,1,2,1,5},让你输出里面出现次数最多且数值最大的一个,出现几次 * 优点:时间复杂度为O(n) * 缺点:产生一些多余的空间,如 6,7,8没有的数也会分配一个数组空间,但是基本可以忽略 * 限制:

2014-09-12 09:58:47 1406 5

原创 关于2进制直接转16进制

实际中估计也没有这个需求,只是写写。能不能直接由2进制转为16进制呢,最直接的办法是通过位移操作,也就是通常所说的 每四位二进制对应一个16进制,假如java中有一种 二进制的基础类型 Binary bi = new Binary(11010101);这样的话 进行 bi >>> 4 位移操作 就可以很容易转换了,关于这个可以参考Integer.java中的toHexString(in

2014-09-03 17:53:11 1977

原创 Integer源码 转2进制转16进制

其中有一个私有方法,toUnsignedString(int i, int shift) 是为  public static String toHexString(int i) {        return toUnsignedString(i, 4); }public static String toBinaryString(int i) {        return t

2014-09-03 11:33:35 1202

原创 10进制转2进制和16进制

package test2;public class Test { public static void main(String[] args) { System.out.println(toBinary(9)); System.out.println(toHex(559)); System.out.println(Integer.toBinaryString(9)); S

2014-09-02 09:55:24 1109

原创 struts2 <debug>标签报错:Caught an exception while getting the property values of null

严重: Servlet.service() for servlet jsp threw exceptionjava.lang.NullPointerExceptionat com.opensymphony.xwork2.ognl.OgnlUtil.getBeanInfo(OgnlUtil.java:398)at com.opensymphony.xwork2.ognl.OgnlUtil

2014-08-26 16:33:53 2988

原创 菜鸟看spring源码(0)之BeanFactory的注册与依赖绑定

public static BeanFactory getFactory(BeanDefinitionRegistry registry){ AbstractBeanDefinition userDao = new RootBeanDefinition(UserDao.class); AbstractBeanDefinition userService = new RootBeanDefinition(UserService.class); //将bean注册到容器中 registry

2014-08-23 09:26:13 1063

转载 JNDI到底是什么,有什么作用

JNDI的一篇文章前端时间总是在搞不清JNDI到底是干什么,虽然是一值在用,却不知道他最初出现的原因,用来,说不清是用来干什么,下面我相信介能解开这个迷雾里。【转贴一篇】 ------------ JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,不少专家认为,没有透彻理解J

2014-08-23 08:22:38 775

原创 apache配置虚拟目录

apache配置虚拟目录在项目下文件里面访问 D:/test目录下的文件。apache安装目录:C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\mypro,mypro/test.html文件:在这个html里面要引用D:/test/1.jpgmy pro!浏览器中:http://l

2014-08-16 16:45:02 786

空空如也

空空如也

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

TA关注的人

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