- 博客(182)
- 资源 (1)
- 收藏
- 关注
原创 Redis使用不当可能造成的问题
数据不一致:并行化转串行化缓存雪崩:大量的key设置了相同的过期时间,导致在缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。 可以给缓存设置过期时间时加上一个随机值时间,使得每个key的过期时间分布开来,不会集中在同一时刻失效。缓存穿透:访问一个不存在的key,缓存不起作用,请求会穿透到DB,流量大时DB会挂掉。 采用布隆过滤器,使用一个足够大的bitmap,...
2018-08-26 20:04:09
1206
4
原创 synchronized 和 lock 有什么区别?
1)Lock不是Java语言内置的,synchronized是Java语言的关键字,因此是内置特性。Lock是一个类,通过这个类可以实现同步访问;2)Lock和synchronized有一点非常大的不同,采用synchronized不需要用户去手动释放锁,当synchronized方法或者synchronized代码块执行完之后,系统会自动让线程释放对锁的占用;而Lock则必须要用户去手动释放...
2018-08-19 20:29:39
5298
2
原创 怎么实现所有线程在等待某个事件的发生才会去执行
方案一:读写锁 刚开始主线程先获取写锁,然后所有子线程获取读锁,然后等事件发生时主线程释放写锁;方案二:CountDownLatch CountDownLatch初始值设为1,所有子线程调用await方法等待,等事件发生时调用countDown方法计数减为0;方案三:Semaphore Semaphore初始值设为N,刚开始主线程先调用acquire(N)申请N个信号量,...
2018-08-12 20:42:59
3330
原创 dubbo源码分析 -- 远程通信 netty
dubbo 底层通信选择了 netty 这个 nio 框架做为默认的网络通信框架并且通过自定义协议进行通信。dubbo 支持以下网络通信框架:Netty(默认) Mina Grizz ly Netty是什么?①本质:由JBOSS提供的一个java开源框架(一个jar包)②目的:快速开发高性能、高可靠性的网络服务器和客户端程序③优点:提供异步的、事件驱动的网络应用程序框架和工具...
2018-08-05 19:49:12
645
原创 dubbo源码分析 -- 网络编解码
我们在上篇文章中讲述了序列化反序列化组成有意义的信息,然后这些信息需要经过网络进行传送,数据转成网络格式,再由网络格式转成应用程序的数据用的组件分别叫做编码器和解码器。1.什么是粘包、拆包? 粘包客户端发送多个请求给服务器,多个请求包粘成一个发送方为了提高效率。往往会收集一定数量后一笔发送出去,这就粘到一个包分析:dubbo 的远程调用是基于 ...
2018-07-28 20:43:08
722
8
原创 dubbo源码分析 - 序列化与反序列化
概念:序列化:把对象转换为字节序列的过程称为对象的序列化。 反序列化:把字节序列恢复为对象的过程称为对象的反序列化。 在Dubbo RPC中,同时支持多种序列化方式:(1)dubbo序列化,阿里尚不成熟的java序列化实现。(2)hessian2序列化:hessian是一种跨语言的高效二进制的序列化方式,但这里实际不是原生的hessian2序列化,而是阿里修改过的hes...
2018-07-28 20:42:35
2272
6
原创 dubbo源码分析 - provider 接收与发送原理
provider 接收 consumer 请求 provider 的扩展点调用 provider 响应 consumer 调用 dubbo 服务调用总结1、provider 接收 consumer 请求同 consumer 一样 provider 默认也是通过 netty 进行网络通信的。在之前的分析 dubbo 进行服务暴露(NettyServer#doOpen)的时候, 它是通过 ...
2018-07-28 20:42:17
1026
7
原创 dubbo源码分析-consumer 发送与接收原理
1、consumer 发送扩展我们先来看一下 dubbo 中 consumer 端的请求发送原理,也就是从 InvokerWrapper#invoke 开始,在 consumer 服务引用分析的时候,我们知道根据 Invoke 调用的时候, dubbo 会创建 ProtocolListenerWrapper与 ProtocolFilterWrapper 来用集成框架使用者的扩展包含:Invok...
2018-07-28 20:42:03
1312
6
原创 dubbo集群容错之directory目录
directory接口的实现类有两个:StaticDirectory,RegistryDirectory。其中StaticDirectory中的Static关键词来看,就知道,这个其实是不会动态变化的,从下图知道,他的Invoker是通过构造函数传入,StaticDirectory用得比较少,主要用在服务对多注册中心的引用官网:Directory 代表多个 Invoker,可以把它看成 L...
2018-07-28 20:40:34
875
6
原创 dubbo集群容错之loadbalance负载均衡
LoadBalance首先查看 LoadBalance 接口Invoker select(List> invokers, URL url, Invocation invocation) throws RpcException;LoadBalance 定义了一个方法就是从 invokers 列表中选取一个AbstractLoadBalanceAbstractLoad...
2018-07-22 21:33:53
3738
6
原创 dubbo集群容错之cluster集群
官网是这么说Cluster的:Cluster 将 Directory 中的多个 Invoker 伪装成一个 Invoker,对上层透明,伪装过程包含了容错逻辑,调用失败后,重试另一个一句话就是:应对出错情况采取的策略。...
2018-07-22 21:33:24
970
3
原创 dubbo集群容错之router路由规则
Router服务路由, 根据路由规则从多个Invoker中选出一个子集AbstractDirectory是所有目录服务实现的上层抽象, 它在list列举出所有invokers后,会在通过Router服务进行路由过滤。 Router在应用隔离,读写分离,灰度发布中都发挥作用。 灰度发布 概念:灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布...
2018-07-22 21:32:45
7743
4
原创 dubbo源码解析-集群容错架构设计
开始之前先来一波概念: 上图为官网的架构图,它是从设计的角度而非使用角度画出,但是其中的Directory、Router、LoadBalance这三个关键词标注重点 进入代理类的Invoker方法中 ,边看时序图,边走着代码,现在执行序列图的①,到达MockClusterInvoker,执行invoke就要开始进入到集群,也...
2018-07-19 20:21:24
334
3
原创 dubbo服务引用-原理
描述一下dubbo服务引用的过程,原理 既然你提到了dubbo的服务引用中封装通信细节是用到了动态代理,那请问创建动态代理常用的方式有哪些,他们又有什么区别?dubbo中用的是哪一种?(高频题) 除了JDK动态代理和CGLIB动态代理外,还知不知道其他实现代理的方式?(区分度高) 使用本地方式调用远程服务,就需要使用代理,一种是JDK的动态代理,一种是CGLIB的动态代...
2018-07-19 20:20:24
977
3
原创 dubbo服务引用-如何实现SOA的服务降级
带着问题进入,为什么需要服务降级?当使用某门新技术的时候,需要考虑解决什么问题,通过之前的积累可以知道是将某些业务暂时停掉,避开高峰期。把一些边缘化不再当前高并发时使用的业务关掉。怎么做服务降级dubbo中服务降级分成两个:屏蔽(mock=force)、容错(mock=fail)mock=force:return+null 表示消费方对该服务的方法调用都直接返回 null...
2018-07-19 20:18:18
864
4
原创 dubbo服务暴露-zookeeper订阅信息缓存
1.dubbo如何订阅zookeeper信息,什么时候更新本地的zookeeper信息缓存文件registry.subscribe();结合上图开始走代码: 设置了监听回调地址,即回调给FailbackRegistry中的notify从代码可以看到创建了持久节点,因为false,下面开始对该节点设置监听,开始更新的服务信息,服务启动和记得点更新回...
2018-07-19 20:17:43
4225
2
原创 dubbo服务暴露-整体框架设计(总结)
服务暴露的整个过程引入了本地暴露和远程暴露,一句话概括--->Service-->Invoker -->Exporter
2018-07-19 20:16:46
343
2
原创 dubbo服务引用-zookeeper创建节点
1.服务提供者能实现失效踢出是什么原理(高频题)上篇文章是以getRegistry贯穿始末,这篇也将是根据一行代码registry.register(registedProviderUrl);来阐述。 创建节点: 2.zookeeper的有哪些节点,他们有什么区别?讲一下应用场景重点快开始:zookeeper节点分两种(持久节点Pers...
2018-07-19 20:16:14
5168
8
原创 dubbo源码解析-zookeeper连接
1.dubbo一般选择什么注册中心,还有别的选择吗? zookeeper的java客户端你使用过哪些?本篇重要的内容getRegistry(originInvoker);通过时序图理下思路:源码中封装的很好的,我们有时很难看到实用的价值,其中在3步骤内隐藏了很多内容。红框中具体会调用哪个子类,这就需要看看继承体系图再来个ZookeeperReg...
2018-07-19 20:15:41
843
2
原创 Dubbo源码解析-服务暴露原理
服务发布和服务的引用到底什么实现的呢?我们追踪这个问题进行下面的学习? 首先我们通过控制台查看服务启动过程中,日志记录了什么? 通过日志看出发布的过程:①暴露本地服务 ② 暴露远程服务 ③启动netty ④ 连接zookeeper ⑤注册到zookeeper ⑥监听zookeeperThe service ready on spring sta...
2018-07-19 20:11:51
404
1
原创 Dubbo源码解析-本地暴露与远程暴露
本篇讲的是本地暴露,面试主要问得多是远程暴露,因为远程暴露涉及到了zookeeper和netty.比如和zookeeper相关的最常问的两道题是服务提供者能实现失效踢出是根据什么原理?,dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,那发布者和订阅者还能通信吗?.当然如果这两个你答得好,还会往下问,比如zookeeper实现分布式锁,zookeeper选举机制等等,netty能问...
2018-07-19 20:08:22
2568
原创 Dubbo内核解析-SPi(二)
前言 本篇是spi的第二篇,紧接上一篇Dubbo内核解析-Spi,主要讲解spi中新增的AOP。首先也是先从Spring的AOP出发。 Spring的AOP理解 Spring的AOP增强方式一共有5种,分别为增强类型 应用场景 前置增强 权限控制、记录调用日志 后置增强 统计分析结果数据 异常增强 通过日志记录方法异常信息 最...
2018-07-19 20:01:21
270
1
原创 Dubbo内核解析-Spi
1.dubbo架构原理 dubbo四大角色关系图 2.dubbo的SPI实现 什么是JDK的SPi(Service Provider Interface) 相对于api 来说我们都熟悉,但是spi知道的较少一些,因为我们大多是使用api,参与开源项目较少,spi是给拓展者使用的,对于一个好的开源框架来说,有必要留一些拓展点让参与者尽量黑盒拓展,而不是白盒修改代码,否则的话框...
2018-07-15 21:34:23
1387
1
原创 IDEA使用C3P0和JDBC链接MySQL8.0.11
最新版的MySQL的加密方式有所不同(MYSQL的密码方式设置成 mysql_native_password ),因此需要更换成最新版的JDBC( mysql-connector-java-8.0.11.jar),C3P0(c3p0-0.9.5.2.jar)。(注意:若不使用IDEA开发的话,请另外再导入包:mchange-commons-java-0.2.15.jar)附上spring-...
2018-07-08 15:11:12
3263
1
原创 Java并发编程:深入剖析ThreadLocal
ThreadLocal1.概述:JDK源码:* This class provides thread-local variables. These variables differ from* their normal counterparts in that each thread that accesses one (via its* {@code get} or {@code set}...
2018-06-30 17:16:09
224
2
原创 java中String为什么要设置成final
1.不可改变---执行效率高2.因为String这个对象基本是被所有的类对象都会使用的到了,如果可以被复写,就会很乱套,比如map的key ,如果是一个string为key的话,String如果可以改变的话,你想想后果3.执行效率可以这么解释,面向对象有一个多态的性质,如果可以改变,就可以被复写,子类如果复写了某个方法,虚函数表就被用上了;如果是final型的,jvm就直接去用了,根本不用去虚函数...
2018-06-24 21:16:16
951
10
原创 缓存二三事
什么是缓存将持久化的数据存放到内存副本中,用于提高并发,提高读取速度。为什么用了缓存就能实现了1.基于内存操作(内存读取快)2.空间换时间(执行慢的程序可以通过消耗内存来优化,而消耗内存大的执行慢)3.降低瓶颈操作(避免请求数据库的次数)4.减少对外依赖()问题:公司使用的什么缓存?缓存架构:层级常见产品缓存解决方法缓存解决方法缓存技术应用层浏览器浏览器缓存、本地缓存Http缓存协商、cookie...
2018-06-17 20:48:04
251
6
原创 JDK1.8 HashMap深入分析
数据结构:(数组+链表+红黑树)当链表长度超过8时转换成红黑树 HashMap基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。但是他不是线程安全的,要想线程安全,需要借助Collections类的静态方法synchronizedMap获取线程安全的HashMap。多线程情况下直接使用HashMap会出现...
2018-06-10 20:32:28
276
6
原创 String详解02
1.1、字符串常量池概述 1)常量池表(Constant_Pool table) Class文件中存储所有常量(包括字符串)的table。 这是Class文件中的内容,还不是运行时的内容,不要理解它是个池子,其实就是Class文件中的字节码指令。 2)运行时常量池(Runtime Constant Pool) JVM内存中方法区的一部分,这是运行时的内容 这部分内容(...
2018-06-03 19:47:51
149
3
原创 String类详解01
Java。lang.String :字符串类型* Strings are constant; their values cannot be changed after they * are created.String是个常量,不可变。String类被final修饰,官方注释说明创建后不能被改变,但是为什么String要使用final修饰呢? public class StringTest {...
2018-05-27 15:50:41
392
15
原创 通用Mapper注解使用
常用注解1.1@Table 注解 注解作用:建立实体类和数据库表之间的对应关系。默认规则:实体类类名首字母小写作为表名。Employee 类→employee 表。用法:在@Table 注解的 name 属性中指定目标数据库表的表名1.2@Column 注解 注解作用:建立实体类字段和数据库表字段之间的对应关系。默认规则:实体类字段:驼峰式命名数据库表字段:使用“_”区分各个单词用法:在@Colu...
2018-05-20 19:48:15
8351
13
原创 腾讯云直播-Web 直播播放器 1.0
功能介绍腾讯云视频直播播放器 Web SDK 解决方案,通过灵活的接口,快速同自有 Web 应用集成,以实现桌面应用播放功能,同时 SDK 提供在 Web 端上传视频的能力。该 SDK 所播放的文件受限于全局防盗链功能定义,详细内容请查看官网 FAQ 安全功能相关说明,该文档面向考虑使用腾讯云视频直播播放器 Web SDK 进行开发并具备 Javascript 语言基础的开发人员。格式支持播放格式...
2018-05-13 22:12:40
10424
10
原创 腾讯云直播-腾讯云服务端独立模式
创建应用流程:1. 进入云通信官网,登陆,进入【云通信控制台】。 https://console.cloud.tencent.com/avc2. 在应用列表点击【创建应用接入】。3. 填写好相应的内容后,点击【确定】。 4. 在列表上显示刚创建的应用,点击【应用配置】。 5. 编辑【应用平台】,根据自己目前所...
2018-05-05 15:13:45
1708
8
原创 腾讯云直播-管理端查询直播中频道列表
1.接口描述接口Live_Channel_GetLiveChannelList:查询频道列表。地址API 调用地址为:http://fcgi.video.qcloud.com/common_access用途在直播码模式下,用于查询直播中频道列表。2.输入参数参数名参数含义类型备注是否必需appid客户 IDint Yinterface接口名string Yt有效截止时间戳int Ysign签名st...
2018-04-29 10:23:21
3072
14
原创 腾讯云直播-调用腾讯云RoomService
LiveRoom如果您只需要做一个简单的直播方案,也就是:主播推流 + 观众观看 + 文字互动,参考单场次直播,或者 自由开播 就可以解决问题。但是如果您要上连麦功能,单纯依靠 TXLivePusher 和 TXLivePlayer 两个组件进行组合,那难度可就高了,为了降低这里的实现难度,我们推出了 LiveRoom 组件,它分成 Client 和 Server 两个部分:终端部分(Client...
2018-04-27 12:27:02
5337
20
原创 Java后端实现短信验证码
整体流程:客户填入手机号,通过客户端点击获取验证码按钮,验证手机号是否有效,有效则客户端发送请求到后台服务器,客户端开始倒计时60s,不通过则返回;服务器,验证手机号是否被注册或有效,通过则调用第三方的短信通信接口并发送相关数据(包括手机号和验证码),然后回调结果,成功则将验证码存入session,失败则返回提示,不通过则返回。客户收到验证码后在有效时间内,填入并发送请求。服务器端,收到请求后,用...
2018-04-22 12:05:41
4759
18
原创 JSP的兴起与跌宕
JSP为什么会出现?出现的原因? ①因为在开发web网站时候,返现servlet做界面比较麻烦,于是出现了jsp。 运行在服务端(Java server pages)基于servlet,对servlet进行包装。综合技术。 原理: jsp其实是一种特殊的Servlet 当jsp页面第一次被访问时,服务器会把jsp编译成java文件然后再把java编译成.class然后创建该类对象最后调用它...
2018-04-14 18:20:10
540
13
原创 JSp中四个作用域的区别
首先了解何为作用域?简单一句是信息共享的范围,也就是信息在多大的范围内是有效的。application:服务器启动到停止这段时间。session:HTTP会话开始到结束这段时间。request:HTTP请求开始到结束这段时间。page:当前页面从打开到关闭这段时间。request 请求对象 类型javax.servlet.ServletRequest ...
2018-04-08 09:30:46
1077
9
原创 java可重入锁ReentrantLock原理
概念:再次获得自己的内部锁。比如当一个线程获得某个对象的锁后,还没有释放,还想再次获得这个对象的锁时还可以获得。 网上看到又去的故事阐述这个过程很有趣:轻松学习java可重入锁(ReentrantLock)的实现原理在一个村子里面,有一口井水,水质非常的好,村民们都想打井里的水。这井只有一口,村里的人那么多,所以得出个打水的规则才行。村长绞尽脑汁,最终想出了一个比较合理的方案,咱...
2018-04-01 15:10:42
3178
9
原创 深度剖析Http1.1协议
1)请求(客户端->服务端[request]) GET(请求的方式) /books/java.html(请求的目标资源) HTTP/1.1(请求采用的协议和版本号) Accept: */*(客户端能接收的资源类型) Accept-Language: en-us(客户端接收的语言类型) Connection: Keep-Alive(维护客户端和服务端的连接关系) ...
2018-03-25 14:25:21
912
19
美女带你学MySQL基础视频178集
2017-11-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人