
java
文章平均质量分 79
kpli90
不进则退
展开
-
JVM性能调优监控工具
JVM性能调优监控工具 Jinfo 查看正在运行的Java程序的扩展参数 查看JVM的参数 查看java系统属性 等同于System.getProperties() Jstat jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令格式: jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]类加载统计 Lo...原创 2019-09-02 00:08:37 · 657 阅读 · 1 评论 -
maven pom文件的parent节点的元素中不能使用properties里面的变量
1.采坑记录: maven项目构建一直报错,后多次尝试验证发现parent中的版本号引用了properties里面的变量,默认找变量名的版本,而不是变量值得版本,所以找不到parent.特此记录...原创 2019-07-12 21:22:15 · 5317 阅读 · 0 评论 -
final修饰类 对象 方法 变量的区别
1. final修饰类: 类不能被继承2. final修饰对象: 对象的引用地址不能改变,对象属性可以修改3. final修饰方法: 方法不能被重写4. final修饰变量: 变量会变成常量,值不能被改变...原创 2019-03-23 21:21:26 · 871 阅读 · 0 评论 -
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 · 182 阅读 · 0 评论 -
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 · 7853 阅读 · 1 评论 -
Java监听器Listener使用详解
Listener基于Servlet API,用于监听web应用中某些对象、信息的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处理。当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。常用于统计在线人数和在线用户,系统加载时进行信息初始化,统计网站的访问量等等。分类:ServletContext对象监听器(ServletContextListene...原创 2018-08-29 19:53:18 · 556 阅读 · 0 评论 -
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 · 732 阅读 · 0 评论 -
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 · 155 阅读 · 0 评论 -
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 · 4136 阅读 · 0 评论 -
HandlerExceptionResolver异常处理(业务异常)
1.创建业务异常类/** * 业务异常类型 * @author kp.li * */public class BussinessException extends Exception { /** * */ private static final long serialVersionUID = -5201877185169815637L; public Bussiness...原创 2018-07-09 19:56:46 · 891 阅读 · 0 评论 -
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 · 138 阅读 · 0 评论 -
分布式数据一致性
数据一致性:1.异步补偿机制 mq,确保最终一致性2.系统bug,造成系统数据问题 解决方案: 2.1. 核心数据的监控 2.2.数据链路追踪 2.3.自动化数据链路分析...原创 2019-08-19 20:12:40 · 158 阅读 · 0 评论 -
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 · 333 阅读 · 1 评论 -
为什么说SPI打破双亲委派机制?
简单介绍ClassLoader的双亲委派机制:java类通过Classloader加载,Classloader之间有继承关系,AppClassLoader继承ExtClassloader继承BootstrapClassloader。在类加载时,子加载器会调用父加载器来加载类,如果父加载器不能加载类,才会交给子加载器来加载;如果子加载器也加载失败,那么就报异常。可以看出双亲委派机制是一种至下...转载 2019-09-01 23:25:59 · 1918 阅读 · 1 评论 -
dubbo服务治理之降级和容错
一.dubbo 服务容错1.1 Dubbo提供了多种容错方案,默认值为failover(重试) 1)、Failover Cluster(默认) 失败自动切换,当出现失败,重试其他服务器,通常用于读操作,但重试会带来更长延迟,可以通过属性retries来设置重试次数(不含第一次) 2)、Failfast Cluster 快速失败,只发起一次调用,失败立即报错,通常用于非幂...原创 2019-08-30 00:09:38 · 1454 阅读 · 0 评论 -
jvm内存管理
运行时数据区域JDK 1.8 之前:JDK 1.8 :线程私有的:程序计数器 虚拟机栈 本地方法栈线程共享的:堆 方法区 直接内存 (非运行时数据区的一部分)2.1 程序计数器程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转...转载 2019-08-29 00:34:40 · 173 阅读 · 0 评论 -
zookeeper分布式协调服务
zookeeper 的设计猜想 zookeeper 主要是解决分布式环境下的服务协调问题而产生的,如果我们要去实现一个 zookeeper 这样的中间件, 我们需要做什么?1. 防止单点故障 如果要防止 zookeeper 这个中间件的单点故障,那就势必要做集群。而且这个集群如果要满足高性能要求的话,还得是一个高性能高可用的集群。高性能意味着这个集群能够分担客户端的请求流量,高可用意...原创 2019-08-27 23:58:21 · 443 阅读 · 0 评论 -
Redis与Zookeeper实现分布式锁的区别
一般而言,大多数系统实现分布式锁服务都会优先使用Redis;但阅读Zookeeper时可知,Zookeeper的一个很重要应用方向就是分布式锁。那么两者实现分布式锁服务的区别是什么呢。实现难度Zookeeper实现分布式锁从实现难度上来说,Zookeeper实现非常简单,实现分布式锁的基本逻辑:客户端调用create()方法创建名为“locknode/guid-lock-”的节点,...转载 2019-08-26 22:16:53 · 227 阅读 · 0 评论 -
ZooKeeper分布式锁
方案一:利用Zookeeper不能重复创建一个节点(临时节点)的特性来实现一个分布式锁流程:查看目标Node是否已经创建,已经创建,那么等待锁。 如果未创建,创建一个瞬时Node,表示已经占有锁。 如果创建失败,那么证明锁已经被其他线程占有了,那么同样等待锁。 当释放锁,或者当前Session超时的时候,节点被删除,唤醒之前等待锁的线程去争抢锁。代码实现:packag...转载 2019-08-26 22:15:00 · 196 阅读 · 0 评论 -
序列化与反序列化
1. 了解序列化的意义 2. 如何实现一个序列化操作 3. 序列化的高阶认识 4. 常见的序列化技术及应用 5. Protobuf 实现原理分析 6. 序列化框架的选型1.了解序列化的意义 Java 平台允许我们在内存中创建可复用的Java 对象,但一般情况下,只有当 JVM 处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比 JVM 的生命周期更长...原创 2019-09-10 19:05:55 · 394 阅读 · 0 评论 -
Redis分布式锁
Redis分布式锁 分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁。可靠性首先,为了确保分布式...原创 2019-08-26 03:30:38 · 265 阅读 · 0 评论 -
redis 和 memcached 有啥区别?
1. redis 支持复杂的数据结构redis 相比 memcached 来说,拥有更多的数据结构,能支持更丰富的数据操作。如果需要缓存能够支持更复杂的结构和操作, redis 会是不错的选择。2.redis 原生支持集群模式在 redis3.x 版本中,便能支持 cluster 模式,而 memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据。3.性能对...转载 2019-08-25 22:02:14 · 109 阅读 · 0 评论 -
java内存模型和内存分配
jvm内存模型和内存分配1.什么是jvm?(1)jvm是一种用于计算设备的规范,它是一个虚构出来的机器,是通过在实际的计算机上仿真模拟各种功能实现的。(2)jvm包含一套字节码指令集,一组寄存器,一个栈,一个垃圾回收堆和一个存储方法域。(3)JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节...原创 2018-05-12 18:04:35 · 1388 阅读 · 0 评论 -
java垃圾收集机制
一.何为垃圾()1.1 、引用计数算法(Reference Counting) 介绍:给对象添加一个引用计数器,每当一个地方引用它时,数据器加1;当引用失效时,计数器减1;计数器为0的即可被回收。 优点:实现简单,判断效率高 缺点:很难解决对象之间的相互循环引用(objA.instance = objB; objB.instance = objA)的问题,所以java语言并没有选用引用计数法...原创 2018-05-08 14:03:23 · 170 阅读 · 0 评论 -
java se基础 -- 数组
一.数组1.数组概述:相同数据类型的数据组合2.使用数组2.1数组的初始化 int[] scores1 = new int[]{72,90,59};//静态初始化数组 intscores2[] = new int[3];//动态初始化:在声明并初始化数组与给数组响应的元素赋值操作分开进行. scores2[0] = 72; scores...原创 2018-03-19 10:51:48 · 209 阅读 · 0 评论 -
java se基础--I/O流
IO流1.java.io包下File类:java程序中的此类的一个对象,就对应着硬盘中的一个文件或网络中的一个资源.File file1 = new File("d:\\io||helloworld.txt");File file2 = new File("d:\\io\\io1");>1.File即可以表示一个文件(.doc .xls .mps .avi .jpg .dat),也可以...原创 2018-03-19 10:35:41 · 178 阅读 · 0 评论 -
spring Quartz和 Spring Task定时任务
spring Quartz 和 Spring Task执行时间对比: 1. Quartz设置同步模式时:一个任务的两次执行的时间间隔是:“执行时间”和“trigger的设定间隔”的最大值 2. Task默认同步模式:一个任务的两次执行的时间间隔是:“执行时间”+“trigger的设定间隔”,即一个任务完成执行后,才开始trigger计时Spring Quartz 特点: 1原创 2017-11-26 22:11:41 · 228 阅读 · 0 评论 -
java反射机制
java反射机制 详解1.如何创建Class的实例(重点) 1.1过程:源文件经过编译(javac.exe)以后,得到一个或多个.class文件。.class文件经过运行(java.exe)这步.就需要进行类的加载(通过JVM的类的加载器),记载到内存中的缓存,每一个放入缓存中的.class文件就是一个Class的实例! 1.2Class的一个对象,对应...原创 2017-07-06 15:08:21 · 181 阅读 · 0 评论 -
Java Annotation注解 简介
Java Annotation 简介 一、Annotation 示例Override AnnotationJava12@Overridepublic void onCreate(Bundle savedInstanceState);Retrofit AnnotationJava1原创 2017-07-06 14:45:01 · 272 阅读 · 0 评论 -
Spring容器ApplicationContext实现和配置WebApplicationContext
Spring容器ApplicationContext实现和配置WebApplicationContext原创 2017-07-07 09:35:11 · 970 阅读 · 0 评论 -
基于@Aspect的AOP配置
Spring除了支持Schema方式配置AOP,还支持注解方式:使用@Aspect来配置转载 2016-12-09 10:18:45 · 210 阅读 · 0 评论 -
log4j详细教程
log4j日志_笔记1.Log4J基本使用方法Log4j由三个重要的组件构成:日志信息的优先级(level),日志信息的输出目的地(appender),日志信息的输出格式(layout)。日志信息的优先级从低到高有ALL 日志信息的输出目的地指定了日志将打印到控制台还是文件中;输出格式则控制了日志信息的显示内容2.Appender 为日志输出目的地,Log4j提供的原创 2017-07-05 16:07:36 · 188 阅读 · 0 评论 -
jboss容器,web整站https环境下使用(spring mvc)redirect重定向到http协议问题
问题描述: 项目部署在jboss中,整站在https下运行,当通过spring redirect 内部跳转时,链接地址有https开头转变为http开头,在这样情况下导致项目请求无法访问。解决办法: 设置为false,即关闭了对http1.0协议的兼容支持 -->class="org.springf转载 2017-07-04 11:21:02 · 1947 阅读 · 0 评论 -
java se基础--面向对象
面向对象1.面向对象 vs 面向过程2.面向对象编程的三条主线: 1)类及类的构成成分:属性 方法 构造器 代码块 内部类 2)面向对象编程的特征: 封装性 继承性 多态性 (抽象性) 3)其他的关键字:this super package import static final abstract interface .........原创 2018-03-19 11:21:47 · 195 阅读 · 0 评论 -
java se基础--异常处理
三.异常处理1.体系结构 java.lang.Object |-----java.lang.Throwable |-------java.lang.Error:错误,java程序对此无能为力,不显式的处理 ...原创 2018-03-19 11:27:57 · 171 阅读 · 0 评论 -
java se基础--集合
集合1.对象的存储 : 1)数组(基本数据类型 & 引用数据类型) 2)集合(引用数据类型) >数组存储数据的弊端:长度一旦初始化以后,就不可变;真正给数组元素赋值的个数没有现成的方法可用.2.集合框架Collection接口:方法:1)add(Objectojb),addAll(Collection coll),size(),clear(),is...原创 2018-03-19 11:36:32 · 182 阅读 · 0 评论 -
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 · 21212 阅读 · 1 评论 -
java 代理模式的实现及应用
java 代理模式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能1.静态代理静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或者是继承相同父类.代码示例:接口:IUserDao.java/** * 接口 */public inter...原创 2018-05-03 17:14:20 · 193 阅读 · 0 评论 -
java线程与线程池
Java通过Executors提供四种线程池,分别为:newCachedThreadPool:可缓存线程池newFixedThreadPool:定长线程池newScheduledThreadPool:定长线程池,支持定时及周期性任务执行newSingleThreadExecutor:单线程化的线程池使用Executors哪里有风险?有什么风险?Executors 返回线程池对象...原创 2018-05-03 14:13:27 · 221 阅读 · 0 评论 -
分布式--dubbo笔记
Dubbo是一种分布式服务框架。 Webservice也是一种服务框架,但是webservice并不是分布式的服务框架,他需要结合F5实现负载均衡。因此,dubbo除了可以提供服务之外,还可以实现软负载均衡。它还提供了两个功能Monitor 监控中心和调用中心。这两个是可选的,需要单独配置。Dubbo的计数架构图如下:节点角色说明: Provider: 暴露服务的服务提供方。 Consumer...原创 2018-05-03 17:14:44 · 192 阅读 · 0 评论