自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java并发

目录概述并发在技术层面上的问题volatile&synchronized&cas概述一晃的时间,做Java开发已经有七个年头了,过去的几年多数时候其实是混混度日,没有对自己的工作和生活有太多的深入思考,当我意识到的时候,犹如晴天霹雳,这段时间思考了很多但依然没有什么头绪,我想或许应该换一种策略,找出几个有代表性的问题去深入思考一下,而技术的意义就是其中一个。而之所以再次来写Java并发,原因在于对这块知识的理解其实一直的片面的,稍微回想一些相关的知识点,好像都有.

2020-08-06 09:10:20 86

原创 数据结构与算法

三步精通一个领域

2020-05-30 15:53:15 157

原创 极客大学算法课-01

数据结构和算法是一个程序员的基本功,但在这方面一直是弱项,发毒誓学了几百遍但一直不得要领,所以报名了极客时间的算法大课,跟着谭超再从头到尾刷一遍,希望这次能有质的提升。极客时间的这个课程,老师规定了每周的学习任务和作业任务,然后老师和助教会进行review,每周都要按时提交,对于加班狗来说却是有些困难,但还是克服下困难把这几周的课程跟下来。在正式开始算法课之前,谭超老师讲了一些高效学习这门课程的主要事项,比如学习这门课程要以练习为主,看视频和做练习的时间三七开,第二是看视频的时候,在理解的情况下,尽量加

2020-05-21 00:47:02 373

原创 SpringCloud核心组件总结

前几篇写了spring cloud的几个核心组件的原理和一些代码实现,这篇通篇总结一下。首先将了微服务和微服务架构的区别,然后明确了微服务架构中面临的主要挑战,紧接着引出了基于spring cloud的分布式微服务开发框架,及其中的核心组件及作用,包括eureka注册中心、ribbon&feign客户端服务负载均衡与面向接口调用工具、hystrix服务熔断与降级、zuul通用api网关...

2019-12-28 16:01:02 185

原创 SpringCloud总结:Zuul

zuul是spring cloud提供的一个通用api网关组件,主要提供了服务理由、过滤器和负载均衡等功能,同时它也提供了比hystrix fallback factory粒度更粗的服务降级机制,下面就具体来看一下zuul的使用和原理。使用zuul其实很简单,只需要一个@EnableZuulProxy注解和一个application.yml配置文件就足够了,就行下面这样对于zuul filt...

2019-12-27 16:04:39 107

原创 SpringCloud总结:Hystrix

Spring Cloud Hystrix也是spring团队对netflix的Hystrix的封装,主要提供了服务熔断和降级,同时还兼顾了限流的功能.Hystrix的最核心功能是服务熔断,那么为什么需要服务熔断呢?在微服务架构下,往往一个前端的请求对应了后端的多个服务,而且有时服务的调用链会很深(这也是微服务架构单来的一个副作用),服务与服务之间的依赖错综复杂,如果某一个服务不可用,可能会导致...

2019-12-27 11:09:25 62

原创 SpringCloud总结:Feign&Ribbon

基于SpringCloud的分布式微服务系统中各个服务之间的调用时通过http协议来完成的,提到http协议,最先想到的就是ip+端口+资源路径的调用方式,但是这种调用方式并不符合微服务架构下的服务治理的要求,微服务架构中的服务治理是以注册中心为中心的,这种调用方式明显脱离了注册中心,此时Ribbon和Feigin就诞生了。首先说Ribbon,Ribbon的主要作用有两个,一个是将http调用与...

2019-12-25 16:17:24 205

原创 SpringCloud总结:Eureka

文章目录Eureka的使用Eureka 架构相关配置自我保护机制Eureka源码Eureka是Netfix开源的服务注册中心框架,Spring Cloud将其集成进Spring全家桶,实现了Spring Cloud的注册中心功能。Eureka的使用Eureka的使用非常简单,只要加入相关依赖,用注解开启Eureka服务就可以了。<dependency> ...

2019-11-30 15:48:33 132

原创 基于docker搭建hadoop集群

目前线上环境都是传统的虚机,所以docker在日常开发中大部分是用来在本地搭建开发用的一些中间件比如redis、kafka啥的,不得不说,docker这个东西到目前没有感觉还是挺好的,最主要的是它比vm ware轻太多了,一般如果用vm ware的话,开四五台已经是上限了,但是如果用docker,限制就会笑很多,而且,搭建好的环境还可以导出镜像,已被在其他地方使用,很方便。目前正准备复习和总结一...

2019-11-30 00:49:18 105 1

原创 Zookeeper 总结

文章目录简介paxos算法zab协议leader选举zookeeper与cap关系zookeeper中的节点zookeeper的java客户端zookeeper的使用场景简介Zookeeper最初是由雅虎开发,后来捐献给了apache。zookeeper是一个分布式协调服务,在很多分布式服务和框架中被广泛使用,主要的应用方向有两个,一个是配置管理,一个是节点协调,比如主从选择等。此外,zook...

2019-11-25 20:12:43 104

原创 阶段性总结第一篇

知识点总结这段时间,对日常开发中用到的技术做了体系化的总结,包括Java基础、并发、JVM、集合,常用的开发框架Spring、Spring MVC、Mybatis、Dubbo、MySql、ElasticSearch、Kafka、Redis、Netty,也大概梳理了一些Spring Cloud,但由于Spring Cloud以及很久没在实际项目中应用,所以只是对各个组件的作用和使用方式进行了梳理,...

2019-11-25 16:05:25 69

原创 ES 总结

文章目录搜索面临的问题ES的使用场景ES的基础原理概念说明一些rest api搜索面临的问题几乎每一个网站都会有全文检索功能,全文检索与传达的sql查询有很大的区别,sql查询一般是从结构化数据中查询指定的数据,而全文检索是从海量的非结构化数据中查询出匹配的数据,而且对查询速度的要求非常高,同时还要支持海量数据的统计分析能力。ES是一个基于Lucene的分布式海量数据搜索引擎,它提供了简单的...

2019-11-21 21:16:14 63 1

原创 Springboot整合第三方中间件

整合redis<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>spri...

2019-11-20 19:56:18 390

原创 一个轻量级的单点登录解决方案

会话状态管理是每个IT系统必不可少的一个组成部分,在集群架构或分布式架构下的会话管理是一个比较头疼的问题,一般采用的方案有session 同步,IP粘连和分布式session等,session同步指的是在每个服务器之间进行session数据的同步,这种方案在少量用户下没啥问题,但是一旦同时在线的用户变多,服务器的负担就会很大,IP粘连一般用在对等集群架构下,其实是一种伪实现,就是把某个用户跟某台服...

2019-11-19 18:50:11 115

原创 Kafka 总结

文章目录kafka

2019-11-16 17:50:01 128

原创 Redis 总结

文章目录核心数据结构持久化策略集群架构常见问题一些使用上的主要事项核心数据结构持久化策略集群架构常见问题一些使用上的主要事项

2019-11-13 17:03:02 48

原创 Jvm 总结

文章目录类加载器运行时数据区自动垃圾收集机制对象的分配策略JVM 调优Java 虚拟机主要分为三个部分:类加载器、运行时数据区和执行引擎,其中类类加载器负责将类的字节码文件加载到内存中,运行时数据区存储jvm运行时产生的数据,执行引擎负责浮动程度的执行。类加载器类加载器就是我们经常说的ClassLoader,Java提供了三种类型ClassLoader,分别是BootstrapClassLo...

2019-11-10 17:05:07 59

原创 HashMap 总结

核心数据结构在jdk 1.7中,核心数据结构是哈希表+链表,在jdk1.8中是哈希表+链表+红黑树,链表和红黑树主要是为了解决哈希冲突的问题,红黑树主要解决在哈希冲突比较严重的情况下链表的查询效率问题。哈希表的初始容量为16,加载因子默认为0.76=5。初始容量在哈希表初始化时,有这样一段代码// Find a power of 2 >= toSize int capacity ...

2019-11-09 23:12:31 37

原创 Java并发 总结

Java线程基础

2019-11-05 22:52:43 75

原创 深入浅出TCP三次握手四次挥手

每每想起TCP三次握手这个问题,就会陷入如下的困惑:var forget = ?while(forget) { 百度/Google}而重点在于forget永远等于true,无情的消耗着我这颗只有一核的cpu,好像只有把脑子转爆才能跳出这个该死的循环。但屋漏偏逢连夜雨,后台又在另一个线程开启了另外一个该死的循环:var areYouStupid = truewhile(a...

2019-11-05 10:13:16 53

原创 Spring 总结

文章目录????简介????BeanFactory????Spring源码-初始化BeanDefinition????Spring源码-对象初始化&依赖注入????Spring源码-AOP&事务????Spring应用????SpringMVC源码分析????SpringMVC应用????简介Spring是Java程序员日常开发中最长应的应用框架之一,它是如此的流行甚至对Java语言本身的发展都起到了推动作用,目前Spring可以...

2019-11-01 22:38:23 68

原创 系统架构 总结

最近一直在回顾和总结以往开发过程中用到的一些技术,例如redis、dubbo、kafka、zookeeper、spring、mybatis等等,发现以往对这些技术的理解仅限于使用方式和技术实现细节上,在脑海中一直无法完整的把这些技术串联起来,也不能很好的在实际场景中,根据不同的业务需求来做出技术选型,我想,这和我对IT系统架构演进过程以及每种架构模式应对的业务场景及带来的问题不是很清楚有很大关系,...

2019-10-31 20:14:48 57

原创 Netty总结

a

2019-10-27 14:53:26 81

原创 Apache Dubbo总结

文章目录????简介????架构演进????理解RPC与SOA????dubbo架构简介????简介目前的工作主要是做一些业务功能的开发,涉及到的系统架构以all-in-one的单体架构为主,也少量涉及分布式系统,对于涉及到的分布式系统,几乎都是以dubbo为基础构建的,日常也主要是对其进行维护以及对开发新的功能,之前对dubbo的使用也不是特别深入,应用场景也不复杂。dubbo作为目前最流行的分布式微服务架构之一,是非常...

2019-10-21 21:30:12 923

原创 MySql总结

文章目录sql的类型mysql锁事务隔离界别索引mysql逻辑架构物理存储结构慢查询sql设计优化sqm语句优化分库分表读写分离sql的类型mysql锁事务隔离界别索引mysql逻辑架构物理存储结构慢查询sql设计优化sqm语句优化分库分表读写分离...

2019-09-10 23:18:40 66

原创 面试整理-Dubbo

文章目录消费端直连服务端配置注册中心管控平台关闭服务检查多版本与服务分组多协议支持负载均衡容错策略服务降级超时与重试声明式缓存服务延迟暴露源码配置解析服务暴露服务引用SPI原理消费端直连服务端服务消费端配置<dubbo:application name="consumer"/><dubbo:registry address="N/A"/><dubbo:ref...

2019-09-10 22:59:23 58

原创 Java并发-再探JMM

Java内存模型个人理解,Java内存模型应该是Java并发编程中最难理解的一个概念之一。由于最近准备换工作,所以,按照惯例有复习了一下Java并发相关的知识(《Java并发编程的艺术》以及极客时间王宝令老师的《Java并发编程实战》),在复习的过程中,我发现《Java并发编程的艺术》中介绍JMM时,引入了很多晦涩难懂的知识,比如内存屏障等等,让人看的一头雾水,所以决定从更加宏观的角度去总结JM...

2019-08-21 23:11:28 93

原创 数据结构与算法-AVL树

AVL树实际上是为了解决二分搜索树在极端情况下退化成链表的问题。AVL树通过自动调节左右子树的高度可以保证查找时间复杂度在O(logN)。在AVL树中,新增节点的默认高度是1,新增节点的父节点默认高度是2,以此类推。左子节点的高度与右子节点的高度差成为平衡因子。在AVL树中,要求所有节点的平衡因子都小于等于1。由于节点的平衡因子是通过左右子树的高度计算的,所以我们就需要在节点中记录当前节点的高...

2019-08-21 18:24:35 55

原创 数据结构与算法-二叉搜索树

描述二叉搜索树的主要目标是优化链表的搜索效率。在链表中查找一个元素的时间复杂度为O(N),在二叉搜索树中查找一个元素的时间复杂度则为O(logN)。在二叉搜索树中左子节点的值小于根节点的值右子节点的值大于根节点的值我个人理解时,把二分搜索树理解为二分查找。对于二叉搜索树的操作主要包括插入、查找、删除、遍历等。下面直接看代码。代码实现package loop;import j...

2019-08-21 14:03:02 84

原创 数据结构与算法-堆

堆的特点堆是一棵完全二叉树父节点大于子节点堆的实现package geektime.sort;import java.util.ArrayList;import java.util.List;// 大顶堆public class MaxHeap<E extends Comparable<E>> { private List<E>...

2019-08-20 23:16:41 54

原创 数据结构与算法-哈希表

文章目录数组和链表的特点哈希表哈希函数解决哈希冲突链地址法开放地址法数组和链表的特点数组支持随机存取;分配数组需要连续的内存空间;链表不支持随机存取;链表不需要连续的内存空间;哈希表由于数组和链表具有各自的优缺点和适用场景,所以为了进一步提高数据的读写性能,哈希表就诞生了,即哈希表就是”数组+链表“,数组构成hash bucket,链表解决hash冲突。然而这里所说的链表已经不是狭义...

2019-08-18 19:21:01 93

原创 Spring源码分析

文章目录为什么要看Spring源码如何看源码Spring中的IoC容器BeanFactoryBeanDefinitionSpring容器的初始化流程IoC容器的使用容器初始化入口解析&amp;注册BeanDefinitionBeanDefinitionReader继承结构总结一下Bean的实例化&amp;依赖注入bean实力化小结循环依赖问题Spring AOP原理查找BeanDefinition...

2019-02-06 17:52:01 1185 1

原创 Scala-快学sala

第五章/** * 类: * 类的构造方法和类定义混合在一起 * var字段在编译时默认生成getter/setter方法 * val字段在编译时默认生成getter方法 * 可以自定义getter/setter(名称符合规范即可) * private[this]定义对象私有域 * 利用@BeanPropertiy生成JavaBean * 辅助构造器名称为this,方法体以主...

2018-07-24 22:35:01 199

原创 Java-JVM内存区域划分

个人理解记录程序计数器:线程私有的内存区域,每个线程在执行时都有自己的程序计数器,主要作用是记录当前线程执行的字节码的行号,在cpu进行线程切换/恢复时,使程序能够恢复到正确的位置执行,它是内存区域中唯一一块不会抛出异常的。虚拟机栈:线程私有的内存区域,是方法调用的抽象,每个方法调用对应一个栈帧,栈帧中存储局部变量表/方法返回地址等信息,一次方法调用对应一个栈帧的入栈,一次方法调用的完成对...

2018-07-22 09:22:18 125

原创 Java-JVM类加载过程

个人理解记录jvm的类加载采用双亲委派模型,当需要加载一个类时,首先交由父类加载器去加载,只有当父类加载器无法加载时,子类加载器才去加载,这种机制可以有效避免重复加载,保证jvm的安全性。类加载器主要分为三种,bootstrap类加载器,负责加载java核心类库,extclassloader,负责加载扩展类库,apppclassloader负责加载classpath下的类,也就是应用本身的...

2018-07-22 09:21:20 163

原创 Java-Lock/Condition原理

个人理解记录在传统的synchronized中,可以通过wait/notify/notifyAll进行等待通知操作,但synchronized只提供了一个同步队列和一个等待/通知队列,Lock则提供了一个同步队列和多个等待/通知队列模型。 Condition对象是从Lock中获取,其返回的实际上是AQS的内部类ConditionObject,因为Condition机制依赖于AQS基于状态的同...

2018-07-22 09:20:02 1452 1

原创 Java-读写锁原理

个人理解记录J.U.C提供了一个ReentrantReadWriteLock读写锁,这个读写锁也是基于AQS实现的,在获取读锁时,如果写锁以及被获取,那么获取读锁的线程将被挂起,在获取写锁时,如果存在读锁或者写锁切当前线程不是获取写锁的线程,那么获取读锁的线程也会被挂起。 因为读写锁时基于AQS实现,也就是基于状态实现的,所以jkd将一个状态变量按照高12位和低12位分开,高12位用来存储读...

2018-07-22 09:18:52 145

原创 Java-Lock超时锁和可中断锁原理

个人理解记录超时锁的基本原理与独占锁基本相同,不同之处在于“超时”,在调用doAcquireNanos时,首先记录下调用方法的时间,然后尝试获取锁,如过获取成功则直接返回,如果获取失败,判断超时时间是否为0,如果是,则时间超时,返回false,如果不是,则获取当前时间-进入方法的时间,然后在用超时时间-这个结果,得到超时剩余时间,如果剩余超时时间大于1000毫秒,则利用LockSupport挂...

2018-07-22 09:17:50 4569

原创 Java-Lock独占锁与共享锁原理

个人理解记录ReentrantLock基于aqs实现,他的基本原理是aqs的status为0时表示锁被占用,为1时表示锁被释放。ReentrantLock在使用时需要显式的获取和释放锁,一般用try finally来实现,相对于synchronized,reentrantlock提供了功能更强大的api,例如超时锁、可中断锁、公平锁、非公平锁、非阻塞锁获取等等,ReentrantLock是独占...

2018-07-22 09:15:22 7827 3

原创 Java-AQS

个人理解记录aqs是juc包的基础类,它向上层组件提供基础的同步服务。aqs基于一个状态变量,一个同步队列和一组状态操作和一组同步方法组成。基本的原理是通过同步操作实现同步元语,如果获取状态失败,则将当前线程构造成一个node节点后利用cas加入到同步队列的尾部并挂起,每个节点包括当前线程的引用、aqs内部维护了同步队列的头节点和尾节点,头节点是成功获取锁或状态的节点,头节点释放锁后唤醒其...

2018-07-22 09:08:19 1442

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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