精华内容
下载资源
问答
  • 1,SVM算法缺点 优点 可以解决高维问题,即大型特征空间; 解决小样本下机器学习问题; 能够处理非线性特征相互作用; 无局部极小问题;(相对于神经网络等算法) 无需依赖整个数据; 泛化能力比较强; 缺点...

    1,SVM算法的优缺点

    优点

    可以解决高维问题,即大型特征空间;
    解决小样本下机器学习问题;
    能够处理非线性特征的相互作用;
    无局部极小值问题;(相对于神经网络等算法)
    无需依赖整个数据;
    泛化能力比较强;

    缺点

    当观测样本很多时,效率并不是很高;
    对非线性问题没有通用解决方案,有时候很难找到一个合适的核函数;
    对于核函数的高维映射解释力不强,尤其是径向基函数;
    常规SVM只支持二分类;
    对缺失数据敏感;

    2,SVM的超参数C如何调节

    C 类似于lamda, 不过相反,C越小,越能得到稀疏的模型。

    3,SVM的核函数如何选择

    核函数可以是线性,高斯函数等。取决于问题的复杂性。

    在这里插入图片描述

    4,简述SVM硬间隔推导过程
    在这里插入图片描述

    a. 定义间隔函数,构建约束条件,得到凸二次规划问题,作为原始最优化问题。
    b. 应用拉格朗日函数,将带约束的优化问题,转换成了无约束的优化问题,并且二者等价解。
    c. 根据拉格朗日对偶性,将原始问题转换为其对偶问题,此时二者等价解。
    d. 求解支持向量。
    5,简述SVM软间隔推导过程
    ○ 软间隔的“软”在于它允许一点点错误存在,也就是去容忍那些特异点的存在。
    ○ 定义loss函数 对偶+KKT

    具体推导请看:
    https://blog.csdn.net/github_31101389/article/details/106480409

    6,附加题

    在这里插入图片描述
    CNN 中的 1*1 卷积有什么作用
    https://blog.csdn.net/sscc_learning/article/details/79863922

    目标检测里如何有效解决常见的前景少背景多的问题

    常用解决样本数据不平衡思路都可。
    b. 硬数据挖掘
    c. 类平衡思路改进 损失函数

    展开全文
  • InnoDB存储引擎 优点:提供了事务管理、回滚、崩溃修复...InnoDB支持Auto_INCREMENTAL 自动增长不能为空 且唯一 且为主键支持外键Foreign KEY 外键所在表为子表 依赖父表 表结构在.frm文件中 数据和索引...

     

    InnoDB存储引擎

    • 优点:提供了事务管理、回滚、崩溃修复能力、和多版本并发控制的事务安全
    • 缺点:读写稍微差点,占用的数据空间相对较大,从3.23.34a开始包含InnoDB存储引擎

    InnoDB支持Auto_INCREMENTAL 自动增长的列值不能为空 且唯一 且为主键
    支持外键Foreign KEY 外键所在的表为子表 依赖父表

    表结构在.frm文件中 数据和索引存储在innodb_data_home_dir 和innodb_data_file_path定义的表空间中

    MyISAM存储引擎:

    • 优点:占用空间小。处理速度快
    • 缺点:不支持事务的完整性和并发性
    生成三个文件
    • .frm 文件存储表的结构
    • .myd 文件存储数据文件
    • .myi 文件存储索引
    表支持3种存储格式:
    • 静态型: 字段是固定不变的
    • 动态型: 字段不算固定的
    • 压缩型: 需要使用myisampack工具创建,占用空间小
    Memory存储引擎:
    • 优点:处理速度非常快
    • 缺点:数据易丢失,生命周期短

    memory存储引擎使用存储在内存中的内容创建表,而且所有数据放在内存中

    每个memory存储引擎的表实际对应一个磁盘文件,类型为frm类型,该文件只有表的结构没有数据文件都是存储在内存中,有利于数据的快速处理,前提是要有足够的内存维持memory存储引擎的表的使用,如果不需要了可以释放这些内存,甚至可以删除不需要的表
    一般没有用这个引擎的,如果内存异常或者机器重启数据就没有了,生命周期很短

    技巧:

    同一个数据库中可以使用多种存储引擎的表,如果一个表要求较高的事务处理,可以选择InnoDB这个数据库可以将查询要求比较高的表选择MyISAM存储引擎,如果需要数据库中一个用于查询的临时表,可以选择Memory存储引擎

    从事务安全、存储限制、空间使用、内存使用、插入数据的速度、对外键的支持

    查看数据库:

     

     

    创建、删除数据库

     

     

    修改存储引擎:

     

     

    利用三种方法找出所使用的mysql数据库的默认存储引擎?
    1. show engines\G;
    2. show variables like "storage_engine"
    3. cat /etc/my.cnf看下default-storage-engine="INNODB"
    存储引擎InnoDB MyISAM MEMORY 优缺点?

    1.InnoDB优点支持事务处理、回滚、崩溃修复处理以及多并发控制 缺点:速度略慢 占用空间大
    2、MyISAM 优点存储速度快、占用空间小 缺点:不支持事务处理 并发
    3.Memory 存储速度非常快,缺点: 数据易丢失

     

     

     

     

     

     

    增删改查基本操作

     

     

    9、熟悉mysql的调优和增删改查基本操作, 数据备份和恢复,主从同步
    优化MySQL数据库的几个步骤 、
    1 开启慢查询日志
    2 修改mysql 数据库配置文件, 这个步骤一般都由DBA 运维来做
    比如设置查询缓冲区大小

    增删改查
    改toor 用户密码
    方法1 mysqladmin -uroot -p原密码 passwd 新密码
    方法2 SET PASSWD FOR 'root'@'localhost' = '新密码'
    创建用户
    1 CREAT user 'chen'@'localhost' identified by 'chenhao'
    2 GRANT all privileges ON databsername TO 'username'@'host' identified by 'chenhao'

    新建一个用户test2 密码abc 只可localhost登录,可对chen 数据库增删改查操作
    GRANT select,insert,update,delete on chen.* to 'test'@'localhost' by 'abc' (取消密码 '' 填空即可)

    刷新表
    flush privileges;

    创建表
    creat database test;

    显示所有的数据库
    show databases;

    删除库test
    drop databases test;

    连接数据库
    use test;

    查看当前使用的数据库
    select databaes();

    查看表
    show tables; 操作前先连接某个数据库

    建立表
    creat table table123 (coll type1 [not null] [prinmary]);

    根据已有库创建新表
    creat table newtable like oldtable; 只有表结构
    creat table newtable as select * from oldtable; 即包含结构,还包含数据

    获取表结构
    DESC table;

    删除表名为table3的表
    DROP table table3;

    更改表名
    rename table table22 to table44;

    在表中增加字段
    在myclass 中添加一个字段passtest 类型位 int4 默认值为0
    alter table myclass add passtrst int(4) default '0';

    查询表中所有的数据
    select * from myclass;

    SELECT * FROM myclass where name='chen'


    查看表中第二行的数据
    select * from myclass limit 2;

    删除表中编号为4的记录
    delete from myclass where id=4;

    修改 myclass 表中编号为1 的记录, 将abcd改为99.99
    update myclass set abcd=99.99 where id=1;

    *** *
    *****
    数据库备份和还原
    备份 mysqldump -uroot -p 库名 表名 > /var/lib/mysql/mydb.sql


    还原MariaDB [mydb]> source /var/lib/mysql/mydb.sql;

    转载于:https://www.cnblogs.com/chblogs/p/7113682.html

    展开全文
  • Kmeans中k值的相关理论

    2015-08-10 22:34:38
    Kmeans算法作为机器学习十大算法之一,它的流程相信不用说,这里说下它的缺点: 1.需要提前给定k 2.对初始聚类中心的选取有很大的依赖性 3.如果长时间不能收敛,计算时间会很长。 而对于初始聚类中心的选择,...

    Kmeans算法作为机器学习十大算法之一,它的流程相信不用多说,这里说下它的缺点:

    1.需要提前给定k值

    2.对初始聚类中心的选取有很大的依赖性

    3.如果长时间不能收敛,计算时间会很长。

    而对于初始聚类中心的选择,《大数据-互联网大规模数据挖掘》这本书里有相关的策略,主要提到了2点;

    1 尽量选择较远的点作为聚类中心:首先随机选一个点,然后选距离这个点最远的点作为第二个聚类中心,然后再选一个点,距离已经选的2个点最近距离最远,选第n个点时,要选择与前面n-1个点最近距离最远的那个点,一直到选了k个点为止。

    2 需要利用层次聚类或者Canopy算法先找到较好的聚类中心,在此基础上在进行聚类。

    其实说了很多发现,就算第一种策略去找较好的初始聚类中心,也需要提前知道k的值,而对于k的值,这本书中提到了一个比较好解决办法,首先它给的一个结论是:给定一个合适的类簇指标,比如平均半径或直径,只要我们假设的类簇的数目等于或者高于真实的类簇的数目时,该指标上升会很缓慢,而一旦试图得到少于真实数目的类簇时,该指标会急剧上升。下面给图:


    图中显然可以看到聚成五类比较理想,但是如果硬要聚成2到7类的话,结果如图所示,而相对应的平均半径变化如下:


    虽然不知道这个结论的由来,但是这也为寻找一个较好的k值提供了一个方法:按照k=1,2,4,8....进行聚类,而对于找最优的k,可以采用二分的手段来进行,比如我知道k的范围在[l,r],那么我取mid=(l+r)/2,如果[mid,r]这段区间指标变化不大,那么在[l,mid]继续二分,否则如果[mid,r]之前存在了变化很大的区间,那么在[mid,r]区间进行二分。但是这里存在一个问题,就是如何衡量变化大不大,这可能需要定义出与数据集相关的公式才可以实现。




    展开全文
  • 说起Spring中循环依赖的解决办法,相信很园友们都或多或少的知道一些,但当真的要详细说明的时候,可能又没法一下将它讲清楚。本文就试着尽自己所能,对此做出一个较详细的解读。另,需注意一点,下文中会出现类的...

    前言

    说起Spring中循环依赖的解决办法,相信很多园友们都或多或少的知道一些,但当真的要详细说明的时候,可能又没法一下将它讲清楚。本文就试着尽自己所能,对此做出一个较详细的解读。另,需注意一点,下文中会出现类的实例化跟类的初始化两个短语,为怕园友迷惑,事先声明一下,本文的实例化是指刚执行完构造器将一个对象new出来,但还未填充属性值的状态,而初始化是指完成了属性的依赖注入。

    1. CAP 的由来

    要理解 CAP,首先我们要清楚,为何会有人提出 CAP?他提出 CAP 是为了解决什么问题?

    时间回到 1985 年,彼时,后来证明了 CAP 理论的 Lynch 教授此时给当时的 IT 界来了一记惊雷:

    她通过不可辩驳的证明告诉业界的工程师们,如果在一个不稳定(消息要么乱序要么丢了)的网络环境里(分布式异步模型),想始终保持数据一致是不可能的。

    这是个什么概念呢?就是她打破了那些既想提供超高质量服务,又想提供超高性能服务的技术人员的幻想。

    这本质是在告诉大家,在分布式系统里,需要妥协。

    但是,如何妥协?分布式系统里到底应该怎么权衡这种 trade-off?

    我们可以想象一下,在 CAP 定理提出之前,没有这些方向性的指引,在设计和实施分布式系统时该有多么混乱。一套分布式系统是由多个模块组成的,这些模块本身可能由不同的开发人员去完成。然而,对于这些人,在公共层面,竟然没有一个原则去指导他们该怎么完成这套功能。

    比如,我们在同步两个节点的数据时,如果发生了错误,到底我们应该怎么做呢?如果没有统一的标准和方向,那很可能在一套分布式系统中的不同模块,会出现不同的处理情况。

    假设一套系统,由 A、B 两个模块构成。

    A 模块的设计理念是:节点间出现了问题,它可能会选择不断的重试,一直等到节点通信恢复。

    而 B 的设计理念是:节点间出现了问题,它断开就是了,可能最多就记录下状态,等以后处理。

    可是,当 A、B 之间出现了通信怎么办?那会出现 A 往 B 发请求,出问题会不断重试。而 B 往 A 发请求,出问题则直接断开的情况。

    当然,在后面我们会说明,CAP 的理念在实际工程中,会允许这种不一致。可是,那种不一致是提前设计好和规划好的,是根据实际数据的重要性和业务需求做的妥协,而不是这种混乱的妥协。

    所以,IT 界的人们就一直在摸索,试图找到一些纲领去指导分布式系统的设计,这一找就找了 15 年。

    2000 年时,Eric Brewer 教授在 PODC 会议上提出了 CAP 理论,但是由于没有被证明过,所以,当时只能被称为 CAP 猜想。这个猜想引起了巨大的反响,因为 CAP 很符合人们对设计纲领的预期。

    在 2002 年后,经过 Seth Gilbert 和 Nancy Lynch 从理论上证明了 CAP 猜想后,CAP 理论正式成为了分布式系统理论的基石之一。

    2. CAP 到底是什么

    CAP 定理表达了一个分布式系统里不可能同时满足以下的三个特性:

    2.1. C:数据一致性

    什么是数据一致性?咋一看真的很让人糊涂,一致性是什么?是指数据能一起变化,是能让数据整齐划一。

    那么问题又来了,数据何时会变化?数据怎么才能被称为一起变化?我们现在来回答这些问题,当我们搞清楚了这些问题,那么对数据一致性就会有了清晰的理解。

    首先第一个问题,数据何时会一起变化?

    答案是:仅且仅当包含数据的服务,收到数据更新请求的时候,数据才会发生变化。而数据更新请求则仅包括数据的增、删、改这三种请求,而这三种请求又被统称为写请求。所以,数据只有在写请求的时候才会发生变化。

    那我们来回答第二个问题,数据要怎么样才能被称为一起变化了?即谁来判断数据是最终变化了?是服务器对写请求的返回结果吗?告诉写请求成功,数据就一定发生一致性变化了?

    NO,数据发生变化是否一致是需要经过读请求来做检验的。那么读请求判断的依据是什么呢?

    假设,我们的分布式存储系统有两个节点,每个节点都包含了一部分需要被变化的数据。如果经过一次写请求后,两个节点都发生了数据变化。然后,读请求把这些变化后的数据都读取到了,我们就把这次数据修改称为数据发生了一致性变化。

    但是,这还不是完整的一致性。因为系统不可能永久的正常运行下去。

    如果系统内部发生了问题从而导致系统的节点无法发生一致性变化会怎么样呢?当我们这样做的时候,就意味着想看到最新数据的读请求们,很可能会看到旧数据,或者说获取到不同版本的数据。此时,为了保证分布式系统对外的数据一致性,于是选择不返回任何数据。

    这里需要注意一下,CAP 定理是在说在某种状态下的选择,和实际工程的理论是有差别的。上面描述的一致性和 ACID 事务中的一致性是两回事。事务中的一致性包含了实际工程对状态的后续处理。但是 CAP 定理并不涉及到状态的后续处理,对于这些问题,后续出现了 BASE 理论等工程结论去处理,目前,只需要明白 CAP 定理主要描述的是状态。

    2.2. A:可用性

    奥维德曾经说过:“行动被人们遗忘,结果却将永存”。

    这句话说明了结果的重要性,而可用性在 CAP 里就是对结果的要求。它要求系统内的节点们接收到了无论是写请求还是读请求,都要能处理并给回响应结果。只是它有两点必须满足的条件:

    条件 1:返回结果必须在合理的时间以内,这个合理的时间是根据业务来定的。业务说必须 100 毫秒内返回,合理的时间就是 100 毫秒,需要 1 秒内返回,那就是 1 秒,如果业务定的 100 毫秒,结果却在 1 秒才返回,那么这个系统就不满足可用性。

    条件 2:需要系统内能正常接收请求的所有节点都返回结果。这包含了两重含义:

    1. 如果节点不能正常接收请求了,比如宕机了,系统崩溃了,而其他节点依然能正常接收请求,那么,我们说系统依然是可用的,也就是说,部分宕机没事儿,不影响可用性指标。

    2. 如果节点能正常接收请求,但是发现节点内部数据有问题,那么也必须返回结果,哪怕返回的结果是有问题的。比如,系统有两个节点,其中有一个节点数据是三天前的,另一个节点是两分钟前的,如果,一个读请求跑到了包含了三天前数据的那个节点上,抱歉,这个节点不能拒绝,必须返回这个三天前的数据,即使它可能不太合理。

    2.3. P:分区容忍性

    分布式的存储系统会有很多的节点,这些节点都是通过网络进行通信。而网络是不可靠的,当节点和节点之间的通信出现了问题,此时,就称当前的分布式存储系统出现了分区。但是,值得一提的是,分区并不一定是由网络故障引起的,也可能是因为机器故障。

    比如,我们的分布式存储系统有 A、B 两个节点。那么,当 A、B 之间由于可能路由器、交换机等底层网络设备出现了故障,A 和 B 通信出现了问题,但是 A、B 依然都在运行,都在对外提供服务。这时候,就说 A 和 B 发生了分区。

    还有一种情况也会发生分区,当 A 出现了宕机,A 和 B 节点之间通信也是出现了问题,那么我们也称 A 和 B 发生了分区。

    综上,我们可以知道,只要在分布式系统中,节点通信出现了问题,那么就出现了分区。

    那么,分区容忍性是指什么? 它是说,如果出现了分区问题,我们的分布式存储系统还需要继续运行。不能因为出现了分区问题,整个分布式节点全部就熄火了,罢工了,不做事情了。

    3. CAP 怎么选择

    我们上面已经知道了,在设计分布式系统时,架构师们在 C、A、P 这三种特性里,只能选择两种。

    但是,这道 CAP 的选择题,就像别人在问你“小明的父亲有三个孩子,老大叫大朗,老二叫二郎,请问老三叫什么”一样。在以分布式存系统为限定条件的 CAP 世界里,P 是早已经确定的答案,P 是必须的。

    因为,在分布式系统内,P 是必然的发生的,不选 P,一旦发生分区错误,整个分布式系统就完全无法使用了,这是不符合实际需要的。所以,对于分布式系统,我们只能能考虑当发生分区错误时,如何选择一致性和可用性。

    而根据一致性和可用性的选择不同,开源的分布式系统往往又被分为 CP 系统和 AP 系统。

    当一套系统在发生分区故障后,客户端的任何请求都被卡死或者超时,但是,系统的每个节点总是会返回一致的数据,则这套系统就是 CP 系统,经典的比如 Zookeeper。

    如果一套系统发生分区故障后,客户端依然可以访问系统,但是获取的数据有的是新的数据,有的还是老数据,那么这套系统就是 AP 系统,经典的比如 Eureka。

    说了这么多,其实 CAP 定理本质很简单,它就是一种分布式系统设计的不同理念概括,包括它说的一致性,可用性和分区容错性。这就类似一个大学的校训,是极度概念化的东西。

    所以,大白话来形容下 CAP 吧,CAP 就是告诉程序员们当分布式系统出现内部问题了,你要做两种选择:

    • 要么迁就外部服务,像外包公司。
    • 要么让外部服务迁就你,像银行。

    迁就外部服务就是我们不能因为我们自己的问题让外部服务的业务运行受到影响,所以要优先可用性。而让外部服务迁就我们,就要优先一致性。

    4. 对 CAP 的常见误解

    误解一:分布式系统因为 CAP 定理放弃了 C 或者 A 中的其中一个

    很多人在没有对 CAP 做深入了解的情况下,听到很多人说分布式系统必须在 CAP 三个特性里选择两个,就觉得一套分布式系统肯定要么只有可用性要么只有一致性,不存在完整的可用性和一致性功能。

    这种理解是大有问题的。因为,P 这种问题发生的概率非常低,所以:

    当没有出现分区问题的时候,系统就应该有完美的数据一致性和可用性。

    你什么时候见过一个系统,当内部没有问题的时候,会经常让外部请求卡一下的?要么就冷不丁的提供陈旧的老数据?那还能叫系统吗?

    误解二:C 和 A 之间的选择是针对整个分布式系统的,只能整体考虑 C 和 A 之间的选择

    这个理解也是不对的。当分区发生的时候,其实对一致性和可用性的抉择是局部性的,而不是针对整个系统的。

    可能是在一些子系统做一些抉择,甚至很可能只需要对某个事件或者数据,做一致性和可用性的抉择而已。

    比如,当我们做一套支付系统的时候,会员的财务相关像账户余额,账务流水是必须强一致性的。这时候,你就要考虑选 C。但是,会员的名字,会员的支付设置就不必考虑强一致性,可以选择可用性 A。

    一套分布式系统的运行,就像人生一样,就是一次又一次的选择。在不同阶段,不同的时刻有不同的事件发生的时候,又怎么可能会有完全一样的选择呢?

    误解三:CAP 的三个特性只有是和否两种极端选择,而不是一个范围

    这种二元性的理解更是极其误导人。

    CAP 理论的三种特性不是 Boolean 类型的,不是一致和不一致,可用和不可用,分区和没分区的这类二选一的选项。而是这三种特性都是范围类型。

    拿可用性来说,就像我从银行取钱。当我目的是派发压岁钱的时候,我很可能就想全要新票子,但是,新票子很可能就还得多一个步骤,就是需要拿旧票子去换一些新票,此时,我可以多等会儿,能拿到新票子就好。而当我的目的就是做生活花销的时候,票子是新是旧,我根本不那么关心,快点拿到钱就行。这就是可用性的范围需求之一,对时延性的要求。

    再比如,分区容错则由于探测机制的问题,可能还得各节点搞投票去协商分区是否存在,当某一台机器出现了问题,可能不影响业务的话,就会被机器投票认为分区不存在。然后一直等到多数机器出现了问题,才会投票确认出现了分区问题。这就好像新冠疫情,还会分低、中、高风险区呢,不是一出现通信故障就都被逻辑认定为分区问题。

    5. CAP 理论的一些疑问

    疑问一:在遵从 CAP 定理的系统中是否适合任意的写请求

    首先,在 CAP 定理中,关于一致性会有多种说法,但是总的来说,都是在描述数据最新版本的可见性。而这些可见性往往代表的是读请求返回的数据的可见性。

    那么问题来了,当我们要求读数据的可见性的时候,对写数据有什么要求吗?

    比如,我们系统有三个节点,一个客户端给这个系统发了一个写请求,要求系统写入一个值为 20 的数据。那么,如果要满足 CAP 定理中的一致性,就需要在写完 20 这个数据之后,当其他客户端请求读取这个值为 20 的数据之后,无论请求被转发到系统中任何节点都能返回这个值。

    这就要求写入这个值为 20 的写请求必须成功写到三个节点上,此时,系统就满足了写一致性的。所以,我们可以说对于读一致性的要求是同时约束了写一致性的。

    其次,在 CAP 定理中,可用性本身要求对读、写请求都要处理。如果我们以可用性作为标准的时候,在发生分区错误时,由于我们对读请求并没有强行要求返回完全准确的数据,所以,可能在本次读请求之前的最近一次写请求可能是部分失败的。

    同样的例子,我们的分布式系统由三个节点组成,最近一次写请求想把值为 20 的数据写到三个节点上。但是,由于发生了分区问题,有一个节点通信故障,写请求写不过去,因此只有两个节点包含了值为 20 的数据。

    此时,写请求会返回给客户端一个结果,可能会告诉客户端写入成功了,也可能告诉客户端写入部分成功。

    这时候,当后续的读请求恰巧被发送到有通信故障的那个节点,系统可能只能返回一个空的结果。但是,由于系统处理和返回了读写请求,所以,系统是满足了 CAP 中的可用性的。

    疑问二:数据分片和数据副本的分布式系统是否都遵守 CAP 定理

    我们知道,在一套大规模的分布式系统里,一定是既需要把海量数据做切分,存储到不同的机器上,也需要对这些存储了数据的机器做副本备份的。

    那么,如果,一个分布式系统里只有数据分片存储或者只有数据副本存储,他们都会遵守 CAP 定理吗?

    答案是当数据分片时,也是要遵守 CAP 定理,但是,是种非常特殊的遵守。

    当在一套分布式系统只有分片存储的时候,CAP 理论会表现成什么样?

    比如,我们有个分布式系统,由三个节点 a、b、c 组成。其中节点 a 存放了 A 表的数据,b 存放了 B 表的数据,c 存放了 C 表的数据。

    如果有一个业务,它的意图是想往 A 表插入一条新数据,在 B 表删除一条已有数据,在 C 表更新一条老数据,这个分布式系统该怎么处理这种业务?

    技术上我们对这种一个意图想做多件事的情况往往会包装成一个事务。当我们包装成一个事务以后,我们可能会通过先在 a 节点执行,然后去 b 节点执行,最后去 c 节点执行,等到都成功了,才会返回成功。

    但是,发生了分区以后怎么办?当在 a、b 节点都成功了,到 c 发现发生了通信故障?

    此时,根据 CAP 定理,你有两个选择,要么就直接返回一个部分成功的结果给客户端,要么直接卡死等客户端超时或者返回失败给客户端。当返回部分成功的时候,这就是选择了可用性(A),当卡死或者返回失败给客户端的时候,就是选择了一致性(C)。

    可是,我们将请求包装成了事务,而事务是要求要么都成功,要么都失败……为了遵守这种要求,对于分布式只有分片的情况,迫于客观条件,只能选择C。所以分片的分布式系统,往往都是 CP 的系统。

    可选择,但是无法选择是分布式系统只有分片数据存储的情况时,遵守 CAP 定理的特殊表现。

    而当分布式系统是多个节点,每个节点存储了完整的一套数据,别的节点只是完整数据的备份的时候,即使事务只在一台机器上成功,当发生分区故障的时候,我们也是可以有充分的余地选择是单机事务的回退 or 就此认为写成功的

    单机事务的回退,就可以对外表现为选择了一致性。

    就此认为写成功,则可以认为选择了可用性。

    疑问三:为何有时候区分一个系统是 AP 还是 CP 是如此之难

    因为,就像我们前面讲过的,由于 AP 或者 CP 的选择,可能仅局限为整套系统的局部,甚至某些特殊的数据上,而我们又是用这种局部的特性去描述了整套系统,所以就导致了区分的困难。而这本身其实也日渐成为了 CAP 的一个大问题,从而被人诟病。

    6. CAP 的不足

    1. CAP 定理本身是没有考虑网络延迟的问题的,它认为一致性是立即生效的,但是,要保持一致性,是需要时间成本的,这就导致往往分布式系统多选择 AP 方式

    2. 由于时代的演变,CAP 定理在针对所有分布式系统的时候,出现了一些力不从心的情况,导致很多时候它自己会把以前很严谨的数学定义改成了比较松弛的业务定义,类似于我们看到,CAP 定理把一致性、可用性、分区容错都变成了一个范围属性,而这和 CAP 定理本身这种数学定理般的称呼是有冲突的,出现了不符合数学严谨定义的问题。

    3. 在实践中以及后来 CAP 定理的提出者也承认,一致性和可用性并不仅仅是二选一的问题,只是一些重要性的区别,当强调一致性的时候,并不表示可用性是完全不可用的状态。比如,Zookeeper 只是在 master 出现问题的时候,才可能出现几十秒的不可用状态,而别的时候,都会以各种方式保证系统的可用性。而强调可用性的时候,也往往会采用一些技术手段,去保证数据最终是一致的。CAP 定理并没有给出这些情况的具体描述。

    4. CAP 理论从工程角度来看只是一种状态的描述,它告诉大家当有错的时候,分布式系统可能处在什么状态。但是,状态是可能变化的。状态间如何转换,如何修补,如何恢复是没有提供方向的。

    7. 引申出来的 BASE

    正因为 CAP 以上的种种不足,epay 的架构师 Dan Pritchett 根据他自身在大规模分布式系统的实践经验,总结出了 BASE 理论。BASE 理论是对 CAP 理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。

    BASE 理论是实践工程的理论,它弥补了CAP 理论过于抽象的问题,也同时解决了 AP 系统的总体工程实践思想,是分布式系统的核心理论之一,我们将在下一篇文章里,详细的讲解此套理论。

    8. 大厂面试题

    在文章最后,来几道大厂关于 CAP 的面试真题,检验一下你的学习效果,hiahiahia

    • 什么是 CAP 理论?

    • CAP 中的 P 是什么意思?

    • 为什么说分布式系统,只能在 C、A 中二选一?

    • 结合实际应用,CP、AP 该怎么选择?

    面试结束复盘查漏补缺

    每次面试都是检验自己知识与技术实力的一次机会,面试结束后建议大家及时总结复盘,查漏补缺,然后有针对性地进行学习,既能提高下一场面试的成功概率,还能增加自己的技术知识栈储备,可谓是一举两得。

    以下最新总结的阿里P6资深Java必考题范围和答案,包含最全MySQL、Redis、Java并发编程等等面试题和答案,用于参考~

    资料免费领取方式:点赞关注后,戳这里免费领取

    重要的事说三遍,关注+关注+关注!

    历经30天,说说我的支付宝4面+美团4面+拼多多四面,侥幸全获Offer

    image.png

    更多笔记分享

    以下最新总结的阿里P6资深Java必考题范围和答案*,包含最全MySQL、Redis、Java并发编程等等面试题和答案,用于参考~

    资料免费领取方式:点赞关注后,戳这里免费领取

    重要的事说三遍,关注+关注+关注!

    [外链图片转存中…(img-dji4AeQS-1623898478908)]

    [外链图片转存中…(img-c97QrxIs-1623898478909)]

    更多笔记分享

    历经30天,说说我的支付宝4面+美团4面+拼多多四面,侥幸全获Offer

    展开全文
  • 项目地址:https://github.com/OrangeGangsters/CircularBarPager 效果图:工程依赖的资源: ViewPagerIndicator NineOldAndroids AnimationEasingFunctions依赖的包比较,这是该控件最大的缺点。如何使用xml中...
  • 4NF详析引言范式种类第一范式(1NF)符合1NF关系中每个属性都不可再...缺点BCNF范式(3NF改进形式)BCNF条件为什么引入BCNF解决方法第四范式(4NF)相关概念介绍多值依赖Teaching模式中存在问题平凡函数依赖和...
  • 为了解决此缺点和局限性,我们寻求一种输出回归方法,该方法不仅可以考虑输入因素与相应目标之间关系,还可以考虑目标之间关系,从而对输出数据集进行建模。 已经针对输出问题开发了几种回归方法。 单击...
  • go path 代码开发必须在go pathsrc目录下 手动管理依赖 依赖包没有版本 全是缺点 ...GO111MODULE=off,go命令行将不会支持module功能,寻找依赖方式将会沿用旧版本那种通过vendor目录或者
  • 在不牺牲泛化性能的前提下, 对其参数进行优化, 增加了SVM初始化参数的多样性, 减慢了局部搜索, 促进其在全局范围内的寻优搜索, 以有效克服SVM算法过分依赖初始和容易陷入局部极小值的缺点, 并利用由粗到精的策略...
  • 目前,语音降噪算法有很种。频谱减法有原理简单、容易实现优点,是 语音降噪常用算法。但是频谱减法也有如下两个缺点:一是频谱减法性能好 坏主要依赖于噪声估计,而噪声估计又依赖于端点检测算法。在噪声...
  • 缺点是,比较依赖于k值的选择,对异常比较敏感。 它原理是: 一堆数据中选取k个簇,并任意选择k个中心点,分别计算其余的值与这k个中心点欧式距离,距离最小归为一类,并将两者平均作为新聚类中心,...
  • 4.3程序装入

    2020-11-30 12:56:56
    程序装入与链接 程序执行步骤 编译 由编译程序将用户源代码编译成若干个目标模块 链接 由链接程序将编译后形成目标模块以及它们所需要...优点:不依赖于硬件,可以装入有限道程序;无需硬件支持。 缺点
  • 全局变量的缺点: 长期占用内存:全局变量生命周期长,程序运行期一直存在,始终占有那块存储区; 难以定位修改:全局变量是公共的,全部函数都可以访问,难以定位全局变量在哪里被修改,加大了调试的难度; 使函数...
  • 操作系统结构

    2017-08-30 14:15:21
    操作系统由许多标准、可兼容基本单位构成(称为模块),模块之前通过规定接口调用,优点是缩短了系统开发周期,缺点是模块之间调用关系复杂、相互依赖,从而使用分析、移和维护系统较易出错。 (2)层次...
  • 说起Spring中循环依赖的解决办法,相信很园友们都或多或少的知道一些,但当真的要详细说明的时候,可能又没法一下将它讲清楚。本文就试着尽自己所能,对此做出一个较详细的解读。另,需注意一点,下文中会出现类的...
  • KS 测试是无分布,因为临界依赖于被测试特定分布。 Anderson-Darling 检验在计算临界时使用特定分布。 这样做优点是允许进行更灵敏测试,缺点是必须为每个分布计算临界。 Anderson-Darling 检验...
  • 使用ref方式,引用bean可以被个bean引用,而采用内部bean方式,内部bean只能为那个bean里面那那个属性使用。 前面都是注入依赖对象,那么如何注入基本类型呢? 例如,在PersonServiceBean里面添加一个name...
  • 提出问题:什么是一个好的数据库逻辑设计 关系模式的缺点:1、数据冗余度大,浪费存储...类型:函数依赖FD,多值依赖MVD,连接依赖 不合适的数据依赖会对关系模式造成1、数据冗余度大,浪费存储空间2、更新异常3..
  • 正如在几个 AngularJS良好实践列表和提到,使用控制器 $scope 会导致很多缺点(难以重用和测试,不分离模型/控制器问题,大腿耦合等)。 但是,当将模型保留在服务/工厂上时,有时需要在使用中保持状态持久化...
  • 在分布式系统中,很场景都需要一个唯一来标记某个数据或者资源,那这个唯一就是分布式ID,目前分布式ID生成方式有如下几种: 数据库主键 UUID 基于Redis 基于Zookeeper:使用zNode(此文不讲解) 雪花算法 ...
  • 也就是说,计算属性只有在它相关依赖发生改变时才会重新求。这就意味着,上述案例中,只要 message 还没有发生改变,次访问 reversedMessage 计算属性会立即返回之前计算结果,而不必再次执行函数。但是也...
  • WEB程序和BIRT间参数传递问题

    千次阅读 2012-04-10 08:59:43
    2、你在设计报表时候,可能已经设置了很参数,报表正确显示依赖于正确参数传递,如果通过在WEB程序中将这些参数列出供用户输入,例如通过JSP页面提供用户输入入口,然后将参数写在URL中传递进报表,这是...
  • 因而最好在开发中最大限度地减少对此类变量使用,更多的依赖于自动变量(栈上变量)和通过函数参数传入数据,因为栈上变量始终都是与某个特定线程相关联。如果不使用此类变量,那么就可以避免使用TLS。2...
  • 它在运行时使用您定义运算符和数据类型对表达式求。 :green_apple: 优点 :red_apple: 缺点 :front-facing_baby_chick: 轻巧-整个引擎实际上只有几百行代码 :nerd_face: 另一方面,创建自定义运算符和数据...
  • 《Linux线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写线程TCP网络服务程序主流常规技术,重点讲解一种适应性较强的多线程服务器编程模型,即one loop per thread。...
  • 定义: (从装有值的容器中一次取出一个给外界) 器:迭代器是个容器,包含 迭代:循环反馈,从容器中一次取出一个 迭代器不同于索引取值,但是也可以从容器对象中从前往后逐个返回内部的值 优...
  • 若对于R(U)任一可能关系r,r中不可能存在两个元组在X上属性相等,而在Y上属性不等,则称X函数确定Y或Y函数依赖于X,记作X→Y。 33、游标怎么使用:游标是系统为用户开设一个数据缓冲区,存放SQL语句...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 196
精华内容 78
关键字:

多值依赖的缺点