身为建筑师,如果面试的时候面试官说的是英文首字母缩略词,没听过会不会很尴尬?而且你无法描述和回答这个问题!所以,多学点基础英文缩写,一是面试游刃有余,二是可以炫耀一下!你能把下面的20个缩写解释清楚吗?IOC:InversionofControl(控制反转,缩写为IoC),是面向对象编程中的一种设计原则,可以用来降低计算机代码之间的耦合度。最常见的一种方式叫做依赖注入(DependencyInjection,简称DI),还有一种方式叫做“DependencyLookup”。通过控制反转,当一个对象被创建时,它所依赖的对象的引用由一个外部实体传递给它,这个外部实体调节系统中的所有对象。也可以说依赖注入到对象中。AOP:在软件行业中,AOP是AspectOrientedProgramming的缩写,意思是:面向切面编程,一种通过预编译和运行时动态代理实现程序功能统一维护的技术。AOP是OOP的延续,是软件开发的热点,是Spring框架中的重要内容,是函数式编程的衍生范式。AOP可以用来隔离业务逻辑的各个部分,从而降低业务逻辑各个部分之间的耦合度,提高程序的复用性,同时提高开发效率。CAS:是一种乐观锁机制。CAS是英文单词CompareAndSwap的缩写,翻译过来就是比较和替换。CAS机制中使用了三个基本操作数:内存地址V、旧期望值A、待修改的新值B。更新变量时,只有当变量的期望值A与内存地址V中的实际值相同时,才会将内存地址V对应的值更改为B。CAP:CAP原理,又称为CAP定理,指的是分布式系统中的一致性、可用性和分区容错性。CAP原则就是这三个要素最多只能同时达到两个点,不可能三者兼顾。一致性(C):分布式系统中的所有数据备份是否同时具有相同的值。(相当于所有节点访问同一份最新的数据)可用性(A):集群中部分节点发生故障后,集群整体是否还能响应客户端的读写请求。(数据更新的高可用)Partitiontolerance(P):在实际效果上,分区相当于通信的时限要求。如果系统不能在时限内实现数据一致性,则意味着发生了分区,当前操作必须在C和A之间做出选择。AICD:事务属性AICD:原子性(Atomicity):整体不可分性,要么全部做,要么全部不做。一致性:事务执行前后数据库的状态是一致的。隔离性:事务提交前,其操作的数据对其他用户不可见(从其他会话读取的数据仍为提交前的数据状态)。持久性(Durability):一旦事务成功,就会进行永久性的改变、记录和重做日志。RC:数据库隔离级别,ReadCommitted(读取提交的内容)。(1)这是大多数数据库系统默认的隔离级别(但不是MySQL的默认)(2)它满足隔离的简单定义:一个事务只能看到已提交的事务所做的更改(3)这种隔离级别产生的问题是——不可重复读(NonrepeatableRead):不可重复读是指我们在同一个事务中执行完全相同的select语句时,可能会看到不同的结果。RR:数据库隔离级别,RepeatableRead(可重读)。(1)这是MySQL默认的事务隔离级别。(2)保证同一个事务的多个实例在并发读取数据时看到的是同一个数据行。(3)这一层可能出现的问题——幻读:当用户读取一个范围内的数据行时,另一个事务在该范围内插入新行,当用户再次读取该范围内有数据行时,新的找到“幻影”行。(4)InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,MultiversionConcurrencyControl)机制解决了这个问题。Binlog:是TheBinaryLog的缩写,意思是二进制日志文件。Binlog是二进制格式的文件,用于记录用户更新数据库的SQL语句信息。例如,改变数据库表和改变内容的SQL语句会被记录到binlog中,但是对数据库表的查询等内容不会被记录。binlog日志默认为二进制格式,不能用查看文本工具(如cat、vi等)的命令查看,但可以用mysqlbinlog分析查看。当数据写入数据库时??,更新后的SQL语句也会同时写入对应的binlog文件。这个文件就是上面说的binlog文件。使用mysqldump备份时,只是对一段时间内的数据进行全量备份,但如果备份后数据库服务器突然出现故障,此时就会使用binlog日志。主要功能是数据库的主从复制和数据的增量恢复。MVCC:Multi-VersionConcurrencyControl多版本并发控制,MVCC是一种并发控制方式,一般在数据库管理系统中,实现对数据库的并发访问;在编程语言中实现事务性内存。MVCC是通过保存某个时间点的数据快照来实现的。不同存储引擎的MVCC。不同存储引擎的MVCC实现是不同的,典型的有乐观并发控制和悲观并发控制。RESP:RedisSerializationProtocol,RESP是RedisSerializationProtocol的缩写。它是一种直观的文本协议,具有实现极其简单的优点,并且具有出色的解析性能。COW:写时复制(英文:Copy-on-write,简称COW)是计算机编程领域的一种优化策略。其核心思想是,如果多个调用者(callers)同时请求同一个资源(如内存或磁盘上的数据存储),他们将共同获得指向同一个资源的同一个指针,直到有一个调用者试图修改该资源。当显示内容时,系统实际上会复制一份私有副本(privatecopy)给调用者,而其他调用者看到的原始资源保持不变。这个过程对其他调用者是透明的。好处是如果调用者不修改资源,不会创建私有副本,多个调用者只读时可以共享同一个资源。AMQP:AdvancedMessageQueuingProtocol,一种提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的开放标准,专为面向消息的中间件而设计。基于该协议的客户端和消息中间件可以传输消息,不受不同客户端/中间件产品、不同开发语言等条件的限制。Erlang中的实现包括RabbitMQ等。SDS:一种抽象类型的简单动态字符串(SDS)。String是Redis中最常见的数据存储类型,其底层实现是简单动态字符串sds(simpledynamicstring),也就是可以修改的字符串。类似于Java中的ArrayList,通过预先分配冗余空间来减少内存的频繁分配。C语言字符串使用长度为n+1的字符数组来表示长度为n的字符串,字符数组的最后一个元素永远是空字符'\0',因为这种字符串表示不能满足Redis对字符字符串的要求在安全性、效率和功能性方面,Redis构建了自己的SDS来满足其需求。在Redis中,C语言字符串只用在不需要修改字符串值的地方,比如日志。在Redis中,包含字符串值的键值对是使用SDS实现的。此外,SDS还用于AOF缓冲区和客户端状态的输入缓冲区。DDD:DDD(Domain-DrivenDesign领域驱动设计)最早由EricEvans提出,目的是对软件涉及的领域进行建模,以应对因系统规模过大而导致的软件复杂性。整个过程大致是这样的。开发团队与领域专家共同协作,通过泛在语言理解和消化领域知识,将领域知识抽取并逐一划分为子域(核心子域、通用子域、支撑子域),构建模型在子域上,然后重复上述步骤,从而构建出一组满足当前域的模型。RDB:Redis支持两种持久化机制,RDB和AOF。持久化功能可以有效避免进程退出导致的数据丢失。下次重启时,可以使用之前持久化的文件来实现数据恢复。RDB(Redis数据库)。RDB是Redis默认的持久化方案。在指定的时间间隔内,如果执行了指定次数的写操作,就会将内存中的数据写入磁盘。即在指定目录下生成一个dump.rdb文件。Redis重启会通过加载dump.rdb文件来恢复数据。RDB持久化是对当前流程数据生成快照并保存到硬盘的过程。触发RDB持久化的过程分为手动触发和自动触发。AOF:Redis支持两种持久化机制,RDB和AOF。持久化功能可以有效避免进程退出导致的数据丢失。下次重启时,可以使用之前持久化的文件来实现数据恢复。AOF(appendonlyfile)持久化:将每条写入命令记录在独立的日志中,重启时重新执行AOF文件中的命令恢复数据。AOF的主要作用是解决数据持久化的实时性,是目前Redis持久化的主流方式。ZAB:ZAB协议的全称:ZookeeperAtomicBroadcast(ZookeeperAtomicBroadcastProtocol)。ZAB协议的消息广播过程采用原子广播协议,类似于两阶段提交过程。客户端发送的所有写请求都被Leader接收。Leader将请求封装成事务Proposal发送给所有Follwer。然后根据所有Follwer的反馈,如果超过一半的Follower响应成功,则执行commit操作(先commit自己,再发送commit给所有Follower)。ACK:确认消息,确认。它是计算机网络中通信协议的一部分,是设备或进程发送的回复数据已收到的消息。例如,在传输控制协议(TCP,TransmissionControlProtocol)中,ACK用于通知在建立连接时收到了SYN数据包,在使用连接时收到了数据包,或者是FIN数据连接终止时已收到数据包。BIO:BlockingInputOutput,同步阻塞I/O模式,数据的读写必须阻塞在一个线程中等待完成。服务端实现方式为一个线程一个连接,即当客户端有连接请求时,服务端需要启动一个线程进行处理。如果连接什么都不做,就会造成不必要的线程开销。当然可以通过线程池机制来改进。NIO:NIO是指将IO模式设置为“Non-Blocking”模式。NIO是一种同步非阻塞I/O模型。NIO框架是Java1.4引入的,对应java.nio包,提供了Channel、Selector、Buffer等抽象。NIO中的N可以理解为Non-blocking,而不是简单的New。它支持面向缓冲区、基于通道的I/O操作。
