华为企业建设网站的目的,免费的logo设计,网店货源一件代发货,网页制作三剑客软件下载数据分析流程
总体分为四层#xff1a;需求层、数据层、分析层和结论层 一、统计学问题
1、贝叶斯公式复述并解释应用场景
公式#xff1a;P(A|B) P(B|A)*P(A) / P(B)应用场景#xff1a;如搜索query纠错#xff0c;设A为正确的词#xff0c;B为输入的词#xff0c;那…数据分析流程
总体分为四层需求层、数据层、分析层和结论层 一、统计学问题
1、贝叶斯公式复述并解释应用场景
公式P(A|B) P(B|A)*P(A) / P(B)应用场景如搜索query纠错设A为正确的词B为输入的词那么 a. P(A|B)表示输入词B实际为A的概率 b. P(B|A)表示词A错输为B的概率可以根据AB的相似度计算如编辑距离 c. P(A)是词A出现的频率统计获得 d. P(B)对于所有候选的A都一样所以可以省去 朴素贝叶斯是在已知一些先验概率的情况下由果索因的一种方法。朴素的意思是假设了事件相互独立。
2、参数估计
参数估计是指根据从总体中抽取的样本估计总体分布中包含的未知参数的方法。它是统计推断的一种基本形式是数理统计学的一个重要分支分为点估计和区间估计两部分。 点估计依据样本估计总体分布中所含的未知参数或未知参数的函数。 区间估计置信区间估计依据抽取的样本根据一定的正确度与精确度要求构造出适当的区间作为总体分布的未知参数或参数的函数的真值所在范围的估计。例如人们常说的由百分之多少的把握保证某值在某个范围内即用区间估计的最简单的应用。 3、极大似然估计 极大似然估计是利用已知的样本结果反推最有可能最大概率导致这样结果的参数值。
4、假设检验
参数估计和假设检验是统计推断的两个组成部分它们都是利用样本对总体进行某种推断但推断的角度不同。
参数估计讨论的是用样本估计总体参数的方法总体参数μ在估计前是未知的。假设检验是先对μ的值提出一个假设额然后利用样本信息去检验这个假设是否成立。
5、P值是什么
P值是用来判定假设检验结果的一个参数也可以根据不同的分布使用分布的拒绝域进行比较。
P值就是当原假设为真时所得到的样本观察结果或更极端结果出现的概率。如果P值很小说明原假设情况的发生的概率很凶啊而如果出现了根据小概率原理我们就有理由拒绝原假设。P值越小我们拒绝原假设的理由越充分。总之P值越小表明结果越显著。但是检验的结果究竟时“显著的”“中度显著的”还是“高度显著的”需要我们自己根据P值的大小和实际问题来解决。
6、置信度和置信区间
置信区间我们所计算出的变量存在范围置信度就是我们对于这个数值存在于我们计算出的这个范围的可信程度。举例①有95%的把握真正的数值在我们所计算的范围里。95%是置信水平而计算出的范围就是置信区间。②如果置信度为95%则抽取100个样本来估计总体的均值由100个样本所构造的100个区间中约有95个区间包含总体均值。
7、协方差和相关系数的区别和联系
协方差协方差表示的是两个变量的总体误差这与只表示一个变量误差的方差不同。如果两个变量的变化趋势一致也就是说如果其中一个大于自身期望值另外一个也大于自身的期望值那么两个变量之间的协方差就是正值如果两个变量的变化趋势相反即其中一个大于自身的期望值另外一个却小于自身的期望值那么两个变量之间的协方差就是负值。相关系数研究变量之间线性相关程度的量取值范围是[-1,1]相关系数也可以看成协方差--一种剔除了两个变量量纲影响、标准化后的特殊协方差。
8、中心极限定理
定义①任何一个样本的平均值将会约等于其所在总体的平均值②不管总体是什么分布任意一个总体的样本平均值都会围绕在总体的平均值周围并且呈正态分布。作用①在没有办法得到总体全部数据的情况下我们可以用样本来估计总体②根据总体的平均值和标准差判断某个样本是否属于总体。
二、概率问题
1、54张扑克牌分成2份求着2份都有2张A的概率。
M表示这两个牌堆各有2个A的情况M4(25!25!)
N表示两个牌堆完全随机的情况N27!27!
概率为M/N926/53*17
2、男生点击率增加女生点击率增加总体为何减少
因为男女的点击率可能有较大的差异同时低点击率的群体的占比增大。
如原来男性20人点击1人女性100人点击99人总点击率100/120
现在男性100人点击6人女性20人点击20人总点击率26/120
三、数据库
1、什么是数据库数据库管理系统数据库系统数据库管理员
数据库数据库DataBase就是信息的集合或者说数据库是由数据库管理系统管理的数据的集合。数据库管理系统数据库管理系统是一种操纵和管理数据库的大型软件通常用于建立、使用和维护数据库。数据库系统数据库系统通常由软件、数据库和数据库管理员组成。数据库管理员数据库管理员负责全面管理和控制数据库系统。
2、什么是元组、码、候选码、主码、外码、主属性、非主属性
元组元组是关系数据库中的基本概念关系是一张表表中的每行即数据库中的每条记录就是一个元组每列是一个属性在二维表中元组也称为行。码码就是能唯一识别实体的属性对应表中的列。候选码若关系中的某一属性或属性组的值能唯一识别一个元组而其任何子集都不能再表示则称该属性组为候选码。在学生实体中“学号”是能唯一的区分学生实体的同时又假设“姓名”、“班级”的属性组合足以区分学生实体那么{学号}和{姓名班级}都是候选码。主码主码也叫主键主码是从候选码中选出来的一个实体集中只能有一个主码但可以有多个候选码。外码外码也叫外键如果关系中的一个属性是另外一个关系的主码则这个属性是外码。主属性候选码中出现过的属性称为主属性比如工人工号身份证号姓名性别部门。显然工号和身份证号都能够唯一标示这个关系所以都是候选码。工号、身份证号这两个属性就是主属性。如果主码是一个属性组那么属性组中的属性都是主属性。非主属性不包含在任何一个候选码中的属性称为非主属性。比如在关系——学生学号姓名年龄性别班级中主码是“学号”那么其他的“姓名”、“年龄”、“性别”、“班级”就都可以称为非主属性。
3、主键和外键有什么区别
主键主键用于唯一表示一个元组不能有重复不允许有空一个表只能有一个主键。外键外键用来和其他表建立联系用外键是另一表的主键外键是可以有重复的可以是空值一个表可以有多个外键。
4、数据库的范式
第一范式(1NF属性回应表中的字段不能再被分割也就是这个字段只能是一个值不能再被分为多个其他字段了原子性。1NF是所有关系型数据库的最基本要求也就是说关系型数据库中创建的表一定满足第一范式。第二范式2NF2NF在1NF的基础之上消除了非主属性对码的部分函数依赖。第二范式在第一范式的基础上增加了一个列这个列称为主键非主属性都依赖于主键。第三范式3NF3NF在2NF的基础之上消除了非主属性对码的传递依赖。解决了数据冗余过大插入异常修改异常删除异常的问题。比如在关系R(学号 ,姓名, 系名系主任)中学号 → 系名系名 → 系主任所以存在非主属性系主任对于学号的传递函数依赖所以该表的设计不符合3NF的要求。总结1NF属性不可再分。2NF1NF的基础之上消除了非主属性对于码的部分函数依赖。3NF3NF在2NF的基础之上消除了非主属性对于码的传递函数依赖 。
5、什么是函数依赖部分函数依赖完全函数依赖传递函数依赖
函数依赖functional dependency 若在一张表中在属性属性组X的值确定的情况下必定能确定属性Y的值那么就可以说Y函数依赖于X写作X → Y。部分函数依赖如果X → Y并且存在X的一个真子集X0使得X0→ Y则称Y对X部分函数依赖。比如学生基本信息表R中学号身份证号姓名当然学号属性取值是唯一的在R关系中学号身份证号-姓名学号-姓名身份证号-姓名所以姓名部分函数依赖与学号身份证号。完全函数依赖(Full functional dependency) 在一个关系中若某个非主属性数据依赖于全部关键字称之为完全函数依赖。比如学生基本信息表R学号班级姓名假设不同的班级学号有相同的班级内学号不能相同在R关系中学号班级-姓名但是学号-(姓名)不成立班级-(姓名)不成立所以姓名完全函数依赖于学号班级。传递函数依赖(transitive functional dependency) 在关系模式R(U)中设XYZ是U的不同的属性子集如果X确定Y、Y确定Z且有X不包含YY不确定XX∪Y∩Z空集合则称Z传递函数依赖于X。传递函数依赖会导致数据冗余和异常。传递函数依赖的Y和Z子集往往同属于某一个事物因此可将其合并放到一个表中。比如在关系R(学号 ,姓名, 系名系主任)中学号 → 系名系名 → 系主任所以存在非主属性系主任对于学号的传递函数依赖。
6、什么是存储过程
我们可以把存储过程看成是一些SQL语句的集合中间加了点逻辑控制语句。存储过程在业务比较复杂的时候非常实用比如很多时候我们完成一个操作可能需要写一大串SQL语句这时候我们可以写有一个存储过程这样也方便了我们下一次的调用。存储过程一旦调试完成通过后就能稳定运行另外使用存储过程单纯比SQL语句执行要快因为存储过程是预编译过的。
但部分公司存储过程应用不多因为存储过程难以调试和扩展而且没有移植性还会消耗数据库资源。
7、drop 、delete和truncate区别
drop(丢弃数据drop table(表名直接删除表。truncate(清空数据truncate table表名只删除表中的数据再插入数据的时候自增长id又从1开始在清空表中数据的时候使用。delete(删除数据delete from 表名 where 列名值删除某一列的数据如果不加where子句和truncate table表名作用类似。总结truncate和不带where子句的delete、以及drop都会删除表内的数据但是truncate和delete只删除数据不删除表的结构定义执行drop语句此表的结构也会删除也就是执行drop以后对应的表不复存在。truncate和drop属于DDL数据定义语言语句操作立即生效原数据不放在rollback segment中不能回滚操作不触发trigger。而delete语句是DML(数据库操作语言语句这和操作会放到rollback segment中事务提交之后才生效。执行速度droptruncatedelete
8、DML语句和DDL语句的区别。
DML 是数据库操作语言Data Manipulation Language的缩写是指对数据库中表记录的操作主要包括插入insert、更新update、删除delete和查询select是开发人员日常使用最频繁的操作。DDLData Definition Language是数据定义语言的缩写简单来说就是对数据库内部的对象进行创建、删除、修改的操作语句。它和DML语言的最大区别是DML只是对表内部数据的操作而不涉及表的定义、结构的修改更不会涉及到其他对象。DDL语句更多的被数据库管理员DBA所使用一般的开发人员很少使用。
9、数据库设计通常分为哪几步
需求分析分析用户的需求包括数据、功能和性能需求。概念结构设计主要采用E-R模型进行设计包括画E-R图。逻辑结构设计通过将E-R图转换为表实现从E-R模型到关系模型的转换。物理结构设计主要是为所设计的数据库选择合适的存储结构和存取路径。数据库实施包括编程、测试和试运行。数据库运行和维护系统的运行与数据库的日常维护。
10、事务的ACID特性是什么★
原子性事务是最小的执行单位不允许分割。事务的原子性确保动作要么全部完成、要么完全不起作用。一致性执行事务前后数据保持一致多个事务对同一个数据读取的结果是相同的。隔离性并发访问数据库时一个用户的事务不被其他事务所干扰各并发事务之间数据库是独立的。持久性一个事务被提交之后。它对数据库的数据的改变是持久的。即使数据库发生故障也不应该对其有任何影响。
11、并发事务带来哪些问题
在典型的应用程序中多个事务并发运行经常会操作相同的数据来完成各自的任务多个用户对统一数据进行操作并发虽然是必须的但可能会导致以下的问题
脏读Dirty read当一个事务正在访问数据并且对这个数据进行了修改而这种修改还没有提及到数据库中这时另外一个事务也访问了这个数据然后使用了这个数据。因为这个数据是还没有提交的数据那么另外一个事务读到的这个数据是“脏数据”依据脏数据所作的操作可能是不正确的。其他事务读取了修改以前的数据涉及操作为修改-查询丢失修改Lost to modify指在一个事务读取一个数据时另外一个事务也访问了该数据那么在第一个事务修改了这个数据后第二个事务也修改了这个数据。这样第一个事务内的修改结果就被丢失因此称为丢失修改。 例如事务1读取某表中的数据A20事务2也读取A20事务1修改AA-1事务2也修改AA-1最终结果A19事务1的修改被丢失。两个事务同时修改后一个事务修改结果覆盖了之前修改的结果涉及的操作为修改-修改不可重复读Unrepeatableread指在一个事务内多次读同一个数据在这个事务还没结束的时候另一个事务也访问了该数据并修改导致第一个事务两次读取的数据不一样称为不可重复读。第一个事务多次读的间隙第二个事务修改导致第一个事务不可重复读涉及的操作有查询-修改-查询幻读Phantom read幻读和不可重复读类似。它发生在一个事务T1)读取了几行数据接着另一个并发事务T2插入了一些数据时。在随后的查询中第一个事务就会发现多了一些原本不存在的记录就好像存在了幻觉一样所以称为幻读。第一个事务读取过程中第二个事务增加或删除导致第一个事务读取结果不一致涉及的操作有查询-增加/删除-查询
12、不可重复读和幻读有什么区别
不可重复读的重点是修改幻读的重点在于新增或者删除。
13、事务的隔离级别有哪些MySQL的默认隔离级别是
SQL标准定义了四个隔离级别
Read-uncommitted读取未提交最低的隔离级别允许读取尚未提交的数据变更可能导致脏读、不可重复读和幻读Read-committed读取已提交允许读取并发事务已经提交的数据可以阻止脏读。但不可重复读和幻读仍有可能发生。Repeatable-read(可重复读对同一字段的多次读取结果都是一致的除非数据是被本身事务所修改可以阻止脏读和不可重复读幻读仍有可能发生。Serializable可串行化最高的隔离级别完全服从ACID的隔离级别所有的事务依次逐个执行这样事务之间就完全不可能产生干扰可以阻止脏读、不可重复读以及幻读。mySQL的默认隔离级别是可重复读。
14、乐观锁和悲观锁的区别
悲观锁总是假设最坏的情况每次去拿数据都认为别人会修改所以每次在拿数据时候都会上锁这样别人想拿这个数据就会阻塞直到它拿到锁共享资源每次只给一个线程使用其他线程阻塞用完后再把资源转让给其他线程。传统的关系型数据库里边就用到了很多这种锁机制比如行锁表锁读锁写锁等都是在操作之前先上锁。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。乐观锁总是假设最好的情况每次去拿数据时都认为别人不会修改所以不会上锁但是在更新的时候会判断一下在此期间别人有没有去更新这个数据可以使用版本号机制和CAS算法实现。乐观锁使用多读的应用类型这样可以提高吞吐量。想数据中提供的类似write_condition机制其实都是提供的乐观锁。在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS实现的两种锁的使用场景乐观锁适用于多读场景悲观锁适用于多写场景。
15、乐观锁的两种实现方式。
版本号机制一般在数据表中加上一个数据版本号version字段表示数据被修改的次数当数据被修改时version值加一当线程A要更新数据时在读取数据的同时也会读取version值在提交更新时若刚才读取到的version值为当前数据库中version值相等时才更新否则重试更新操作直到更新成功。提交版本必须大于记录版本才能执行更新 举一个简单的例子 假设数据库中帐户信息表中有一个 version 字段当前值为 1 而当前帐户余额字段 balance 为 $100 。操作员 A 此时将其读出 version1 并从其帐户余额中扣除 50100-$50 。在操作员 A 操作的过程中操作员B 也读入此用户信息 version1 并从其帐户余额中扣除 20100-$20 。操作员 A 完成了修改工作将数据版本号加一 version2 连同帐户扣除后余额 balance$50 提交至数据库更新此时由于提交数据版本大于数据库记录当前版本数据被更新数据库记录 version 更新为 2 。操作员 B 完成了操作也将版本号加一 version2 试图向数据库提交数据 balance$80 但此时比对数据库记录版本时发现操作员 B 提交的数据版本号为 2 数据库记录当前版本也为 2 不满足 “ 提交版本必须大于记录当前版本才能执行更新 “ 的乐观锁策略因此操作员 B 的提交被驳回。这样就避免了操作员 B 用基于 version1 的旧数据修改的结果覆盖操作员A 的操作结果的可能。 CAS算法compare和swap比较与交换是一种有名的无锁算法。无锁编程即不使用锁的情况下实现多线程之间的变量同步。也就是在没有线程被阻塞的情况下实现变量的同步所以也叫非阻塞同步Non-blocking SynchronizationCAS算法涉及三个操作数①需要读写的内存值V②进行比较的值A③拟写入的新值B。④当且仅当V的值等于A时CAS通过原子方式用新值B来更新V的值否则不会执行任何操作比较和替换是一个原子操作一般情况下是一个自旋操作即不断重试。
16、乐观锁的缺点。
ABA问题如果一个变量V初次读取时是A值并且在准备赋值时候检查到它仍然为A那我们就能说明它的值没有被其他线程修改过吗很明显不能因为这段时间它的值有可能被改为其他值然后又改回A那CAS操作就误以为它从来没有被修改过。这个问题被称为CAS操作的 ABA问题。JDK 1.5 以后的 AtomicStampedReference 类就提供了此种能力其中的 compareAndSet 方法就是首先检查当前引用是否等于预期引用并且当前标志是否等于预期标志如果全部相等则以原子方式将该引用和该标志的值设置为给定的更新值。循环时间开销大自旋CAS也就是不成功就一直循环执行直到成功如果长时间不成功会给CPU带来非常大的执行开销如果JVM能支持处理器提供的pause指令那么效率会有一定的提升pause指令有两个作用第一它可以延迟流水线执行指令de-pipeline)使CPU不会消耗过多的执行资源延迟的时间取决于具体实现的版本在一些处理器上延迟时间是零。第二它可以避免在退出循环的时候因内存顺序冲突memory order violation而引起CPU流水线被清空CPU pipeline flush从而提高CPU的执行效率。只能保证一个共享变量的原子操作CAS只对单个共享变量有效当擦欧总涉及跨多个共享变量时CAS无效。但是从 JDK 1.5开始提供了AtomicReference类来保证引用对象之间的原子性你可以把多个变量放在一个对象里来进行 CAS 操作.所以我们可以使用锁或者利用AtomicReference类把多个共享变量合并成一个共享变量来操作。
17、什么是数据库索引
数据库索引是数据库管理系统中的一个排序的数据结构以协助快速查询、更新数据库表中数据。实现索引的实现通常使用B树和B树加速了数据访问因为存储引擎不会再去扫描整张表得到需要的数据相反它从根节点开始根节点保存了子节点的指针存储引擎会根据指针快速寻找数据。
上图显示了一种索引方式。左边是数据库中的数据表有col1和col2两个字段一共有15条记录右边是以col2列为索引列的B_TREE索引每个结点包含索引的建值和对应数据表地址的指针这样就可以通过B_TREE在O(logn)的时间复杂度内获取相应的数据这样明显加快了检索速度。为表设置索引要付出代价一是增加了数据库的存储过程二是在插入和修改数据时要花费较多的时间因为索引也要随之变动。
18、索引的优缺点
优点①创建索引可以大大提高系统的性能②通过创建唯一性索引可以保证数据库表中每一行数据的唯一性。③可以大大提升数据库的检索速度这是创建索引最主要的原因③可以加速表和表之间的连接特别是在实现数据的参考完整性方面有特别有意义④在使用分组和排序子句进行数据检索时同样可以显著减少查询中分组和排序的时间⑤通过使用索引可以在查询的过程中使用优化隐藏器提高系统的性能。缺点①创建索引和维护索引要耗费时间这种时间随着数据量的增加而增加。②索引需要占物理空间除了数据表占数据空间之外每一个索引还要占一定的物理空间如果要建立聚簇索引那么所需的空间就会更大。③当对表中的数据进行增加删除和修改的时候索引也要动态的维护这样就降低了数据的维护速度。
19、一般来说需要在哪些列上创建索引
在经常需要搜索的列上可以加快搜索的速度。在作为主键的列上强制该列的唯一性和组织表中数据的排列结构。在经常用在连接的列上这些列主要是一些外键可以加快连接的速度。在经常需要根据范围检索的列上创建索引因为索引已经排序其指定的范围是连续的。在经常需要排序的列上创建索引因为索引已经排序这样查询可以利用索引的排序加快排序的查询时间。在经常使用where子句中的列上面创建索引加快条件判断的速度。
20、一般来说那些列上不应该创建索引
在查询中很少使用或者参考的列不应该创建索引。对于很少数据值的列也不应该增加索引。对于定义textimage和bit数据类型的列不应该增加索引因为这些列数据量要么相当大要么取值很小。当修改性能远远小于检索性能时不应该创建索引。修改性能和检索性能是互相矛盾的。当增加索引时会提高检索性能但是会降低修改性能。当减少索引时会提高修改性能降低检索性能。因此当修改性能远远大于检索性能时不应该创建索引。
21、数据库设计器中创建三种索引唯一索引、主键索引和聚集索引。
唯一索引不允许其中任何两行具有相同索引值的索引。当现有的数据中存在重复的键值大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。例如如果在 employee 表中职员的姓(lname)上创建了唯一索引则任何两个员工都不能同姓。主键索引数据库表中经常有一列或几列组合其值唯一标识表中的每一行。该列称为表的主键。在数据库关系图中为表定义主键将自动创建主键索引主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时它还允许对数据的快速访问。聚集索引在聚集索引中表中行的物理顺序与键值的逻辑索引)顺序相同一个表只能包含一个聚集索引。如果某索引不是聚集索引则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比聚集索引通常提供更快的数据访问速度。跟男朋友吃烤鱼去咯晚点接着写~