
Java
阿健2020
Java开发工程师
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JVM虚拟机系列 - 常用JVM命令和工具(网上汇总集锦)
通过案例切入1.CPU百分比怎么定位?可以使用arthas去定位。通过在dashboard界面,就可以看出那个线程占用cpu的比比较高,所以这里线程的名字一定要有意义。假如说是gc线程,那么可能是gc出了问题,要去观察gc日志,看是不是full gc。如果是业务线程,可以通过thread命令,thread指定线程ID,查看线程堆栈,根据堆栈信息,再进一步定位代码。2.频繁FGC怎么定位?可以通过jmap命令定位,命令列表:https://www.cnblogs.com/k原创 2020-06-27 16:48:27 · 232 阅读 · 0 评论 -
JVM虚拟机系列 - 垃圾收集器机制
背景分析垃圾收集器,主要从以下几个方面入手:1)什么是垃圾,什么样的对象要被回收?2)如何定位垃圾?3)垃圾清除算法4)经典垃圾收集器1.什么是垃圾?通俗来说:一个对象没有任何引用指向它,这样的对象就是垃圾。2.如何定位垃圾?1.引用计数法在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。缺陷:无法解决循环引用的问题。如下图:A,B,C三个对象互相持有对方原创 2020-06-26 21:59:13 · 923 阅读 · 1 评论 -
JVM虚拟机系列 - classloader机制
什么是类加载器?通过一个类的全限定名来获取描述该类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码被称为“类加载器”。对于任意一个类,都必须由加载它的类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性。类相等机制?相等的规则:这里所指的“相等”,包括代表类的Class对象的equals()方法、isAssignableFrom()方法、isInstance()方法的返回结果,也包括了使用instanceof关键字原创 2020-06-25 18:32:03 · 205 阅读 · 0 评论 -
JVM虚拟机系列 - 基础知识之Java运行时区域&&HotSpot内部对象解密
背景要想学懂JVM,必须先搞清楚JVM的基础知识,基础知识从《深入理解Java虚拟机,第三版》整理而来,通过思维导图的方式更加清晰。思维导图原创 2020-06-25 15:12:29 · 173 阅读 · 0 评论 -
Java并发系列 - CAS,锁升级,synchronized
CAS想要详细的了解cas,需要分别从是什么,什么用,以及实现原理三个方面入手,最后再去看cas在jdk并发包中的实践。CAS详解cas是compare and swap的缩写,比较并交换。cas在java内定义是自旋锁,自旋锁是一种比较轻量级的锁。cas自旋锁实现的整体流程:举个例子:假如说,现在要利用cas计算x = 0; x+1这个操作。这个操作会有多个线程并发访问,如果不加锁,最终的计算结果肯定是错误的,所以这里可以使用cas自旋锁去计算。整体流程如下:1)先把x=0原创 2020-06-23 22:58:32 · 844 阅读 · 0 评论 -
Java并发系列 - 详解Volatile
Volatile是我们在并发编程中经常会碰到的关键字。关于volatile的文章,网上已经非常多了。本文开门见山,结合底层原理以及实际使用场景,分别从以下几个维度,深入剖析volatile关键字。1)作用2)实现原理3)实际案例4)JMM中与Volatile相关的内容作用1) 可见性。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。被volatile修饰的变量具有可见性。2)禁用指令重排序。重排序:CPU会对指令进行重排序优化,假如说有,x=1,y原创 2020-06-18 23:28:10 · 228 阅读 · 0 评论 -
Redis系列 - 持久化机制探究
背景Redis的数据都在内存里面,如果服务突然宕机,数据岂不是全丢了,别慌,Redis通过了持久化机制来保证数据不丢失。Redis的持久化集中制包括:1)RDB 2)AOF 3)混合持久化。混合持久化是从Redis4.0开始支持。RDB方式什么是rdb持久化,rdb持久化可以理解为在某个时间点对所有数据做一次快照。触发RDB的方式?1)通过修改redis配置文件。SAVE 900 1 代表900秒内有一条命令写入就执行快照。SAVE 300 10 代表300秒内有十条命令..原创 2020-06-13 15:37:39 · 674 阅读 · 0 评论 -
Redis系列 - Redis基础数据结构
Redis安装Window安装Redis只能安装3.x的低版本,最新的6.x根本无法尝鲜。从知乎的一个帖子得知可以在win10开启linux子系统支持来安装Linux,然后再安装Redis。注意不是虚拟机的模式,子系统要比虚拟机轻量的多。具体过程:1) 完成win10的linux子系统Ubuntu的安装,具体步骤参考:https://zhuanlan.zhihu.com/p/563745342)在win10运行Ubuntu,然后安装redis。采用的是从redis官网下载安装包,自己编译安装原创 2020-06-12 19:03:14 · 271 阅读 · 0 评论 -
Zookeeper系列 - Zab选举简单分析
什么是Zab协议定义:ZooKeeper并没有完全采用Paxos算法,而是使用了一种称为ZooKeeper Atomic Broadcast(ZAB,ZooKeeper原子消息广播协议)的协议作为其数据一致性的核心算法。ZAB协议并不像Paxos算法那样,是一种通用的分布式一致性算法,它是一种特别为ZooKeeper设计的崩溃可恢复的原子消息广播算法。作用:在ZooKeeper中,主要依赖ZAB协议来实现分布式数据一致性,基于该协议,ZooKeeper实现了一种主备模式的系统架构来保持集群中原创 2020-06-10 21:07:41 · 356 阅读 · 0 评论 -
Zookeeper系列 - Leader选举
前置准备为了彻底搞懂zk选举leader的过程,需要在windows本地搭建一个伪集群出来,通过实际操作,观察集群的节点的变化。但是在实操过程中,发现windows搭建的一些坑,这记录下。伪集群搭建步骤1.参考此博客进行搭建,https://www.cnblogs.com/qlqwjy/p/10491456.html2.依次启动,启动后,无法使用zkServer.cmd status命令,无法观察哪一个节点是leader,各种查阅后,发现zkServer.cmd在windows上就是用不了,原创 2020-06-08 22:55:21 · 1152 阅读 · 0 评论 -
Zookeeper系列 - 利用ZK实现分布式锁
背景在微服务的场景中,经常会遇到需要分布式锁的场景,至于说分布式锁的实现,常见的有两种,1)Redis 2)Zookeeper,其实现各有优缺点。Redis实现优点:性能好,调用RT短。 实现简单,基于setnx命令与expire命令即可。Redis实现缺点:expire过期时间不好控制。 假如redis服务宕机,会造成锁释放不了,从而死锁。Zookeeper实现优点:不会死锁,采用临时节点,zk宕机后,临时节点即自动断开。 通过友好的设计,可避免zk的羊群效应。Zookee原创 2020-06-07 12:46:07 · 467 阅读 · 1 评论 -
Dubbo系列 - 整体架构
架构概览 Provider导出一个服务,这个服务就是可被调用的; 第二步,往注册中心注册这个服务; Consumer 这端会来订阅相关的服务,如果注册中心里面,Provider 列表有变化的话,它也会得到通知; Consumer 会根据一定的路由规则从注册中心拿到 Provider 列表,再根据一定的负载均衡策略,精确地调用到某台 Provider 上去。 问题或改进点案例在杭州有一家中等规模的电商公司,公司内部有 4000+ 个服务,以 Zookee原创 2020-06-04 21:13:41 · 274 阅读 · 0 评论 -
Kafka系列 - 可靠性如何保障&&多线程消费
kafka可靠性如何保障多线程消费原创 2020-05-31 22:03:16 · 422 阅读 · 0 评论 -
Kafka系列 - 深入探究broker
1.背景主要从控制器、consumer主题管理、kafka的副本机制三个方面对broker进行深入研究,梳理清楚broker端的一些基础流程。2.控制器控制器的作用?在 Kafka 集群中会有一个或多个 broker,其中有一个 broker 会被选举为控制器(KafkaController)。1.管理整个集群中所有分区和副本的状态。比如:某分区leader副本出现故障,控制器为该分区选举leader副本。ISR发生变化,控制器通知所有broker更新元数据。2.控制器负责分区的重新原创 2020-05-30 17:31:56 · 1038 阅读 · 1 评论 -
Kafka系列 - 深入探究-生产者与消费者
1.背景kafka三端深入,三端是我自己定义的,即:生产者,消费者,broker。这里主要围绕三端展开一些原理性的深入研究。主要内容如下:2.生产者2.1 代码实践原创 2020-05-28 21:43:34 · 515 阅读 · 0 评论 -
Kafka系列 - kafka基础认知
kafka是什么?kafka是一个分布式的,基于发布、订阅的消息系统。目前主流互联网公司都在使用kafka,常见的一些使用场景:实时计算、实时推荐、实时风控、埋点监控等。所有的这些业务场景,都依赖kafka作为中间的一个消息系统,比如:数据从mysql binlog日志经过kafka,再到flink计算引擎,数据从logtail日志采集客户端,经过kafka,再到下游业务系统进行埋点处理。为何这么多业务场景都偏爱kafka?其本质原因是:削峰填谷。防了防止大的流量直接让下游应用雪崩,那么为何选择ka原创 2020-05-23 11:39:38 · 500 阅读 · 1 评论 -
Spring Aop - Transactional注解原理深入剖析-第九篇
在研究Spring Aop Transaction之前,阅读了其他同学写的csdn的文章,这些文章对于事物切面执行的逻辑剖析的非常详细。但是我始终有一个疑问,就是我写了一个Service,是在什么阶段,通过Spring的哪个拓展点,生成的事物对象,翻阅了很多人的文章,始终没有找到满意答案,自己做了个Demo,从头到尾Debug了几遍,终于搞清楚了,瞬间豁然开朗。主要是从三个大的方面按照顺序去剖析:1.Spring tx包内的自定义标签解析。2.生成事物代理对象的过程。3.事物真正执行的过程。实际例子.原创 2020-05-19 21:13:13 · 676 阅读 · 1 评论 -
Spring Aop - 使用ProxyFactoryBean实现Aop原理-第八篇
概述使用ProxyFactoryBean来演示如何生成一个代理对象,并执行aop的过程,ProxyFactoryBean即前文交待的FactoryBean的子类,这里可以再回忆下FactoryBean与BeanFactory的区别,具体文章:https://blog.youkuaiyun.com/y510662669/article/details/105664281ProxyFactoryBean见文知意,即用来生成代理的工厂bean。生成的bean是一个代理bean。类结构ProxyConfig原创 2020-05-11 23:34:40 · 872 阅读 · 0 评论 -
Spring Aop - Aop概念以及代理模式-第七篇
什么是Aop?AOP是Aspect-Oriented Programming(面向方面编程或面向切面)的简称,最主要的是从业务代码中找到关键的关注点,并分离关注点,使解决特定领域问题(日志,监控)的代码从业务逻辑中独立出来,业务逻辑的代码中不再含有针对特定领域问题代码的调用,业务逻辑同特定领域问题的关系通过切面来封装、维护,这样原本分散在整个应用程序中的变动就可以很好地管理起来。Aop相关...原创 2020-05-09 18:34:35 · 198 阅读 · 0 评论 -
Spring IOC-Bean加载过程-第六篇
Bean加载时机Spring 容器内的Bean是在什么时候加载的呢?在Spring内有一个配置可以管控Bean加载的时机,即Lazy-init,在绝大多数情况下,通常这个配置是false。把懒加载置为false的原因,是希望在Spring Ioc容器初始化的时候,就把所有的Bean都给初始化好。这样可以缩短系统接口的RT。对lazy-init属性的处理,实际的处理是在DefaultListab...原创 2020-05-06 21:45:18 · 347 阅读 · 0 评论 -
Spring IOC-Spring循环依赖解决方案-第五篇
什么是循环依赖?目前,在我司是大力推行微服务之间消除循环。即应用A依赖B,B也依赖A。目前消除应用间的循环依赖,除了从业务和功能上去梳理合理性之外,此外还比较倡导应用下沉,即梳理出应用最核心的一部分职责或者功能,下沉到单独的一个应用。例如:A应用通过梳理后,下沉能力沉淀出应用C,那么这个时候依赖结构就变成了:A应用依赖C,B应用也依赖C,C应用是独立的。即通过引入一个新的应用,来解决循环依赖...原创 2020-04-28 22:33:45 · 545 阅读 · 0 评论 -
Spring IOC-Spring扩展点大集合-第四篇
Spring是一个非常优秀的框架,其拓展点非常多,可以自定义很多功能。很多框架都采用了Spring的拓展点,例如:Dubbo,DisConf,Mybatis等。目前先梳理下Ioc部分的拓展点,文章部分内容参考:https://blog.gavinzh.com/2017/11/20/spring-develop-summary/,同时结合自己研读的源码,综合整理而来。此外,Aop部分的拓展点也很多...原创 2020-04-26 14:31:58 · 500 阅读 · 0 评论 -
Spring IOC-源码解读FactoryBean-第三篇
什么是FactoryBeanFactoryBean见文知意,本身是一个Bean,可以用来生成对象或者修饰对象的工厂Bean。FactoryBean可以在容器中注册两个Bean,一个是FactoryBean本身,一个是FactoryBean通过调用getObject获得的Bean。如果想在容器中获取,FactoryBean本身,需要添加&符合,例如:getBean("$factoryBe...原创 2020-04-21 22:13:31 · 409 阅读 · 0 评论 -
Spring IOC-源码解读BeanFatory与ApplicationContext-第二篇
接上一篇文章,上一篇重点讲了Spring ioc容器的核心类和整体的体系架构。ioc容器内其实有两大设计主线,一个是BeanFactory一个是ApplicationContext。本章,重点对这两大设计主线进行一探究竟,主要从以下几个维度出发: BeanFactory与ApplicationContext的应用场景,以及实现原理。 BeanFactory与ApplicationC...原创 2020-04-21 11:24:09 · 210 阅读 · 0 评论 -
规则引擎系列—规则引擎背后的算法
1.算法简介目前,业界主流的规则引擎使用的算法,都是RETE算法。什么是RETE算法呢,以下算法的定义,是从其他官方博客摘抄而来,同时加入了自己的理解。Rete 算法最初是由卡内基梅隆大学的 Charles L.Forgy 博士在 1974 年发表的论文中所阐述的算法 , 该算法提供了专家系统的一个高效实现。自 Rete 算法提出以后 , 它就被用到一些大型的规则系统中 , 像 ILog、...原创 2020-04-19 16:22:19 · 6950 阅读 · 1 评论 -
规则引擎系列—初识规则引擎
什么是规则引擎规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。这是来自百度百科的解释。本质上规则引擎,是为了解决复杂业务规则决策,将复杂多变的业务规则,从代码内提炼出来,抽象为dsl语言或者可视化界面配置,用户角色:运营/产品/开发,可以动态调整d...原创 2020-04-15 20:24:18 · 1776 阅读 · 0 评论 -
Spring IOC-源码解读-第一篇
Spring IOC源码解读,重点围绕以下几部分去探究Spring IOC源码的秘密,分别是:Spring Ioc 容器是什么?作用有哪些?整体架构是如何组成的?整个体系结构由哪些核心类组成? Spring Ioc 容器内的两条设计主线,BeanFactory设计主线,ApplicationContext设计主线,以及它们的设计原理和对应的应用场景,还有彼此之间的区别。 IOC容器的初始化...原创 2020-04-12 16:40:20 · 219 阅读 · 0 评论 -
JAVA并发系列 - 深入分析JMM
JMM是2019年在团队内分享的,年底转到数据组后,应团队TL的要求,最近又在数据组分享了一次,先将分享PPT的内容整理到博客上。从以下四个角度去透视JMM这个技术,1)并发编程问题的源头。2)什么是JMM。3)Happens-Before原则。4)实际案例并发编程问题源头...原创 2020-02-16 16:07:40 · 354 阅读 · 1 评论