- 博客(24)
- 收藏
- 关注
原创 Java设计模式之JDK动态代理原理(基于JDK8)
名词解释静态代理:编译期就已确定代理对象。即编码出代理类。动态代理:运行时动态生成代理对象。可对被代理类做出统一的处理,如日志打印,统计调用次数等。JDK动态代理:即JDK中自带的动态代理生成方式。JDK动态代理的实现依赖于被代理类必须实现自接口。cglib动态代理:cglib工具包实现的动态代理生成方式,通过字节码来实现动态代理,不需要被代理类必须实现接口。动态代理...
2019-05-12 21:59:20
1218
原创 微服务实战SpringCloud之Zuul
注意:本文的前提是基于zuul的1.3.X版本来解析的,2.0版本采用了netty作为底层框架重新设计了整个zuul的架构,将在后面进行分析。zuul是什么zuul是Netflix设计用来为所有面向设备、web网站提供服务的所有应用的门面,zuul可以提供动态路由、监控、弹性扩展、安全认证等服务,他还可以根据需求将请求路由到多个应用中。zuul是用来解决什么问题的在使用网关之前,动态的路由...
2019-01-18 16:09:11
1041
原创 微服务实战SpringCloud之Feign源码分析
上一篇简单介绍了springcloud声明式服务调用Feign的使用,接下来分析下Feign的源码,具体实现及为什么如此实现。启动时Feign的处理启动类上使用了@EnableFeignClients注解,我们来看下这个注解在哪里使用了,使用idea只要在EnableFeignClients类上按住command同时点击类名就可以查看到这个类在哪里使用了,发现除了启动类,只在FeignClie...
2019-01-06 01:33:54
724
原创 HTTP几种请求方式的含义及应用场景
HTTP几种请求方式的含义及应用场景整理自https://stackoverflow.com/questions/27030649/explain-and-example-about-get-delete-post-put-options-patch-h及https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.htmlGETGET请求是向服务端请求...
2018-12-13 14:51:47
4690
原创 微服务实战SpringCloud之Eureka实现类似异地多活
zone&region上图是eureka高可用架构,也是Netflix推荐的用法。上图的us-east-1c、us-east-1d、us-east-1e各自是一个zone,每个zone内都有各自的eureka server & eureka client,就是说每个zone内都有服务注册中心及微服务的提供者和消费者。那么zone和region在eureka中的概念是什么呢?...
2018-12-13 14:44:34
2477
原创 Java-单例模式的几种写法
一,饿汉式优点:线程安全,实现简单。缺点:类加载时就初始化了,没有实现懒加载。public final class HungrySingleTon { private static final HungrySingleTon instance = new HungrySingleTon(); private HungrySingleTon() { ...
2018-03-26 01:16:14
5941
原创 Mybatis原理之参数处理
前言Mybatis参数处理是Mybatis核心内容,围绕着Mybatis的面试题也是层出不穷。接下来跟随源码看下Mybatis是如何处理参数的。代码示例MapperLoanApplicationEntity getByLoanAppCode(@Param("loanAppCode") String loanAppCode);XML<select id="getByLoanApp...
2019-07-23 17:50:07
457
原创 Redis实现分布式锁
随着分布式系统的流行,分布式锁的需求也越来越强。网上很多基于Redis实现的分布式锁,但是大大小小都有些问题。本文基于Redis给出实现及一些问题的分析。基于Redis单节点(主从架构)的实现获取锁SET key_name random_value NX PX expire_timepublic boolean lock(String key, long expireTime, Tim...
2019-07-23 17:49:24
219
原创 Redis实现分布式锁
随着分布式系统的流行,分布式锁的需求也越来越强。网上很多基于Redis实现的分布式锁,但是大大小小都有些问题。本文基于Redis给出实现及一些问题的分析。基于Redis单节点(主从架构)的实现获取锁SET key_name random_value NX PX expire_timepublic boolean lock(String key, long expireTime, Tim...
2019-06-28 18:08:43
268
原创 Redis设计与实现-读后总结
数据结构Redis字符串 (SDS) 相比C字符串区别通过len属性,获取字符串长度复杂度为O(1)避免C字符串修改时忘记修改字符串长度导致的内存溢出(SDS本身有len属性,修改时会先判断是否有足够空间)减少修改修改字符串带来的内存重新分配次数二进制安全兼容部分字符串函数链表双向链表,获取表头和表尾的复杂度都是O(1)节点本身有prev和next...
2019-06-05 09:49:26
263
原创 Java设计模式之装饰模式
定义像现有的一个对象添加新的功能,同时又不改变其结构,它是作为现有的一个类的包装。装饰模式创建了一个装饰类,包装了原有的类,而又不改变其内部结构,同时增加新的功能。适用于般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。在不想增加很多子类的情况下扩展类。例子原接口及具体实现public interface Subject {...
2019-05-08 19:56:09
210
原创 Java设计模式之桥接模式
定义将事物实现从各维度抽象出来,各维度独立变化,之后通过聚合或依赖的方式组合起来,减少各维度之间的相互耦合,从而更加适合变化。适用于当一种事物在多个维度都有比较灵活的变化时,如果为每个维度,每个变化都独立一个类的话,假设有N个维度,每个维度有M个变化,那么就会创建MN个类,造成类爆炸。使用桥接模式,将各个维度之间解耦合,不使用继承,使用依赖方式,解决类爆炸问题。例子说明一辆汽车有多个维...
2019-05-07 15:39:36
237
原创 java设计模式之适配器模式
说明将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作简单来说:作为两个不同接口的桥梁,负责加入不同的接口功能。举例例如,常见的电源适配器,我们都知道家庭常用的电源电压都是220V的,但是手机电压一般是5V的,手机的充电器头就是一个适配器,将220V转换成5V。关键代码实现适配器继承或依赖(推荐)已有的对象,实现想要...
2019-05-05 17:31:07
129
原创 3. java并发编程之-原子操作的实现原理
原子操作,意为不可分割、不可中断的操作。单处理器实现原子操作很简单,因为就一个处理器,不会有并发问题,那么在多处理器中要实现原子操作就比较复杂。处理器如何实现原子操作?首先,处理器会自动保证对对单个字节的操作是原子性的,即对一个字节在某个时间点上只有一个读或者写操作在进行。那么多个字节呢?16位/32位/64位呢?有些处理器也是自动可以保证同一缓存行上的数据操作是原子的,但是复杂的数据,比如说...
2019-03-20 00:01:35
160
原创 2.java并发编程之-java并发编程的底层实现原理
synchronized和volatile在java并发领域扮演者重要的角色。其中,synchronized一直给人的印象就是重量级锁,volatile是轻量级锁。随着Java SE 1.6之后对synchronized进行了一系列优化之后,synchronized的性能逐渐也变得不那么重了。volatile的应用在多线程中,volatile一直都是用来保证变量的可见性。可见性的意思是,当一个...
2019-03-19 21:51:03
188
原创 1.java并发编程之-并发编程的挑战
并发编程的目的是让程序运行的更快,同时提高CPU等硬件的使用率。但是,并不是启动更多的线程就能让程序最大限度的执行。在进行并发编程时,如果希望通过多线程执行任务让程序运行的更快,会面临非常多的挑战。1.1上下文切换上下文切换:CPU通过分配时间片来控制线程的执行,当一个时间片用完或者遇到锁时,CPU会切换到其他线程,但是会保存当前任务的状态,以便重新再次运行此线程时可以从停止时的状态继续运行。...
2019-03-14 21:35:48
153
原创 微服务实战SpringCloud之Hystrix
Hystrix是什么?在微服务架构中,微服务之间互相依赖较大,相互之间调用必不可免的会失败。但当下游服务A因为瞬时流量导致服务崩溃,其他依赖于A服务的B、C服务由于调用A服务超时耗费了大量的资源,长时间下去,B、C服务也会崩溃。Hystrix就是用来解决服务之间相互调用失败,避免产生蝴蝶效应的熔断器,以及提供降级选项。Hystrix通过隔离服务之间的访问点,阻止它们之间的级联故障以及提供默认选项...
2019-01-29 18:29:54
357
原创 Invalid bound statement (not found)-mybatis在idea下的bug
如题,在使用通用mapper时,遇到一个问题,使用通用mapper提供的方法,如selectByExample等可以正常使用,如果自定义mapper时,怎么都映射不到,报错Invalid bound statement (not found)。仔细核对了namespace、接口定义、方法名称、参数等等,都没有找到问题,debug也无果。仔细看了下编译后的target目录下mapper.xml文...
2018-12-17 22:04:58
414
原创 数据迁移最好用的框架dataX
在生产环境中,数据库数据一般都是经常备份的,比如每天备份一次。主要用的是阿里云的服务,包括服务器、云数据库以及其他一些云产品。备份的频率是每天一次,就是说每天一个pt,全量备份。数据清洗就是直接离线在备份的pt上进行SQL操作,然后初始化到其他表中。1.操作离线数据库,写SQL,数据清洗及初始化到临时表中。2.写同步脚本,阿里云的离线定时任务有很好的支持3.阿里云不支持较复杂的离线任务,比如...
2018-12-14 10:56:06
1836
原创 微服务实战SpringCloud之Eureka Client启动源码分析
springboot工程注册到eureka server非常简单,只需要引入spring-cloud-starter-netflix-eureka-client依赖,在启动类上加上@EnableDiscoveryClient注解。例如:@EnableDiscoveryClient@SpringBootApplicationpublic class CartApplication { ...
2018-12-13 14:53:20
571
原创 java之循环引用
在学习java内存模型及垃圾回收时提到了引用计数法无法解决循环引用的问题,心里一直在思考怎么才是循环引用。netty中的循环引用的例子。例如:NioServerSocketChannel类中有内部类NioServerSocketChannelConfig。每一个NioServerSocketChannel实例对象都有全局变量NioServerSocketChannelConfig的实例对象,而...
2018-12-13 14:49:26
6650
原创 微服务实战SpringCloud之Eureka Server源码分析
eureka server端启动分析eureka server在启动时会打印日志,追踪日志发现,打印“Initializing …”的类为DefaultEurekaServerContext的initialize()方法。@PostConstruct@Overridepublic void initialize() { logger.info(&amp;amp;quot;Initializing ...&amp;amp;quot;)...
2018-12-13 14:46:03
349
原创 微服务实战SpringCloud之Feign简介及使用
Feign的目标feign是声明式的web service客户端,它让微服务之间的调用变得更简单了,类似controller调用service。Spring Cloud集成了Ribbon和Eureka,可在使用Feign时提供负载均衡的http客户端。引入Feign项目中使用了gradle作为依赖管理,maven类似。dependencies { //feign imple...
2018-12-13 14:42:03
648
原创 Java集合框架
java中的集合框架是非常重要的,日常开发中基本都会用到。一、java集合框架主要分为Collection接口的子接口和子接口的实现类,以及Map接口的子接口和子接口的实现类、二、Collection接口:1.Collection接口定义了size()、isEmpty()、contains(Object o)、iterator()、add(E e)、remove、contains()等...
2018-03-31 21:57:13
179
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅