ζ框架技术
文章平均质量分 92
张伟光
好玩的不是技术,好玩的是用技术玩转业务
展开
-
分库分表实战问题
1.分库分表中水平拆分和垂直拆分的区别?水平拆分:将表数据拆分到不同的数据数据库中。垂直拆分:把一个大表拆成多个小表。字段进行拆分。分表:是指的是把表数据拆分到多张表里面。range分发:每个月生成一个新表。如果访问新的数据还好,但是访问旧的数据就麻烦一些。hash分发:平均分配,但是扩容的话会比较麻烦。2.如何让未分库分表的系统,设计成分库分表的系统?1)停机迁移方案2)双写迁移方案修改系统中所有写库的代码,同时让他写老库和新的分库分表的库。单表的数据中取数据,同步原创 2020-07-21 21:46:18 · 227 阅读 · 0 评论 -
分布式系统常见实战问题解决方案
1.dubbo工作原理1)service层:接口层,给服务提供者和消费者来实现。2)config层:配置层,主要是对dubbo进行配置的3)proxy层:代理层,透明生成生成客户端的stub和服务单的skeleton4)registry层:服务注册层,负责服务的注册和发现5)cluster层:集群层,封装多个服务提供者的路由以及负载均衡,将多个实例组合成一个服务6)monitor层:监控层,对rpc接口的调用次数和调用时间进行监控7)protocol层:远程调用层,封装rpc调用原创 2020-07-21 20:10:27 · 484 阅读 · 0 评论 -
项目中常见的缓存问题实战
1.redis的线程模型是什么?为什么单线程的redis比多线程的memcached效率要高得多(为什么redis是单线程的但是还可以支撑高并发)?[redis线程模型]redis的server端会有server socket来接收客户端的请求,当准备完毕会放入io多路复用程序,然后通过io多路复用程序压入一个对列中,然后通过文件事件分派器给到链接应答处理器。这时候发送set命令接着放到io多路复用程序,也会压入队列中,同时会有一个wating状态来去监听io多路复用程序,然后上面发送命令的请求从队原创 2020-07-13 20:01:04 · 500 阅读 · 0 评论 -
分布式引擎-es
1.es的分布式架构原理能说一下么(es是如何实现分布式的啊)?存储数据的基本单位是索引,比如你现在在es中存一些订单数据,你就应该在es中创建一个索引,order_idx,一个索引差不多就是相当于mysql中的一张表。index -> type -> mapping -> document -> field。index:mysql里面一张表type:详单于订单分类。例如一个是实物商品订单type,一个是虚拟商品订单type;很多情况下,一个index里可能就一个type原创 2020-07-12 17:07:46 · 283 阅读 · 0 评论 -
消息队列常见实战问题
1.如何保证消息队列的高可用?一、rabbitmq的高可用a.单机模式b.普通集群模式(无高可用性) 【连接获取数据方式】创建的queue只会放到一个mq上,消费的时候如果连接的另一个实例。那么需要去存放数据的queue拉取数据。 【设置连接方式】 1)随机 的获取实例连接所有的queue。缺点:有拉取数据的性能问题 2)指定到有queue的mq上。缺点:单实例的性能瓶颈 【事故处理方式】存放了queue的实例宕机了,未开启...原创 2020-07-12 15:45:38 · 375 阅读 · 0 评论 -
SpringBoot使用RateLimiter通过AOP方式进行限流
引言:我们为了防止接口防刷操作,我们需要对接口做一些处理,如下是简单的对接口进行防刷的操作,具体是用aop+redis设置过期时间来实现的一、方法上添加注解 @InvokeRateLimit(rate = 1 * 60)二、配置一个要拦截的接口package com.sunlands.app.common.annotation;import java.lang.annota...原创 2019-11-11 15:35:14 · 756 阅读 · 1 评论 -
【MySQL】之性能优化-事务+锁+MVCC
事务1、概念**数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作; 事务是一组不可再分割的操作集合(工作逻辑单元);**是什么**update user_account set balance = balance - 1000 where userID = 3;update user_account set balance = balance +1000 where ...原创 2019-09-26 21:48:52 · 184 阅读 · 1 评论 -
【并发编程】--AQS实现原理
AQSlock之所以能实现线程安全的锁,主要的核心是AQS(AbstractQueuedSynchronizer),AQS提供了一个FIFO队列,可以用来实现锁以及需要同步功能的框架。称为AQS。AQS使用依靠继承来完成,子类通过继承自AQS并实现所需的方法来管理同步状态。ReentrantLock、CountDownLatch。AQS分为两种:独占和共享。独占锁模式下,每次只能有...原创 2019-06-30 21:19:22 · 178 阅读 · 0 评论 -
【MySQL】之性能优化-索引+查询优化
索引A、索引真的去了解正确的创建合适的索引是提升数据库的查询性能的基础。索引是为了加速对表中数据的检索而创建的一种分散存储的数据结构。是什么为什么1、极大地减少存储引擎需要扫描的数据量。2、把随机io编程顺序io。3、帮助我们在分组、排序等操作时避免使用临时表。B、索引为什么选B+Tree?二叉树到平衡二叉树再到B-Tree、B+Tree。平衡二叉树B-Tre...原创 2019-07-07 19:33:57 · 200 阅读 · 0 评论 -
【并发编程】--volatile底层实现原理
1、volatile解决可见性使用缓存一致性。防止指令重排序使用内存屏障,保证有序性。有volatile变量修饰的共享变量,编译时会有lock前缀。volatile实现原则:·Lock前缀指令会引起处理器缓存回写到内存。(总线锁、缓存锁)·一个处理器的缓存回写到内存会导致其他处理器的缓存无效。(MESI、嗅探)缓存一致性协议:处理器上有一套完整的协议,来保证 Cac...原创 2019-06-09 19:35:40 · 293 阅读 · 0 评论 -
项目引入redis并且简单应用
【前言】在金融圈流传金钱为王,而在互联网圈则流传缓存为王,redis就是其中不可或缺的一种缓存方式。【pom文件引入redis】<!-- redis --><dependency><groupId>org.springframework.boot</groupId><artifactId&g...原创 2019-03-28 20:32:02 · 1497 阅读 · 0 评论 -
Mybatis 一对多的理解
前言:为什么要用一对多呢?最近在做实习的项目,一个用户会有多份简历,一份简历又会有个多个招聘,这时需要通过用户来获取他下面的简历,并且要带上招聘信息,这时候就会用到一对多的关系。具体需要做成的数据,如图所示。代码实现:xml文件 <resultMap type="com.yc.m.Customer" id="resultCustomerMap"> &l...原创 2019-03-24 20:38:24 · 197 阅读 · 0 评论 -
maven-垮领域的一项发明
为什么需要它? 买个电脑,需要自己考虑买什么样的cpu,买多大的硬盘,买多大的固态硬盘,买多大的内存条,还要考虑放到一起是不是合适,这一系列的选择做完了,花费的时间很长,本身我们每天做项目,在做自己的逻辑的时候,需要好多时间,还要考虑这些,真的很费心,,,这时候maven出场了,很高级。它有什么东西,我们能用到它来做什么?学习它的价值? 构建的演化过程中...原创 2019-03-10 20:39:13 · 241 阅读 · 0 评论