自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 收藏
  • 关注

转载 Dubbo原理标签解析

一、Dubbo 配置方式Dubbo 支持多种配置方式: XML 配置:基于 Spring 的 Schema 和 XML 扩展机制实现 属性配置:加载 classpath 根目录下的 dubbo.properties API 配置:通过硬编码方式配置(不推荐使用) 注解配置:通过注解方式配置(Dubbo-2.5.7及以上版本支持,不推荐使用) 对于属性配...

2019-10-29 19:11:31 201

转载 Redis源码剖析(二)io多路复用函数及事件驱动流程

作为服务器监听客户端请求的方法,io多路复用起到了不可忽略的作用,利用io复用监听的方法叫Reactor模式,在前一篇也提到过,使用io复用是现在常用的提高并发性的方法,而且效果显著。通常io多路复用连同事件回调是一起出现的,在将文件描述符(套接字)注册到io多路复用函数中时,同时也需要保存当这个文件描述符被激活时调用的函数(称作回调函数),这样,使用者无需考虑何时事件被激活又何时调用相应处理...

2019-09-29 21:35:14 185

转载 IO 模型:同步异步

阻塞 IO, 非阻塞 IO, 同步 IO, 异步 IO 这些术语相信有不少朋友都也不同程度的困惑吧? 我原来也是, 什么同步非阻塞 IO, 异步非阻塞 IO 的, 搞的头都大了.。后来仔细读了一遍。《UNIX 网络编程卷一 套接字联网 API(第三版)》的 6.2 章节, 终于把这些名词搞懂了。下面我以《UNIX 网络编程卷一 套接字联网 API(第三版)》的 6.2 章节的内容为准, 整...

2019-09-29 21:29:14 262

原创 springboot教程

1.简介:1.1 SpringBoot介绍 Spring Boot使开发独立的,产品级别的基于Spring的应用变得非常简单,你只需"just run"。 我们为Spring平台及第三方库提供开箱即用的设置,这样你就可以有条不紊地开始。多数Spring Boot应用需要很少的Spring配置。你可以使用Spring Boot创建Java应用,并使用java -jar启动它...

2019-09-29 18:34:36 1461

原创 通信协议

一.通信协议1.1 一个 http 请求,在整个网络中的请求过程 当应用程序用 T C P 传送数据时,数据被送入协议栈中, 然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息;当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接...

2019-09-10 19:07:18 483

原创 分布式缓存Redis

一.Redis的魅力 缓存大致可以分为两类,一种是应用内缓存,比如Map(简单的数据结构),以及EH Cache(Java第三方库),另一种 就是缓存组件,比如Memached,Redis;Redis(remote dictionary server)是一个基于KEY-VALUE的高性能的 存储系统,通过提供多种键值数据类型来适应不同场景下的缓存与存储需求 1.1存储结构...

2019-09-10 19:06:37 700

原创 序列化与反序列化

1. 了解序列化的意义 2. 如何实现一个序列化操作 3. 序列化的高阶认识 4. 常见的序列化技术及应用 5. Protobuf 实现原理分析 6. 序列化框架的选型1.了解序列化的意义 Java 平台允许我们在内存中创建可复用的Java 对象,但一般情况下,只有当 JVM 处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比 JVM 的生命周期更长...

2019-09-10 19:05:55 332

原创 JVM性能调优监控工具

JVM性能调优监控工具 Jinfo 查看正在运行的Java程序的扩展参数 查看JVM的参数 查看java系统属性 等同于System.getProperties() Jstat jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令格式: jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]类加载统计 Lo...

2019-09-02 00:08:37 603 1

转载 为什么说SPI打破双亲委派机制?

简单介绍ClassLoader的双亲委派机制:java类通过Classloader加载,Classloader之间有继承关系,AppClassLoader继承ExtClassloader继承BootstrapClassloader。在类加载时,子加载器会调用父加载器来加载类,如果父加载器不能加载类,才会交给子加载器来加载;如果子加载器也加载失败,那么就报异常。可以看出双亲委派机制是一种至下...

2019-09-01 23:25:59 1861 1

原创 dubbo服务治理之降级和容错

一.dubbo 服务容错1.1 Dubbo提供了多种容错方案,默认值为failover(重试)  1)、Failover Cluster(默认)  失败自动切换,当出现失败,重试其他服务器,通常用于读操作,但重试会带来更长延迟,可以通过属性retries来设置重试次数(不含第一次)  2)、Failfast Cluster  快速失败,只发起一次调用,失败立即报错,通常用于非幂...

2019-08-30 00:09:38 1337

转载 ZooKeeper 应用场景

①作为配置中心;②作为Dubbo 的注册中心也就是发布订阅中心。作为配置中心很多时候我们相同的程序可能部署在多台机器上提升性能,不同的程序也可能有相同的配置文件。如果我们每次修改配置文件,都要一个一个机器修改的话,那么必定非常麻烦。我们可以考虑把应用配置放到 ZooKeeper 上去,也就是保存在 Zookeeper 的某个目录节点中,我们对指定的节点设置一个 Watcher 监听,...

2019-08-29 00:38:06 122

转载 jvm内存管理

运行时数据区域JDK 1.8 之前:JDK 1.8 :线程私有的:程序计数器 虚拟机栈 本地方法栈线程共享的:堆 方法区 直接内存 (非运行时数据区的一部分)2.1 程序计数器程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转...

2019-08-29 00:34:40 133

原创 zookeeper分布式协调服务

zookeeper 的设计猜想 zookeeper 主要是解决分布式环境下的服务协调问题而产生的,如果我们要去实现一个 zookeeper 这样的中间件, 我们需要做什么?1. 防止单点故障 如果要防止 zookeeper 这个中间件的单点故障,那就势必要做集群。而且这个集群如果要满足高性能要求的话,还得是一个高性能高可用的集群。高性能意味着这个集群能够分担客户端的请求流量,高可用意...

2019-08-27 23:58:21 397

转载 Redis与Zookeeper实现分布式锁的区别

一般而言,大多数系统实现分布式锁服务都会优先使用Redis;但阅读Zookeeper时可知,Zookeeper的一个很重要应用方向就是分布式锁。那么两者实现分布式锁服务的区别是什么呢。实现难度Zookeeper实现分布式锁从实现难度上来说,Zookeeper实现非常简单,实现分布式锁的基本逻辑:客户端调用create()方法创建名为“locknode/guid-lock-”的节点,...

2019-08-26 22:16:53 182

转载 ZooKeeper分布式锁

方案一:利用Zookeeper不能重复创建一个节点(临时节点)的特性来实现一个分布式锁流程:查看目标Node是否已经创建,已经创建,那么等待锁。 如果未创建,创建一个瞬时Node,表示已经占有锁。 如果创建失败,那么证明锁已经被其他线程占有了,那么同样等待锁。 当释放锁,或者当前Session超时的时候,节点被删除,唤醒之前等待锁的线程去争抢锁。代码实现:packag...

2019-08-26 22:15:00 142

原创 Redis分布式锁

Redis分布式锁 分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁。可靠性首先,为了确保分布式...

2019-08-26 03:30:38 225

转载 redis 和 memcached 有啥区别?

1. redis 支持复杂的数据结构redis 相比 memcached 来说,拥有更多的数据结构,能支持更丰富的数据操作。如果需要缓存能够支持更复杂的结构和操作, redis 会是不错的选择。2.redis 原生支持集群模式在 redis3.x 版本中,便能支持 cluster 模式,而 memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据。3.性能对...

2019-08-25 22:02:14 81

转载 redis相关面试题

1.Redis有哪些数据结构?字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。Redis中高级用户,还需要加上下面几种数据结构HyperLogLog、Geo、Pub/Sub。( 1.1 HyperLogLog 是用来做基数统计的算法,有误差在0.89%左右,计算基数所需的空间总是固定的、并且是很小的。不会储存输入元素本身,所以 HyperLo...

2019-08-25 21:37:07 279 1

原创 分布式数据一致性

数据一致性:1.异步补偿机制 mq,确保最终一致性2.系统bug,造成系统数据问题 解决方案: 2.1. 核心数据的监控 2.2.数据链路追踪 2.3.自动化数据链路分析...

2019-08-19 20:12:40 125

转载 java-打开文件数(Too many open files)

Linux系统下Java程序抛Too many open files异常,常见于高并发访问文件系统、多线程网络连接等场景。问题排查参考如下:https://blog.csdn.net/c814276009/article/details/84891109...

2019-07-12 21:28:21 567

原创 dubbo学习记录

1.dubbo apache官方文档:http://dubbo.apache.org/zh-cn/docs/user/references/api.html2.dubbo 源码地址:https://github.com/apache/dubbo

2019-07-12 21:27:10 110

原创 maven pom文件的parent节点的元素中不能使用properties里面的变量

1.采坑记录: maven项目构建一直报错,后多次尝试验证发现parent中的版本号引用了properties里面的变量,默认找变量名的版本,而不是变量值得版本,所以找不到parent.特此记录...

2019-07-12 21:22:15 5099

原创 final修饰类 对象 方法 变量的区别

1. final修饰类: 类不能被继承2. final修饰对象: 对象的引用地址不能改变,对象属性可以修改3. final修饰方法: 方法不能被重写4. final修饰变量: 变量会变成常量,值不能被改变...

2019-03-23 21:21:26 826

原创 finally和return执行前后分析

1. finally 是不是一定会执行呢? finally在return之后还是之前执行呢?实例1: private static String test(){ String name = ""; try { name = "zhangsan"; System.out.println("te...

2019-03-23 21:02:50 163

原创 eclipse中tomcat加载项目启动时无.class文件

遇到个问题,项目添加到tomcat之后,tomcat运行发现几秒就启动了,且调用api接口总是404,服务找不到,排查问题,1.查询tomcat服务加载路径 2.进入tomcat的webapps里面的项目查看,发现一个.class文件都没有3.查看 Build Path   编译输入.class文件的目录,正常 4.最后maven依赖配置,发现缺少如下配置,加上再启...

2018-10-12 18:04:36 7743 1

原创 Java监听器Listener使用详解

        Listener基于Servlet API,用于监听web应用中某些对象、信息的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处理。当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。常用于统计在线人数和在线用户,系统加载时进行信息初始化,统计网站的访问量等等。分类:ServletContext对象监听器(ServletContextListene...

2018-08-29 19:53:18 466

原创 spring aop应用

aop前置处理器,获取注解及request:/** * */package com.ctrip.common.aop;import java.lang.reflect.Method;import java.sql.SQLException;import javax.servlet.http.HttpServletRequest;import org.apache.com...

2018-07-23 19:38:59 127

原创 spring bean的加载顺序

一、Spring装配Bean的过程   1. 实例化;  2. 设置属性值;  3. 如果实现了BeanNameAware接口,调用setBeanName设置Bean的ID或者Name;  4. 如果实现BeanFactoryAware接口,调用setBeanFactory 设置BeanFactory;  5. 如果实现ApplicationContextAware,调用setApplicatio...

2018-07-13 16:50:38 698

原创 bean获取的工具类SpringContextUtils

1.SpringContextUtils工具类package com.ctrip.common.util;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;public class SpringContextUti...

2018-07-12 09:31:11 4082

原创 HandlerExceptionResolver异常处理(业务异常)

1.创建业务异常类/** * 业务异常类型 * @author kp.li * */public class BussinessException extends Exception { /** * */ private static final long serialVersionUID = -5201877185169815637L; public Bussiness...

2018-07-09 19:56:46 843

原创 java内存模型和内存分配

jvm内存模型和内存分配1.什么是jvm?(1)jvm是一种用于计算设备的规范,它是一个虚构出来的机器,是通过在实际的计算机上仿真模拟各种功能实现的。(2)jvm包含一套字节码指令集,一组寄存器,一个栈,一个垃圾回收堆和一个存储方法域。(3)JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节...

2018-05-12 18:04:35 1330

原创 java垃圾收集机制

一.何为垃圾()1.1 、引用计数算法(Reference Counting)  介绍:给对象添加一个引用计数器,每当一个地方引用它时,数据器加1;当引用失效时,计数器减1;计数器为0的即可被回收。  优点:实现简单,判断效率高  缺点:很难解决对象之间的相互循环引用(objA.instance = objB; objB.instance = objA)的问题,所以java语言并没有选用引用计数法...

2018-05-08 14:03:23 139

原创 springMVC 启动加载过程

spring启动component-scan类扫描加载过程—源码分析spring通过DispatcherServlet加载:系统配置:<servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.Dis...

2018-05-04 02:25:49 21086 1

原创 分布式--dubbo笔记

Dubbo是一种分布式服务框架。 Webservice也是一种服务框架,但是webservice并不是分布式的服务框架,他需要结合F5实现负载均衡。因此,dubbo除了可以提供服务之外,还可以实现软负载均衡。它还提供了两个功能Monitor 监控中心和调用中心。这两个是可选的,需要单独配置。Dubbo的计数架构图如下:节点角色说明:  Provider: 暴露服务的服务提供方。  Consumer...

2018-05-03 17:14:44 165

原创 java 代理模式的实现及应用

java 代理模式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能1.静态代理静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或者是继承相同父类.代码示例:接口:IUserDao.java/** * 接口 */public inter...

2018-05-03 17:14:20 163

原创 java线程与线程池

Java通过Executors提供四种线程池,分别为:newCachedThreadPool:可缓存线程池newFixedThreadPool:定长线程池newScheduledThreadPool:定长线程池,支持定时及周期性任务执行newSingleThreadExecutor:单线程化的线程池使用Executors哪里有风险?有什么风险?Executors 返回线程池对象...

2018-05-03 14:13:27 191

原创 java se基础--网络编程

十一.网络编程1.要想实现网络传输,需要考虑的问题有哪些?         1.1如何才能准确的定位网络上的一台主机?         1.2如何才能进行可靠的、高效的数据传输? 2.java如何实现的网络通信         2.1使用IP地址---定位一台主机   使用端口号---定位一个应用===>InetAddress类                    >如何创建一个In...

2018-03-19 11:56:56 163

转载 java se基础-类加载器

十二.类加载器1.类的加载过程  JVM将类加载过程分为三个步骤:装载(Load),链接(Link)和初始化(Initialize)链接又分为三个步骤,如下图所示:1) 装载:查找并加载类的二进制数据;2)链接:验证:确保被加载类的正确性;准备:为类的静态变量分配内存,并将其初始化为默认值;解析:把类中的符号引用转换为直接引用;3)初始化:为类的静态变量赋予正确的初始值;         那为什么...

2018-03-19 11:49:56 160

原创 java se基础-多线程

多线程1.理解程序、进程、线程的概念         程序可以理解为静态的代码         进程可以理解为执行中的程序         线程可以理解为进程的进一步细分,程序的一条执行路径2.如何创建java程序的线程(重点)方式一:继承Thread类class PrintNum extends Thread{ public void run(){ ...

2018-03-19 11:45:18 97

原创 java se基础--枚举类和注解

六.枚举类和注解1.如何自定义枚举类.枚举类:类的对象是有限个的,确定的         1.1私有化类的构造器,保证不能在类的外部创建其对象         1.2在类的内部创建枚举类的实例,声明为:publicstatic final         1.3若类有属性,那么属性声明为:privatefinal .此属性在构造器中赋值2.使用enum关键字定义枚举类         2.1其中常...

2018-03-19 11:42:07 169

空空如也

空空如也

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

TA关注的人

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