java
文章平均质量分 62
Spring......
热爱软件行业
展开
-
HashMap扩容源码分析
扩容resize方法HashMap底层哈希桶的数据结构是数组,所以也会涉及到扩容的问题。当HashMap的容量达到threshold域值时,就会触发扩容。扩容前后,哈希桶的长度一定会是2的次方。那么到底是怎么扩容的呢?又有哪些精妙的设计呢?一起来看看源码吧final Node<K,V>[] resize() { //oldTab 为当前表的哈希桶 Node<K,V>[] oldTab = table; //当前哈希桶的容量 len原创 2022-04-14 11:21:23 · 764 阅读 · 0 评论 -
fastjson使用实例 TypeReference
一直用FastJson 做rest接口的序列化,FastJson对泛型的支持也非常好。经过一段时间使用后发现不定时的会报JsonObject can’t covert to ****的错误,但是重启之后就好了。排查过程不赘述,直接上代码演示String itemJsonStr = "{\"models\":{\"_defaultModel\":{\"id\":824,\"itemName\"...转载 2019-10-16 12:08:37 · 635 阅读 · 0 评论 -
zookeeper学习(五)
在前一篇中,写了Zookeeper的相关概念,以及节点、acl,watcher等机制,这一篇就写一下保证ZK集群高可用及数据一致性的底层实现算法:ZAB协议。ZAB协议概述在前面的文章中,介绍了经典的分布式数据一致性算法Paxos算法,但事实上zookeeper并没有采用完全的Paxos算法,而是采用了一种称为Zookeeper Atomic Broadcast(ZAB,zookeeper原子...转载 2018-12-29 16:39:59 · 272 阅读 · 0 评论 -
消息不符合预期的问题
近期做了一个开发,大致写了这么个东西:rocketMq 用同一个consumeID,起了两个listener,分别接收了同一个topic中的不同tag中的数据。出现的问题:消费端有时候可以收到数据,有时间收不到数据。经运维同事查了消费轨迹发现,问题出在订阅关系不一致。rocketMq描述订阅关系不一致:在不同的 JVM 中启动了多个 Consumer,并且给相同的 Consumer ...原创 2018-12-18 21:56:57 · 678 阅读 · 0 评论 -
XStream使用详解
http://x-stream.github.io/tutorial.html xstream官方教程 http://www.cnblogs.com/LiZhiW/p/4313493.html#_label3 xstream基本的教程原创 2018-11-23 12:02:48 · 789 阅读 · 0 评论 -
Cglib动态代理
上一篇我们学习了JDK 动态代理的实现逻辑,这里我们来学习一下Cglib 的实现逻辑。以方便对动态代理有一个全面的认识。首先,我们来看一下生成代理类的时序图,对比起JDK的实现,它复杂了很多。整体看上去比较难以理解,那我们来看下这些类图,可能更加清晰些。来看看入口类 Enhancer ,它继承自 AbstractClassGenerator ,而 AbstractClassGe...原创 2018-09-28 15:21:13 · 162 阅读 · 0 评论 -
Jdk 动态代理
在Jdk 动态代理使用的过程中,程序入口为 Proxy.newProxyInstance, 通过对程序调用的跟踪,可以得到如下时序图。在 newProxyInstance 方法里面,主要做了两件事情:一、生成指定的代理类;二、使用 InvocationHandler 创建一个代理类实例;public static Object newProxyInstance(ClassLo...原创 2018-09-28 11:33:49 · 202 阅读 · 0 评论 -
java多线程—1.并发编程的优缺点
一直以来并发编程对于刚入行的小白来说总是觉得高深莫测,于是乎,就诞生了想写点东西记录下,以提升理解和堆并发编程的认知。为什么需要用的并发?凡事总有好坏两面,之间的trade-off是什么,也就是说并发编程具有哪些缺点?以及在进行并发编程时应该了解和掌握的概念是什么?这篇文章主要以这三个问题来谈一谈。1. 为什么要用到并发一直以来,硬件的发展极其迅速,也有一个很著名的"摩尔定律",可能会奇怪明明讨论...原创 2018-06-13 22:41:21 · 238 阅读 · 0 评论 -
Servlet 单例多线程
Servlet如何处理多个请求访问?Servlet容器默认是采用单实例多线程的方式处理多个请求的:1.当web服务器启动的时候(或客户端发送请求到服务器时),Servlet就被加载并实例化(只存在一个Servlet实例);2.容器初始化化Servlet主要就是读取配置文件(例如tomcat,可以通过servlet.xml的<Connector>设置线程池中线程数目,初始化线程池通...转载 2018-04-25 14:50:50 · 100 阅读 · 0 评论 -
Java 8 中的 Streams API 详解
为什么需要 StreamStream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象...转载 2018-04-18 18:01:15 · 245 阅读 · 0 评论 -
Java垃圾回收(GC)机制详解
一、为什么需要垃圾回收 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收。除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此。所以,垃圾回收是必须的。二、哪些内存需要回收?哪些内存需要回收是垃圾回收机制第一个要考虑的问题,所谓“要回收的垃圾”无非就是那些不可能再被任何途径使用的对象。那么如何找到这些对象?1、引用计数法这个算法的实现是,给对象中添加一个...原创 2018-04-18 11:31:11 · 189 阅读 · 0 评论 -
java内存模型
java虚拟机的的内存分为3个区域,栈、堆、方法区。 1.栈: 1)栈是是描述方法执行的内存模型,每一个方法被调用都会创建一个栈帧(存储操作数,局部变量,方法出口等)。 2)jvm会为每一个线程创建一个栈,用于存储该线程执行方法的信息(实际参数、局部变量等)。 3)栈是线程私有,不能实现线程共享。 4)栈的存储特性:先进后出,后进先出。 ...原创 2018-04-18 10:25:38 · 148 阅读 · 0 评论 -
Java 8 Optional类深度解析
身为一名Java程序员,大家可能都有这样的经历:调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法。我们首先要判断这个返回值是否为null,只有在非空的前提下才能将其作为其他方法的参数。这正是一些类似Guava的外部API试图解决的问题。一些JVM编程语言比如Scala、Ceylon等已经将对在核心API中解决了这个问题。在我的前一篇文章中,介绍了Scala是如何解决了这个问题。新版...转载 2018-04-04 17:27:45 · 269 阅读 · 0 评论 -
this.class.getProtectionDomain().getCodeSource().getLocation()
this.class.getProtectionDomain().getCodeSource().getLocation()如果直接执行.class文件那么会得到当前class的绝对路径。如果封装在jar包里面执行jar包那么会得到当前jar包的绝对路径。String path = getClass().getProtectionDomain().getCodeSource().getLocati...原创 2018-04-09 15:16:52 · 8915 阅读 · 0 评论 -
fastjs转化序列化对象时,属性为空(null)的转化为“”(空字符串)
对规则的理解:SerializerFeature.WriteMapNullValue 是否输出值为null的字段,默认为false也就是说有null时会输出而不是忽略(默认策略是忽略,所以看不到为null的字段)WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,而非null 注意是字段是字段是字段,而不是json.put("key",null),所以用它时,字段...转载 2018-03-02 17:41:04 · 3375 阅读 · 1 评论 -
zookeeper学习(二)
Zookeeper系列,会从分布式一致性理论开始介绍,设计诸如:CAP,BASE理论,分布式一致性算法:2PC,3PC,Paxos,ZAB以及Zookeeper的节点特性,Zookeeper如何保证一致性及高可用,最后会介绍zk的各种应用。 关于数据的一致性,我们在数据库中有了解过,因为数据库事务的ACID特性的C就代表一致性,这ACIC可以简单的把一致性理解为...转载 2018-12-29 16:20:51 · 165 阅读 · 0 评论 -
zookeeper学习(三)
在上一篇中,我们介绍了为什么使用分布式,为什么会出现分布式数据一致性问题,以及相关分布式理论:CAP/BASE理论,这些是我们进行后边介绍的分布式一致性算法的基础,正是由于在系统的可用性和数据一致性之间反复的权衡,于是出现了一系列的一致性协议,如2PC,3PC,paxos算法等。本篇就介绍两个最常见的分布式一致性算法:两阶段提交(2PC),三阶段提交(3PC)以及它们的相关应用。其...转载 2018-12-29 16:32:19 · 321 阅读 · 0 评论 -
zookeeper学习(四)
在zookeeper系列的前三篇,介绍分布式数据一致性的相关原理及经典的分布式一致性算法,比如:2PC,3PC,Paxos算法。在本篇,我们正式开始介绍Zookeeper,Zookeeper是分布式一致性问题的工业解决方案,是常用的分布式协调框架。本篇,会介绍Zookeeper的基本概念,数据模型,节点特性,Watcher机制及ACL等机制,在后边我们会介绍Zookeeper为了保证一致性使用的算...转载 2018-12-29 16:37:12 · 292 阅读 · 0 评论 -
SpringCloud学习(二)断路器
熔断器雪崩效应在微服务中通常会有多个服务层的调用,基础服务的故障可能造成级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。如果下图所示:A作为服务提供者,B为A的服务消费者,C和D是B的服务消费者。A不可用引起了B的不可用,并将不可用像滚雪球一样放大到C和D时,雪崩效应就形成了。...原创 2019-07-12 21:41:32 · 253 阅读 · 0 评论 -
explain用法和结果分析
1. EXPLAIN简介 使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。通过explain我们可以获得以下信息:表的读取顺序 数据读取操作的操作类型 哪些索引可以使用 哪些索引被实际使用 表之间的引用 每张表有多少行被优化器查询使用方法:explain + sql语句。 ...原创 2019-06-26 14:59:12 · 35913 阅读 · 1 评论 -
SpringCloud学习(一)入门服务的注册、发现、调用
服务的注册与发现注册中心(eureka server)使用eureka作为注册中心。创建eureka-service工程创建工程,选择Spring Initializ如下图下一步->选择cloud discovery->eureka server ,然后一直下一步就行了。配置servereureka是一个高可用的组件,它没有后端缓存,每一个实例注册之后需要向注册...原创 2019-06-14 16:50:46 · 148 阅读 · 0 评论 -
redis学习(一)redis原理
过期时间的设置redis中提供了expire命令来设置一个key的过期时间。expire命令为:expire key seconds 时间单位为秒 返回1标识设置成功,返回0表示设置失败或者key不存在ttl key 返回过期时间。当前key不存在返回-2 未设置过期时间返回-1persist命令 将当前key设置为永久,如果该命令执行成功或者成功清除了过期时间,则返回1 。 否则...原创 2019-04-02 07:12:54 · 247 阅读 · 0 评论 -
搭建基于mysql验证的ftp并实现零配置新增虚拟用户
配置FTP服务器 1.在FTP服务器上安装vsftpd和pam_mysql包 centos6.x中安装 pam_mysql需要先安装,epel源 yum -y install epel 安装完成后可用命令 :yum repolist 检查是否安装成功 接下来安装pam_mysql 和vsftpd yum installvsftpd pam_mysql...原创 2019-03-27 17:09:48 · 206 阅读 · 0 评论 -
redis学习(二)redis集群
虽然redis有持久化功能能够保障redis服务器宕机也能恢复并且只有少量的数据损失,但是由于所有数据在一台服务器上,如果这台服务器出现硬盘故障,那就算是有备份也仍然不可避免数据丢失的问题。在实际生产环境中,我们不可能只使用一台redis服务器作为我们的缓存服务器,必须要多台实现集群,避免出现单点故障;下面来看下redis的集群策略主从复制复制的作用是把redis的数据库复制多个副本部署在不同...原创 2019-04-03 21:31:21 · 334 阅读 · 0 评论 -
centos 6.5配置epel源
EPEL (Extra Packages for Enterprise Linux,企业版Linux的额外软件包) 是Fedora小组维护的一个软件仓库项目,为RHEL/CentOS提供他们默认不提供的软件包。1. 确认CentOS 的版本#cat /etc/issue2. 下载epel 的rpm 安装包下载CentOS 6版本所对应的epel 的版本#wget http:/...原创 2019-03-21 10:20:19 · 748 阅读 · 0 评论 -
TCP的三次握手四次挥手
序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前...原创 2019-03-12 16:51:14 · 213 阅读 · 0 评论 -
Java SPI 学习
什么是java SPI SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。目前市面上有很多框架都是用它来做服务的扩展发现,大家耳熟能详的...原创 2019-03-20 18:04:25 · 139 阅读 · 0 评论 -
zookeeper学习(十)
利用zookeeper做配置中心在zk中创建持久化节点并赋值,如图我创建jdbc连接相关的参数值新建一个zookeeper配置中心类,从zookeeper动态获取数据库配置package com.pxc.zk.learn.configCenter;import com.alibaba.druid.pool.DruidDataSource;import org.apache.c...原创 2019-01-29 11:39:41 · 215 阅读 · 1 评论 -
zookeeper学习(九)
zk实现分布式锁的原理 利用zk的节点特性:临时有序节点。当zookeeper客户端需要抢夺某个资源时,会先在/locker节点下创建临时有序节点,通过监听比自己序号次小的节点的删除事件,来进行一些逻辑,判断自己的节点是否为/locker所有子节点中序号最小的,如果是那么就使用资源,使用完之后,再释放资源删除对应节点。如下图:&amp;mmsp; 原理流程图:Curator实现分布式...原创 2019-01-21 16:16:29 · 179 阅读 · 0 评论 -
zookeeper学习(一)
zookeeper集群环境的搭建: 本次搭建采用3台服务器搭建一个zookeeper集群 ,ip分别为:192.168.11.119 ,192.168.11.121 ,192.168.11.122 1.上传压缩包到3台服务器并解压,此处略过 2.进入解压目录到conf下 , copy一份zoo.cfg 命令:cp zoo_sample.cfg z...原创 2018-12-25 19:24:29 · 183 阅读 · 0 评论 -
zookeeper学习(八)
&amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp;今天使用zookeeper的javaApi,来实现zk的基础操作,watch的实现,以及Acl权限的使用基于javaApi实现zk节点的增、删、改countDownLatch.await(); //创建节点(持久化节点) Stri原创 2018-12-29 18:40:22 · 114 阅读 · 0 评论 -
深入浅出parallelStream
about Stream什么是流?Stream是java8中新增加的一个特性,被java猿统称为流.Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator。原始版本的 Iterator,用户只能显式地一个一个遍历元素并对其执行某些操作;高级版本的 Stream,用户只要给出需要对其包含的元素执行什么操作,比如 “过滤掉长度大于 10 的...转载 2018-03-01 10:04:57 · 343 阅读 · 0 评论 -
Java ExecutorService四种线程池的例子与说明
1、new Thread的弊端执行一个异步任务你还只是如下new Thread吗?[java] view plain copynew Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }).start(); 那你...转载 2018-02-28 15:30:38 · 126 阅读 · 0 评论 -
Struts2中是用拦截器拦截黑名单的demo
1.interceptor的实例,重要的是如何获取请求的参数package com.sid.interceptor;import java.util.Map;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwo原创 2016-08-09 14:01:00 · 1259 阅读 · 0 评论 -
SpringMVC中的日期转换器和编码过滤器
日期转换器 在默认情况下,springmvc不能将String类型转成Date类型,必须自定义类型转换器 1) 如果action是继承自AbstractCommandController,则可以重写initBinder(HttpServletRequest request,ServletRequestDataBinder binder)方法实现:public class AdminActi原创 2016-06-19 20:02:04 · 715 阅读 · 0 评论 -
视图解析器InternalResourceViewResolver
SpringMVC中视图解析器用于解析Action中视图逻辑名对应的真实路径。 Action中可以写视图的真是路径,如return "/jsp/success.jsp";也可以写逻辑名,如return "success";如果采用真是路径,则不需配置视图解析器。若采用逻辑名则需配置视图解析器,如下 <bean class="org.springframework.web.servlet.vie原创 2016-06-19 19:49:41 · 642 阅读 · 0 评论 -
SpringMVC加载自定义目录下的springmvc.xml配置文件
在默认情况下:springmvc框架的配置文件必须叫-servlet.xml 且必须放在/WEB-INF/目录下,我们可以在web.xml文件中,为DispatcherServlet配置一个初始化参数,让它去我们指定的目录下加载springmvc.xml(名字不固定,可以是spring.xml)配置文件,web.xml代码如下:<servlet> <servlet-name>Dis原创 2016-06-19 19:37:05 · 3353 阅读 · 0 评论 -
Springmvc快速入门(XML版本)简单配置
步一:创建springmvc-day01这么一个web应用 步二:导入springioc,springweb , springmvc相关的jar包 步三:在/WEB-INF/下创建web.xml文件<!-- 注册springmvc框架核心控制器 --> <servlet> <servlet-name>DispatcherServlet</servlet-name>原创 2016-06-17 17:43:07 · 370 阅读 · 0 评论 -
Spring学习(二)
SpringIOC容器 SpringIOC容器,是spring核心内容。 作用: 创建对象 & 处理对象的依赖关系 IOC容器创建对象: 创建对象, 有几种方式: 1) 调用无参数构造器 2) 带参数构造器 3) 工厂创建对象 工厂类,静态方法创建对象 工厂类,非静态方法创建对象<?xml version="1.0" encod原创 2016-06-15 15:31:34 · 236 阅读 · 0 评论 -
Spring10种常见异常解决方法
在程序员生涯当中,提到最多的应该就是SSH三大框架了。作为第一大框架的Spring框架,我们经常使用。然而在使用过程中,遇到过很多的常见异常,我在这里总结一下,大家共勉。一、找不到配置文件的异常[plain] view plaincopyorg.springframework.beans.factory.BeanDefinitionSto转载 2016-06-17 11:33:30 · 607 阅读 · 0 评论