Java-一些理论概念-持续补充

理论将会只说个大概或者不进行说明,因每个理论都要涉及一些文章,有想了解的可自行查阅资料.

欢迎大家补充说明

CAS(Compare and Swap)

https://blog.csdn.net/qq_32998153/article/details/79529704

ABA

CAS有可能会产生ABA问题
https://blog.csdn.net/qq_32998153/article/details/79529704

TCC
2PC
3PC

分布式事务解决方案
TCC(Try-Confirm-Cancel) 
2PC(Two Phase Commit) 
https://www.liangzl.com/get-article-detail-525.html

ACID

Atomicity:原子性(要么都做,要么都不做)  
Consistency:一致性(数据库只有一个状态,不存在未确定状态)  
Isolation:隔离性(事务之间互不干扰)  
Durability: 永久性(事务一旦提交,数据库记录永久不变)

CAP

Consistency(一致性)
Availability(可用性)
Partition tolerance(分区容错性)
并且三者不可得兼

BASE

BA:Basically Available,基本可用。  
S:Soft State,软状态,状态可以有一段时间不同步。 
E:Eventually Consistent,最终一致,最终数据是一致的就可以了,而不是时时保持强一致。
主要是解决 CAP 理论中分布式系统的可用性和一致性不可兼得的问题

以下不能称之为理论,但是写到一起,方便查看.
JMM

JMM(Java Memory Model)
https://blog.csdn.net/longfulong/article/details/78790955
ps : 想要完全理解JMM,可以看ConcurrentHashMap的实现源码,看懂了,基本就完全OK了.而且并发也就可以搞懂了!

RPC

RPC(Remote Procedure Call)—远程过程调用
ps : 是不是有人看到会想,天,这个也在这里说明,大家都知道的. 哈哈 , 那就不过多说明!
只提一下 : 目前比较火的有 dubbo、thrift、springcloud、marathon-lb(嗯,这个也写这吧)

BIO

同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。

NIO

同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

AIO

异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。
NIO比BIO的改善之处是把一些无效的连接挡在了启动线程之前,减少了这部分资源的浪费(因为我们都知道每创建一个线程,就要为这个线程分配一定的内存空间)。
AIO比NIO的进一步改善之处是将一些暂时可能无效的请求挡在了启动线程之前,比如在NIO的处理方式中,当一个请求来的话,开启线程进行处理,但这个请求所需要的资源还没有就绪,此时必须等待后端的应用资源,这时线程就被阻塞了。
适用场景分析 : 
      1> BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解,如之前在Apache中使用。
      2> NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持,如在 Nginx,Netty中使用。
      3> AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持,在成长中,Netty曾经使用过,后来放弃。

GC

垃圾收集器,没必要解释了

JVM

JVM(Java Virtual Machine Model)
没必要解释了

三次握手,四次挥手

不多解释,看链接即可
https://blog.csdn.net/qq_38950316/article/details/81087809

redis

redis雪崩
redis缓存穿透
redis分布式锁
不做说明,有兴趣的可以看我的博客 - Java-redis-一些概念及说明

spring

IoC(Inversion of Control,控制倒转)
AOP (Aspect Oriented Programming)
加上这个,主要是spring用的太广泛了.而且必会的.

mysql

分区
分表
行锁
表锁
集群
主从
中间件 : 目前较火的mycat、atlas
so easy , 天天用的,不做说明

消息队列

顺序基本为使用人员从多到少
kafka
rabbitmq
RocketMQ
ActiveMQ
ZeroMQ
MetaMq
环形队列
Redis、Mysql 也可实现队列,但是我个人不把它当作消息队列看待! >_<
发布了67 篇原创文章 · 获赞 10 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_17522211/article/details/94020698
今日推荐