微服务-多线程-队列-设计模式-MySQL-分布式事务

什么是微服务,微服务的好处

单体式应用
所有的业务模块的代码冗余到了一起 单体部署;每次上线或者简单的修改都是牵一发而动全身;不利于后期的迭代开发
而使用微服务后;一般是基于业务模块区分;将关联不紧密的服务单独拆分出来 作为单个服务对外暴露接口;这样做有两个好处 第一个是利于项目的并行开发,第二个是利于项目的快速部署和线上维护
而常见的微服务;我了解的有两类 一种是基于Springboot 为骨架展开的微服务技术;主要有5大组件Eurake,Hytrix,Ribbion,Feign,Zuul

微服务的几个常用组件

Eurake

1:Eurake 作为服务注册中心 服务启动的时候会将自己的服务实例注册到Eurake上面 微服务其他节点会每隔15秒向各个服务发送心跳证明自己还活着;如果超过时间注册中心没用收到心跳;服务注册中心就会下线这个服务
高可用 Eurake 互相注册

Hytrix

服务熔断和降级

什么时熔断:只A服务调用B服务的时候在一定时间出错的次数达到了一个阈值的时候;A服务不在调用B的服务而是会走自身的的逻辑走降级的策略
然后个一段时间A服务还会尝试调用B 如果成功就断路器关闭 正常调用
如果失败继续闭合走自身的逻辑

Ribbon

远程调用的组件
轮询策略

Feign

也是一种远程调用的组件 feignClient 指定服务名 callback 指定降级函数

Gateway

业务网关 限流 grava 取得令牌 ,路由
灰度发布:AB测试

常用的数据结构 Map Set List Queue

Map

HashMap

put(key,value);底层是数组 默认初始值是16 发生hash碰撞的时候会变成链表,链表超过8就会转换成红黑树 ;什么时候resize: 当容量大于16*负载因子的时候就会扩容;里面的key 和value 可以是空值;HashMap存放数据是无序的

HashTable

里面的key和value不能为空值;里面的方法都是synchronized 修饰 其他的属性跟hashMap 类似;hashTable存放数据是无序的

LinkedHashMap

相比HashMap ;linkHashMap 是有序的;怎么放进去的就可以怎么拿出来;实现双向链表

Currenhashmap

线程安全的

TreeMap

可以排序,但是不安全

Set 分为HashSet,TreeSet ,LinkHashSet

HashSet

内部的数据结构是哈希表,是线程不安全的; HashSet中保证集合中元素是唯一的方法:通过对象的hashCode和equals方法来完成对象唯一性的判断;
如果对象的hashCode值相同,需要用equals方法进行比较,如果结果为true,则视为相同元素,不存,如果结果为false,视为不同元素,进行存储。如果元素要存储到HashCode中,必须覆盖hashCode方法和equals方法

TreeSet

有序

LinkedHashSet

有序

List

ArrayList

底层是数组,有序的,在内存中是一个连续的空间;查询根据数据索引查询比较快

LinkedList

底层是链表,增删快,在内存中不是一个连续的空间,只需修改指针的指向就可以插入和删除数据了

Queue

非阻塞队列

ConcurrentLinkedQueue

阻塞队列

ArrayBlokingQueue 用数组实现的有界阻塞队列
LinkedBlockingQueue 基于链表实现的有界阻塞队列,此队列的默认长度是integer_MAX_VALUE
PriorityBlockingQueue PriorityBlockingQueue是一个带优先级的队列,而不是先进先出队列。元素按优先级顺序被移除,该队列也没有上限(PriorityBlockingQueue是对 PriorityQueue的再次包装,是基于堆数据结构的,而PriorityQueue是没有容量限制的,与ArrayList一样,所以在优先阻塞 队列上put时是不会受阻的。虽然此队列逻辑上是无界的,但是由于资源被耗尽,所以试图执行添加操作可能会导致 OutOfMemoryError),但是如果队列为空,那么取元素的操作take就会阻塞,所以它的检索操作take是受阻的。也是用ReentrantLock控制并发。
DelayQueue DelayQueue是在PriorityQueue基础上实现的,底层也是数组构造方法,是一个存放Delayed 元素的无界阻塞队列,只有在延迟期满时才能从中提取元素。该队列的头部是延迟期满后保存时间最长的 Delayed 元素。如果延迟都还没有期满,则队列没有头部,并且poll将返回null。当一个元素的 getDelay(TimeUnit.NANOSECONDS) 方法返回一个小于或等于零的值时,则出现期满,poll就移除这个元素了。此队列不允许使用 null 元素
SynchronousQueue 一个没有容量的队列 ,不会存储数据,每执行一次put就要执行一次take,否则就会阻塞。未使用锁。通过cas实现,吞吐量异常高。内部采用的就是ArrayBlockingQueue的阻塞队列,所以在功能上完全可以用ArrayBlockingQueue替换,但是SynchronousQueue是轻量级的,SynchronousQueue不具有任何内部容量,我们可以用来在线程间安全的交换单一元素。所以功能比较单一,优势就在于轻量。
linkedBlockingDeque LinkedBlockingDeque是双向链表实现的双向并发阻塞队列。该阻塞队列同时支持FIFO和FILO两种操作方式,即可以从队列的头和尾同时操作(插入/删除);并且,该阻塞队列是支持线程安全,当多线程竞争同一个资源时,某线程获取到该资源之后,其它线程需要阻塞等待。此外,LinkedBlockingDeque还是可选容量的(防止过度膨胀),即可以指定队列的容量。如果不指定,默认容量大小等于Integer.MAX_VALUE。
在这里插入图片描述

Mysql 调优

索引

1:索引的种类分主键索引,唯一索引,组合索引,普通索引
2:面试常问问题:
回表:非主键索引查询的时候,得到的是当前行;然后根据主键id查询到该行数据
索引下推:在Mysql5.6 后数据库做了优化,将数据的查询下推到server层处理;减少了回表的次数
最左匹配:最左匹配,mysql会一直向右匹配直到遇到了范围查询(>< between,like)时就会停止匹配
索引覆盖:通过组合索引解决回表的问题
分库分表:按业务拆分数据库 例如整个系统 分产品库数据库;合同数据库;有源无源数据库等等;垂直切分表 将大字段的表拆分成小字段;例如商品表;商品详情表;商品图片等
水平切分表;按时间切分
读写分离
Mysql 优化

多线程

1.线程和进程的区别:
进程时操作系统分配的基本单元,而进程时任务调度和任务执行的基本单元,一个进程至少包含一个线程
2:启动线程的几种方式 1:继承Thread类 2:实现Runable 接口,重写run 方法 3 线程池
3:线程的几种状态 new runable running wait wait_time teminate
4:线程池关闭的 方法: shutdownNow
5:wait 和sleep 的区别 wait释放锁,sleep 没有释放锁
6:noticefy 和noticefyAll区别:noticefy 随机唤醒某个线程;noticefyALL唤醒所有线程
7: synchronize 锁升级的 过程;第一个线程进去无锁 锁记录当前线程对象的头信息;升级成偏向锁; 当多个线程争抢锁的时候就会升级成轻量级锁;多个线程自旋等待锁释放;当自旋的数量超过10个的时候就会升级成重量级锁 线程进入等待队列
8:线程池的7种 参数 核心线程数,最大线程数,时间,时间类型,线程工厂,等待队列,拒绝策略
总结
核心线程满了,接下来进队列,队列也满了,创建新线程,直到达到最大线程数,之后再超出,会进入拒绝rejectedExecution
几种线程池类型: fix ,cache,single ,shedule
9.几种常见的锁,reentrantLock,countdownLatch,cyclebarrier,semaphore
reentrantLock 和synchronized 的区别;一个需要手动释放锁一个自动释放锁

事务

1:ACID :原子性,一致性,隔离性,持久性
2:事务的传播方式: 默认时required 有7种
3:事务什么时候会失效:当前的数据库不支持事务,当前的bean没有交由spring管理;该方法没有用public 修饰
4:ACP AP Eurake CP zk
5.分布式事务的解决方案:2pc ,3pc,Tcc,seata,mq
6.如何保证分布式环境下,数据的一致性,分布式锁, 基于redis 的分布式锁

Es

es PB量级 秒级查询

ELKB 查询;日志查询

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值