- 博客(71)
- 资源 (12)
- 论坛 (2)
- 问答 (1)
- 收藏
- 关注
原创 【JavaP6大纲】MySQL篇:分库分表之后,id 主键如何处理?
分库分表之后,id 主键如何处理?基于数据库的实现方案数据库自增 id:这个就是说你的系统里每次得到一个 id,都是往一个库的一个表里插入一条没什么业务含义的数据,然后获取一个数据库自增的一个 id。拿到这个 id 之后再往对应的分库分表里去写入。适合的场景:你分库分表就俩原因,要不就是单库并发太高,要不就是单库数据量太大;除非是你并发不高,但是数据量太大导致的分库分表扩容,你可以用这个方案,因为可能每秒最高并发最多就几百,那么就走单独的一个库和表生成自增主键即可。设置数据库 sequence 或者
2021-04-12 17:30:32
262
原创 【JavaP6大纲】MySQL篇:如何设计可以动态扩容缩容的分库分表方案?
如何设计可以动态扩容缩容的分库分表方案?对于分库分表来说,主要是面对以下问题:选择一个数据库中间件,调研、学习、测试;设计你的分库分表的一个方案,你要分成多少个库,每个库分成多少个表,比如 3 个库,每个库 4 个表;基于选择好的数据库中间件,以及在测试环境建立好的分库分表的环境,然后测试一下能否正常进行分库分表的读写;完成单库单表到分库分表的迁移,双写方案;线上系统开始基于分库分表对外提供服务;扩容了,扩容成 6 个库,每个库需要 12 个表,你怎么来增加更多库和表呢?这个是你必须面对的一
2021-04-12 17:29:59
81
原创 【JavaP6大纲】MySQL篇:现在有一个未分库分表的系统,未来要分库分表,如何设计才可以让系统从未分库分表动态切换到分库分表上?
现在有一个未分库分表的系统,未来要分库分表,如何设计才可以让系统从未分库分表动态切换到分库分表上?停机迁移方案我先给你说一个最 low 的方案,就是很简单,大家伙儿凌晨 12 点开始运维,网站或者 app 挂个公告,说 0 点到早上 6 点进行运维,无法访问。接着到 0 点停机,系统停掉,没有流量写入了,此时老的单库单表数据库静止了。然后你之前得写好一个导数的一次性工具,此时直接跑起来,然后将单库单表的数据哗哗哗读出来,写到分库分表里面去。导数完了之后,就 ok 了,修改系统的数据库连接配置啥的,包
2021-04-12 17:11:09
18
原创 【JavaP6大纲】MySQL篇:为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?你们具体是如何对数据库如何进行垂直拆分
**加粗样式# 为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?你们具体是如何对数据库如何进行垂直拆分或水平拆分的?为什么要分库分表?(设计高并发系统的时候,数据库层面该如何设计?)假如我们现在是一个小创业公司(或者是一个 BAT 公司刚兴起的一个新部门),现在注册用户就 20 万,每天活跃用户就 1 万,每天单表数据量就 1000,然后高峰期每秒钟并发请求最多就 10 个。我的天,就这种系统,随便找一个有几年工作经验的,然
2021-04-12 17:04:18
26
原创 【JavaP6大纲】MySQL篇:如何实现 MySQL 的读写分离?MySQL 主从复制原理是啥?如何解决 MySQL 主从同步的延时问题?
如何实现 MySQL 的读写分离?MySQL 主从复制原理是啥?如何解决 MySQL 主从同步的延时问题?如何实现 MySQL 的读写分离?基于主从复制,一个主库,挂多个从库,然后我们就单单只是写主库,然后主库会自动把数据给同步到从库上去,数据读取走从库。MySQL 主从复制原理是啥?如何解决 MySQL 主从同步的延时问题?mysql主从复制用途:实时灾备,用于故障切换。读写分离,提供查询服务。备份,避免影响业务mysql主从复制原理:主库将变更写入 binlog 日志,然后从库连接到主库之后,
2021-04-12 16:37:34
17
原创 【JavaP6大纲】MySQL篇:主从问题
主从问题?主从常见问题主从备份不可靠,需要人经常去查看同步状态,一旦出现报错,需要及时人为的处理。出现1236:[ERROR] Slave I/O: Got fatal error 1236 from master when reading data from binary log: ‘Client requested master to start replication from impossible position’, Error_code: 1236解决方案:主从服务器失去连接,出现了宕机
2021-04-12 16:16:22
16
原创 【JavaP6大纲】MySQL篇:如何优化SQL?
如何优化SQL?应尽量避免全表扫描,首先要考虑在 where 及 order by 涉及的列上建立索引避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描应尽量避免在where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描in 和 not in 也要慎用,很多时候用 exists 代替 in 是一个好的选择,对于连续的数值,能用
2021-04-12 15:58:07
19
原创 【JavaP6大纲】MySQL篇:SQL的整个解析、执行过程原理、SQL行转列?
SQL的整个解析、执行过程原理、SQL行转列?sql语句执行顺序(8) SELECT (9)DISTINCT<select_list>(1) FROM <left_table>(3) <join_type> JOIN <right_table>(2) ON <join_condition>(4) WHERE <where_condition>(5) GROUP BY <group_by_list>
2021-04-11 16:35:22
202
原创 【JavaP6大纲】分布式会话篇:集群部署时的分布式 Session 如何实现?
集群部署时的分布式 Session 如何实现?1。tomcat + redis2。spring session + redis(1)tomcat + redis使用session的代码跟以前一样,还是基于tomcat原生的session支持即可,然后就是用一个叫做Tomcat RedisSessionManager的东西,在tomcat的配置文件中,配置一下,让所有我们部署的tomcat都将session数据存储到redis即可。(2)spring session + redis给sping s
2021-04-11 16:25:12
58
原创 【JavaP6大纲】SpringCould篇:Spring Cloud 和 Dubbo 有哪些区别?
Spring Cloud 和 Dubbo 有哪些区别?dubbo 是二进制传输,占用带宽会少一点。SpringCloud是http 传输,带宽会多一点,同时使用http协议一般会使用JSON报文,消耗会更大。dubbo 开发难度较大,所依赖的 jar 包有很多问题大型工程无法解决。SpringCloud 对第三方的继承可以一键式生成,天然集成。SpringCloud 接口协议约定比较松散,需要强有力的行政措施来限制接口无序升级。最大的区别:Spring Cloud抛弃了Dubbo 的RPC通信,采
2021-04-11 16:23:36
24
原创 【JavaP6大纲】SpringCould篇: Spring Boot 和 Spring Cloud,谈谈你对它们的理解?
Spring Boot 和 Spring Cloud,谈谈你对它们的理解?Spring Cloud是一个基于Spring Boot实现的云应用开发工具;Spring boot专注于快速、方便集成的单个个体,Spring Cloud是关注全局的服务治理框架;spring boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置,Spring Cloud很大的一部分是基于Spring boot来实现。...
2021-04-11 16:22:56
22
原创 【JavaP6大纲】SpringCould篇:如何限流?在工作中是怎么做的?说一下具体的实现?
如何限流?在工作中是怎么做的?说一下具体的实现?计数器:控制单位时间内的请求数量。缺陷:设每分钟请求数量为60个,每秒可以处理1个请求,用户在 00:59 发送 60 个请求,在 01:00 发送 60 个请求 此时2秒钟有120个请求(每秒60个请求),远远大于了每秒钟处理数量的阈值。滑动窗口:滑动窗口是对计数器方式的改进, 增加一个时间粒度的度量单位。把一分钟分成若干等分(6份,每份10秒), 在每一份上设置独立计数器,在 00:00-00:09 之间发生请求计数器累加1.当等分数量越大限流统计就越
2021-04-11 16:21:43
20
原创 【JavaP6大纲】SpringCould篇:熔断框架如何做技术选型?选用 Sentinel 还是 Hystrix?
熔断框架如何做技术选型?选用 Sentinel 还是 Hystrix?功能SentinelHystrix隔离策略信号量隔离线程池隔离/信号量隔离熔断降级策略基于响应时间或失败比率基于失败比率实时指标实现滑动窗口滑动窗口(基于 RxJava)规则配置支持多种数据源支持多种数据源扩展性多个扩展点插件的形式基于注解的支持支持支持限流基于 QPS,支持基于调用关系的限流不支持流量整形支持慢启动、匀速器模式不支持系
2021-04-11 16:20:23
20
原创 【JavaP6大纲】SpringCould篇:服务发现组件 Eureka 的主要调用过程?Eureka 和 Zookeeper 都可以提供服务注册与发现的功能,它们有什么区别?
服务发现组件 Eureka 的主要调用过程?Eureka 和 Zookeeper 都可以提供服务注册与发现的功能,它们有什么区别?1、Eureka Server 启动成功,等待服务端注册。在启动过程中如果配置了集群,集群之间定时通过 Replicate 同步注册表,每个 Eureka Server 都存在独立完整的服务注册表信息2、Eureka Client 启动时根据配置的 Eureka Server 地址去注册中心注册服务3、Eureka Client 会每 30s 向 Eureka Server
2021-04-11 16:19:35
20
原创 【JavaP6大纲】SpringCould篇:常用组件底层实现
常用组件底层实现?Eureka是微服务架构中的注册中心,专门负责服务的注册与发现。服务中都有一个Eureka Client组件,这个组件专门负责将这个服务的信息注册到Eureka Server中。Eureka Client告诉Eureka Server,自己在哪台机器上,监听着哪个端口。而Eureka Server是一个注册中心,里面有一个注册表,保存了各服务所在的机器和端口号。Eureka Client把这些相关信息从Eureka Server的注册表中拉取到自己本地缓存起来Feign直接就是
2021-04-11 16:18:32
21
1
原创 【JavaP6大纲】SpringCould篇:什么是微服务
什么是微服务?单体架构的痛点缺点一:项目过于臃肿当大大小小的功能模块都集中在同一项目的时候,整个项目必然会变得臃肿,让开发者难以维护。缺点二:资源无法隔离,整个单体系统的各个功能模块都依赖于同样的数据库、内存等资源,一旦某个功能模块对资源使用不当,整个系统都会被拖垮。缺点三:无法灵活扩展当系统的访问量越来越大的时候,单体系统固然可以进行水平扩展,部署在多台机器上组成集群,但是这种扩展并非灵活的扩展。比如我们现在的性能瓶颈是支付模块,希望只针对支付模块做水平扩展,这一点在单体系统是做不到的。微服务架
2021-04-11 16:17:44
19
原创 【JavaP6大纲】Dubbo篇:为什么要进行系统拆分?如何进行系统拆分?拆分后不用 Dubbo 可以吗?
为什么要进行系统拆分?如何进行系统拆分?拆分后不用 Dubbo 可以吗?为什么要将系统进行拆分?要是不拆分,一个大系统几十万行代码,20 个人维护一份代码,简直是悲剧啊。代码经常改着改着就冲突了,各种代码冲突和合并要处理,非常耗费时间;经常我改动了我的代码,你调用了我的,导致你的代码也得重新测试,麻烦的要死;然后每次发布都是几十万行代码的系统一起发布,大家得一起提心吊胆准备上线,几十万行代码的上线,可能每次上线都要做很多的检查,很多异常问题的处理,简直是又麻烦又痛苦;而且如果我现在打算把技术升级到最新的
2021-04-11 16:16:31
18
原创 【JavaP6大纲】Dubbo篇:Dubbo 用到哪些设计模式?
Dubbo 用到哪些设计模式?Dubbo 框架在初始化和通信过程中使用了多种设计模式,可灵活控制类加载、权限控制等功能。工厂模式Provider 在 export 服务时,会调用 ServiceConfig 的 export 方法。ServiceConfig中有个字段:private static final Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();D
2021-04-11 16:15:44
18
原创 【JavaP6大纲】Dubbo篇:Dubbo SPI 和 Java SPI 区别?
Dubbo SPI 和 Java SPI 区别?spi 是啥?spi,简单来说,就是 service provider interface ,说白了是什么意思呢,比如你有个接口,现在这个接口有 3 个实现类,那么在系统运行的时候对这个接口到底选择哪个实现类呢?这就需要 spi 了,需要根据指定的配置或者是默认的配置,去找到对应的实现类加载进来,然后用这个实现类的实例对象。举个栗子。你有一个接口 A。A1/A2/A3 分别是接口 A 的不同实现。你通过配置 接口 A = 实现 A2 ,那么在系统实际运行的
2021-04-09 10:09:14
203
原创 【JavaP6大纲】Dubbo篇:Dubbo特性?
Dubbo特性?透明远程调用:就像调用本地方法一样调用远程方法;只需简单配置,没有任何 API 侵入负载均衡机制:Client 端 LB,可在内网替代 F5 等硬件负载均衡器容错重试机制:服务 Mock 数据,重试次数、超时机制等自动注册发现:注册中心基于接口名查询服务提 供者的 IP 地址,并且能够平滑添加或删除服务提供者性能日志监控:Monitor 统计服务的调用次调和调用时间的监控中心服务治理中心:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等手动配置自动治理中心:无,比
2021-04-09 10:08:33
88
原创 【JavaP6大纲】Dubbo篇:如何自己设计一个类似 Dubbo 的 RPC 框架?
如何自己设计一个类似 Dubbo 的 RPC 框架?上来你的服务就得去注册中心注册吧,你是不是得有个注册中心,保留各个服务的信息,可以用 zookeeper 来做,对吧。然后你的消费者需要去注册中心拿对应的服务信息吧,对吧,而且每个服务可能会存在于多台机器上。接着你就该发起一次请求了,咋发起?当然是基于动态代理了,你面向接口获取到一个动态代理,这个动态代理就是接口在本地的一个代理,然后这个代理会找到服务对应的机器地址。然后找哪个机器发送请求?那肯定得有个负载均衡算法了,比如最简单的可以随机轮询是不是
2021-04-09 10:07:53
210
原创 【JavaP6大纲】Dubbo篇:分布式服务接口请求的顺序性如何保证?
分布式服务接口请求的顺序性如何保证?服务 A 调用服务 B,先插入再删除。好,结果俩请求过去了,落在不同机器上,可能插入请求因为某些原因执行慢了一些,导致删除请求先执行了,此时因为没数据所以啥效果也没有;结果这个时候插入请求过来了,好,数据插入进去了,那就尴尬了。本来应该是 “先插入 -> 再删除”,这条数据应该没了,结果现在 “先删除 -> 再插入”,数据还存在。首先,一般来说,个人建议是,你们从业务逻辑上设计的这个系统最好是不需要这种顺序性的保证,因为一旦引入顺序性保障,比如使用分布式锁
2021-04-08 17:12:32
87
1
原创 【JavaP6大纲】Dubbo篇:如何基于 Dubbo 进行服务治理、服务降级、失败重试以及超时重试?
如何基于 Dubbo 进行服务治理、服务降级、失败重试以及超时重试?服务治理调用链路自动生成一个大型的分布式系统,或者说是用现在流行的微服务架构来说吧,分布式系统由大量的服务组成。那么这些服务之间互相是如何调用的?调用链路是啥?说实话,几乎到后面没人搞的清楚了,因为服务实在太多了,可能几百个甚至几千个服务。那就需要基于 dubbo 做的分布式系统中,对各个服务之间的调用自动记录下来,然后自动将各个服务之间的依赖关系和调用链路生成出来,做成一张图,显示出来,大家才可以看到对吧。服务访问压力以
2021-04-08 11:19:29
113
9
原创 【JavaP6大纲】Dubbo篇:Dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略呢?
Dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略呢?负载均衡:1、Random LoadBalance,随机(默认的负载均衡策略)是加权随机算法的具体实现,可以完全随机,也可以按权重设置随机概率。2、RoundRobin LoadBalance,轮循。可以轮询和加权轮询。存在响应慢的提供者会累积请求的问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。跟运维同学申请机器,有的时候,我们运气好,正好公司资源比较充足,刚刚有一批热气腾腾、刚刚做
2021-04-08 11:03:00
1024
15
原创 【JavaP6大纲】Dubbo篇:Dubbo 支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为什么 PB 的效率是最高的?
Dubbo 支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为什么 PB 的效率是最高的?Dubbo协议:dubbo 缺省协议 采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况,不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。连接个数:单连接连接方式:长连接传输协议:TCP传输方式:NIO异步传输序列化:Hessian 二进制序列化适用范围:传入传出参数数据包较小(建议小于100K),消费者比
2021-04-08 10:57:09
1200
17
原创 【JavaP6大纲】MySQL篇:传播行为
传播行为?Spring支持7中事务传播行为一个场景:假设外层方法里面包含二个新增用户和新增角色的方法,二个方法后面还会抛一个异常。propagation_required(需要传播):当前没有事务则新建事务,有则加入当前事务。外围方法未开启事务,插入用户表和用户角色表的方法在自己的事务中独立运行,外围方法异常不影响内部插入,所以两条记录都新增成功。外围方法开启事务,内部方法加入外围方法事务,外围方法回滚,内部方法也要回滚,所以两个记录都插入失败。propagation_supports(支持传播
2021-04-08 10:46:54
53
1
原创 【JavaP6大纲】Dubbo篇:Dubbo 的工作原理?注册中心挂了可以继续通信吗?
Dubbo 的工作原理?注册中心挂了可以继续通信吗?第一步:provider 向注册中心去注册第二步:consumer 从注册中心订阅服务,注册中心会通知 consumer 注册好的服务第三步:consumer 调用 provider第四步:consumer 和 provider 都异步通知监控中心服务注册与发现1、Provider(提供者)绑定指定端口并启动服务2、供者连接注册中心,并发本机 IP、端口、应用信息和提供服务信息发送至注册中心存储3、Consumer(消费者),连接注册中心
2021-04-08 10:44:53
803
11
原创 【JavaP6大纲】Java基础篇:CAS,ABA,volatile特性
CAS,ABA,volatile特性?CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。如果内存地址里面的值和A的值是一样的,那么就将内存里面的值更新成B。CAS是通过无限循环来获取数据的,若果在第一轮循环中,a线程获取地址里面的值被b线程修改了,那么a线程需要自旋,到下次循环才有可能机会执行。ABA 问题:CAS算法实现一个重要前提需要取出内存中的某时刻的数据并在当下时刻比较并交换,那么在这个时间差类会导致数据的变化。比如,一个线程one从内存位置V中取出A,这个时候另外一
2021-04-08 10:21:58
920
12
原创 【JavaP6大纲】Java基础篇:为什么jdk8以后HashMap会使用红黑树优化?
为什么jdk8以后HashMap会使用红黑树优化?在Jdk1.8版本后,Java对HashMap做了改进,在链表长度超过8且数组长度大于64时,将后面的数据存在红黑树中,以加快检索速度。为什么是使用红黑树而不是AVL树,AVL树是完全平衡二叉树阿?在CurrentHashMap中是加锁了的,实际上是读写锁,如果写冲突就会等待,如果插入时间过长必然等待时间更长,而红黑树相对AVL树他的插入更快!在AVL树中,从根到任何叶子的最短路径和最长路径之间的差异最多为1。在红黑树中,差异可以是2倍。在AVL树中
2021-04-08 10:21:17
1456
16
原创 【JavaP6大纲】Java基础篇:HashMap为什么会发生并发修改异常?并发修改异常解决方案?
HashMap为什么会发生并发修改异常?并发修改异常解决方案?HashMap实际使用过程中会出现一些线程安全问题,在JDK1.7中,当并发执行扩容操作时会造成环形链和数据丢失的情况,开多个线程不断进行put操作,rehash的时候,旧链表迁移新链表的时候,如果在新表的数组索引位置相同,则链表元素会倒置(就是因为头插) 所以最后的结果打乱了插入的顺序,就可能发生环形链和数据丢失的问题,引起死循环,导致CPU利用率接近100%。在jdk1.8中对HashMap进行了优化,发生hash碰撞,不再采用头插法方式,
2021-04-08 10:20:29
32
1
原创 【JavaP6大纲】Java基础篇:HashMap加载因子为什么是0.75?
HashMap加载因子为什么是0.75如果加载因子比较大,扩容发生的频率比较低,浪费的空间比较小,发生hash冲突的几率比较大。比如,加载因子是1的时候,hashmap长度为128,实际存储元素的数量在64至128之间时间段比较多,这个时间段发生hash冲突比较多,造成数组中其中一条链表比较长,会影响性能。如果加载因子比较小,扩容发生的频率比较高,浪费的空间比较多,发生hash冲突的几率比较小。比如,加载因子是0.5的时候,hashmap长度为128,当数量达到65的时候会触发扩容,扩容后为原理的256
2021-04-08 10:19:37
38
1
原创 【JavaP6大纲】Java基础篇:HashMap扩容机制
HashMap扩容机制将(k1,v1)直接放入Node类型的数组中,这个数组初始化容量是16,默认的加载因子是0.75,也就是当元素加到12的时候,底层会进行扩容,扩容为原来的2倍。可能引发的问题:HashMap实际使用过程中会出现一些线程安全问题,在JDK1.7中,当并发执行扩容操作时会造成环形链和数据丢失的情况,开多个线程不断进行put操作,rehash的时候,旧链表迁移新链表的时候,如果在新表的数组索引位置相同,则链表元素会倒置(就是因为头插) 所以最后的结果打乱了插入的顺序,就可能发生环形链和
2021-04-08 10:18:34
50
3
原创 【JavaP6大纲】Java基础篇:HashMap底层原理
HashMap底层原理?HashMap是Map的一个实现类,它是以键值对存储数据的,Key-Value都是Map.Entry中的属性。当我们向HashMap中存放一个元素(k1,v1),先根据k1的hashCode方法来决定在数组中存放的位置。如果这个位置没有其它元素,将(k1,v1)直接放入一个Node类型的数组中,当元素加到12的时候,底层会进行扩容,扩容为原来的2倍。如果该位置已经有其它元素(k2,v2),那就调用k1的equals方法和k2进行比较二个元素是否相同,如果结果为true,说明二个元素
2021-04-08 10:17:55
48
原创 【JavaP6大纲】Zookeeper篇:Zookeeper脑裂问题
Zookeeper脑裂问题?当一个集群的不同部分在同一时间都认为自己是活动的时候,我们就可以将这个现象称为脑裂症状。通俗的说,就是比如当你的 cluster 里面有两个结点,它们都知道在这个 cluster 里需要选举出一个 master。那么当它们两之间的通信完全没有问题的时候,就会达成共识,选出其中一个作为 master。但是如果它们之间的通信出了问题,那么两个结点都会觉得现在没有 master,所以每个都把自己选举成 master,于是 cluster 里面就会有两个 master。解决方案:1
2021-04-07 17:10:35
73
10
原创 【JavaP6大纲】Zookeeper篇:分布式锁
Zookeeper分布式锁?客户端A要获取分布式锁的时候首先到locker下创建一个临时顺序节点(node_n),然后立即获取locker下的所有(一级)子节点。此时因为会有多个客户端同一时间争取锁,因此locker下的子节点数量就会大于1。对于顺序节点,特点是节点名称后面自动有一个数字编号,先创建的节点数字编号小于后创建的,因此可以将子节点按照节点名称后缀的数字顺序从小到大排序,这样排在第一位的就是最先创建的顺序节点,此时它就代表了最先争取到锁的客户端!此时判断最小的这个节点是否为客户端A之前创建出来的
2021-04-07 16:55:23
1836
21
原创 【JavaP6大纲】Zookeeper篇:Zookeeper假死问题
Zookeeper假死问题?假死:心跳出现超时可能是master挂了,但是也可能是master,zookeeper之间网络出现了问题,也同样可能导致。这种情况就是假死,master并未死掉,但是与ZooKeeper之间的网络出现问题导致Zookeeper认为其挂掉了然后通知其他节点进行切换,这样slaver中就有一个成为了master,但是原本的master并未死掉,这时候client也获得master切换的消息,但是仍然会有一些延时,zookeeper需要通讯需要一个一个通知,这时候整个系统就很混乱可能
2021-04-07 16:54:42
107
16
原创 【JavaP6大纲】Zookeeper篇:选举机制
选举机制领导者选举的过程实际上就是比较哪台服务器比较强,比较规则是:1. 谁的数据比较新谁当领导(zxid),2.数据都一样则看谁的服务器Id(myid)比较大,谁就是领导;这个过程是通过各个服务器之间相互投票来进行的,每台服务器会接收其他服务器的投票,在投票信息里就会包含上面说的两个信息zxid, myid,然后进行PK,选出谁比较强,而PK中弱的那一方修改自己的投票,改为投刚刚和自己PK赢的一方,所以按照这个规则,每台服务器都会有一个自己认为最强的那个人,而在整个投票的过程中,每台服务器内部都会存在一
2021-04-07 16:53:36
1100
17
原创 【JavaP6大纲】Zookeeper篇:zookeeper工作原理
Zookeeper底层原理?zookeeper:Zookeeper会维护一个类似于标准的文件系统的具有层次关系的数据结构。这个文件系统中每个子目录项都被称为znode节点,这个znode节点也可以有子节点,每个节点都可以存储数据,客户端也可以对这些node节点进行getChildren,getData,exists方法,同时也可以在znode tree路径上设置watch(类似于监听),当watch路径上发生节点create、delete、update的时候,会通知到client。client可以得到通知
2021-04-07 16:53:05
43
原创 【JavaP6大纲】MySQL篇:索引数据结构
索引数据结构B+树中间节点没有存储数据,叶节点存放数据,其余节点用来索引,所以同样大小的磁盘页可以容纳更多的节点元素,而B树是每个索引节点都会有Data域,所以B+树IO的次数更少。B+树的数据保存,只有在叶子节点中才会有,而根节点只保存了索引,比如说根节点大小是16kb,一个索引大小是4b,如果树结构有三层的话,那么他就可以保存几千万条数据,而这几千万条数据只需要三次就可以查到,并且所有的叶子节点都是从左到右有序排列的,B+树的叶子节点之间使用了指针相连,提高范围查找的效率。...
2021-04-07 16:34:40
911
12
原创 【JavaP6大纲】MySQL篇:悲观锁、乐观锁、排它锁、共享锁、表级锁、行级锁,死锁
悲观锁、乐观锁、排它锁、共享锁、表级锁、行级锁,死锁?悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。适用于写为居多的场景下。比如行锁,表锁等,读锁,写锁,syncronized实现的锁等。sql中实现悲观锁,使用for update对数据加锁,例如:select num from goods where id = 1 for update;乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在
2021-04-07 15:29:31
1056
19
Java中高级面试题(月薪过万).pdf
2019-12-20
P6级付费专栏文档.zip
2021-02-22
docker常用命令.doc
2020-09-22
MySQL高级脑图
2019-02-22
菜鸟面试
发表于 2019-09-05 最后回复 2020-08-02
JAVA CAS 单点登录 登录成功后 不跳转指定URL
发表于 2019-04-11 最后回复 2019-04-11
spring-data-elasticsearch 一对多
2019-06-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人 TA的粉丝