【2020年数据分析岗面试题】不断更新...

【更新日志】

日期 内容
2020.03.20 扑克牌54张,平均分成2份,求这2份都有2张A的概率;男生点击率增加,女生点击率增加,总体为何减少?;参数估计;假设检验;置信度、置信区间;协方差与相关系数的区别和联系;中心极限定理; p值的含义;时间序列分析;怎么向小孩子解释正态分布;下面对于“预测变量间可能存在较严重的多重共线性”的论述中错误的是?;PCA为什么要中心化?PCA的主成分是什么?;极大似然估计
2020.03.21 事务是什么?事务的四大特性?事务的使用;并发事务带来的问题;事务的隔离级别;常用的表的存储引擎;MySQL中索引的优点和缺点和使用原则;mysql联合索引;为什么使用数据索引能提高效率;B+树索引和哈希索引的区别;B树和B+树的区别;为什么说B+比B树更适合实际应用中操作系统的文件索引和数据库索引?;Mysql中的myisam与innodb的区别;一张表里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把mysql重启,再insert一条记录,这条记录的ID是18还是15 ?;mysql为什么用自增列作为主键;MySQL分区;行级锁定的优点;行级锁定的缺点;mysql优化;key和index的区别

文章目录

统计理论知识

1. 扑克牌54张,平均分成2份,求这2份都有2张A的概率。

M表示两个牌堆各有2个A的情况:M=4(25!25!)
N表示两个牌堆完全随机的情况:N=27!27!
所以概率为:M/N = 926/53*17

2.男生点击率增加,女生点击率增加,总体为何减少?

因为男女的点击率可能有较大差异,同时低点击率群体的占比增大。
如原来男性20人,点击1人;女性100人,点击99人,总点击率100/120。
现在男性100人,点击6人;女性20人,点击20人,总点击率26/120。
即那个段子“A系中智商最低的人去读B,同时提高了A系和B系的平均智商。”

3. 参数估计

用样本统计量去估计总体的参数。
可参考https://vicky.blog.csdn.net/article/details/105131308

4. 假设检验

参数估计和假设检验是统计推断的两个组成部分,它们都是利用样本对总体进行某种推断,但推断的角度不同。
参数估计讨论的是用样本估计总体参数的方法,总体参数μ在估计前是未知的。
而在假设检验中,则是先对μ的值提出一个假设,然后利用样本信息去检验这个假设是否成立。
可参考:https://vicky.blog.csdn.net/article/details/105131409

5. 置信度、置信区间

置信区间是我们所计算出的变量存在的范围,置信水平就是我们对于这个数值存在于我们计算出的这个范围的可信程度。

举例来讲,有95%的把握,真正的数值在我们所计算的范围里。

在这里,95%是置信水平,而计算出的范围,就是置信区间。

如果置信度为95%, 则抽取100个样本来估计总体的均值,由100个样本所构造的100个区间中,约有95个区间包含总体均值。

扫描二维码关注公众号,回复: 10365456 查看本文章

可参考http://www.360doc.com/content/18/0317/16/15033922_737796626.shtml

6. 协方差与相关系数的区别和联系。

协方差:
协方差表示的是两个变量的总体的误差,这与只表示一个变量误差的方差不同。 如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。 如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。
相关系数:
研究变量之间线性相关程度的量,取值范围是[-1,1]。相关系数也可以看成协方差:一种剔除了两个变量量纲影响、标准化后的特殊协方差。

可参考http://blog.sina.com.cn/s/blog_6aa3b1010102xkp5.html

7. 中心极限定理

中心极限定理定义:
(1)任何一个样本的平均值将会约等于其所在总体的平均值。
(2)不管总体是什么分布,任意一个总体的样本平均值都会围绕在总体的平均值周围,并且呈正态分布。
中心极限定理作用:
(1)在没有办法得到总体全部数据的情况下,我们可以用样本来估计总体。
(2)根据总体的平均值和标准差,判断某个样本是否属于总体。
可参考https://www.zhihu.com/question/22913867/answer/250046834

8. p值的含义。

基本原理只有3个:

  • 一个命题只能证伪,不能证明为真
  • 在一次观测中,小概率事件不可能发生
  • 在一次观测中,如果小概率事件发生了,那就是假设命题为假

证明逻辑就是:我要证明命题为真->证明该命题的否命题为假->在否命题的假设下,观察到小概率事件发生了->否命题被推翻->原命题为真->搞定。

结合这个例子来看:证明A是合格的投手-》证明“A不是合格投手”的命题为假-》观察到一个事件(比如A连续10次投中10环),而这个事件在“A不是合格投手”的假设下,概率为p,小于0.05->小概率事件发生,否命题被推翻。
可以看到p越小-》这个事件越是小概率事件-》否命题越可能被推翻-》原命题越可信

9.时间序列分析

是同一现象在不同时间上的相继观察值排列而成的序列。

在这里插入图片描述

10.怎么向小孩子解释正态分布

(随口追问了一句小孩子的智力水平,面试官说七八岁,能数数)

拿出小朋友班级的成绩表,每隔2分统计一下人数(因为小学一年级大家成绩很接近),画出钟形。然后说这就是正态分布,大多数的人都集中在中间,只有少数特别好和不够好

拿出隔壁班的成绩表,让小朋友自己画画看,发现也是这样的现象

然后拿出班级的身高表,发现也是这个样子的

大部分人之间是没有太大差别的,只有少数人特别好和不够好,这是生活里普遍看到的现象,这就是正态分布

11. 下面对于“预测变量间可能存在较严重的多重共线性”的论述中错误的是?

A. 回归系数的符号与专家经验知识不符(对)

B. 方差膨胀因子(VIF)<5(错,大于10认为有严重多重共线性

C. 其中两个预测变量的相关系数>=0.85(对)

D. 变量重要性与专家经验严重违背(对)

12. PCA为什么要中心化?PCA的主成分是什么?

因为要算协方差。单纯的线性变换只是产生了倍数缩放,无法消除量纲对协方差的影响,而协方差是为了让投影后方差最大。

在统计学中,主成分分析(PCA)是一种简化数据集的技术。它是一个线性变换。这个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。

主成分分析经常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。但是,这也不是一定的,要视具体应用而定。

主成分分析的原理是设法将原来变量重新组合成一组新的相互无关的几个综合变量,同时根据实际需要从中可以取出几个较少的综合变量尽可能多地反映原来变量的信息的统计方法叫做主成分分析或称主分量分析,也是数学上处理降维的一种方法。

主成分分析是设法将原来众多具有一定相关性(比如P个指标),重新组合成一组新的互相无关的综合指标来代替原来的指标。通常数学上的处理就是将原来P个指标作线性组合,作为新的综合指标。最经典的做法就是用F1(选取的第一个线性组合,即第一个综合指标)的方差来表达,即Va(rF1)越大,表示F1包含的信息越多。因此在所有的线性组合中选取的F1应该是方差最大的,故称F1为第一主成分。如果第一主成分不足以代表原来P个指标的信息,再考虑选取F2即选第二个线性组合,为了有效地反映原来信息,F1已有的信息就不需要再出现再F2中,用数学语言表达就是要求Cov(F1,F2)=0,则称F2为第二主成分,依此类推可以构造出第三、第四,……,第P个主成分。

13. 极大似然估计

利用已知的样本结果,反推最有可能(最大概率)导致这样结果的参数值。
参考https://blog.csdn.net/zengxiantao1994/article/details/72787849

业务思维逻辑

  1. 不用任何公开参考资料,估算今年新生儿出生数量。
    采用两层模型(人群画像x人群转化):新生儿出生数=Σ各年龄层育龄女性数量*各年龄层生育比率

数据库

1.select FROM_UNIXTIME(UNIX_TIMESTAMP(),‘Y D M h:i:s x’);
少百分号%

2.mysql分区语句,排错!

3.mysql其他语句排错!

4.mysql rank,dense_rank,row_number 排序有什么区别!

5.mysql truncate 与 delete 的区别!

6.mysql 优化

7.hadoop中hive 和 hbase有什么区别?

8.mysql 死锁的原理,怎么解决

9.给用户更改所有者,所组!

10.谈谈mysql(mysql的高级功能)

11.事务是什么?事务的四大特性?事务的使用

(1)事务就是用户定义的一系列执行SQL语句的操作, 这些操作要么完全地执行,要么完全地都不执行, 它是一个不可分割的工作执行单元。
(2)事务的四大特性ACID原子性、一致性、隔离性、持久性

  • 原子性(Atomicity)
  • 一致性(Consistency)
  • 隔离性(Isolation)
  • 持久性(Durability)
    原子性:
    一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性
    一致性:
    数据库总是从一个一致性的状态转换到另一个一致性的状态。(在前面的例子中,一致性确保了,即使在转账过程中系统崩溃,支票账户中也不会损失200美元,因为事务最终没有提交,所以事务中所做的修改也不会保存到数据库中。)
    隔离性:
    通常来说,一个事务所做的修改操作在提交事务之前,对于其他事务来说是不可见的。(在前面的例子中,当执行完第三条语句、第四条语句还未开始时,此时有另外的一个账户汇总程序开始运行,则其看到支票帐户的余额并没有被减去200美元。)
    持久性:
    一旦事务提交,则其所做的修改会永久保存到数据库。
    **说明:**事务能够保证数据的完整性和一致性,让用户的操作更加安全。
    **注意:**在使用事务之前,先要确保表的存储引擎是 InnoDB 类型, 只有这个类型才可以使用事务,MySQL数据库中表的存储引擎默认是 InnoDB 类型。
    (3)事务的使用
    开启事务:
    begin;

    start transaction;
set autocommit = 0;
insert into students(name) values('刘三峰');
-- 需要执行手动提交,数据才会真正添加到表中, 验证的话需要重新打开一个连接窗口查看表的数据信息,因为是临时关闭自动提交模式
commit

-- 重新打开一个终端窗口,连接MySQL数据库服务端
mysql -uroot -p

-- 然后查询数据,如果上个窗口执行了commit,这个窗口才能看到数据
select * from students;

回滚事务使用 rollback;

pymysql中:
pymysql 里面的 conn.commit() 操作就是提交事务
pymysql 里面的 conn.rollback() 操作就是回滚事务

12.并发事务带来的问题

  • 脏读:dirty read
    一个事务修改来了数据未提交,另一个数据读取了未提交的数据。

  • 丢失修改:lost to modify
    两个事务都修改了数据之后,第一个数据修改就会丢失。如数据A=10,事务1:A=A-1;

事务2:A=A-1,最后结果发现为19;

  • 不可重复读:Unrepeatable Read
    A事务在多次修改数据之间,B事务读取了数据,但是B在A事务执行之间读取的时候,可能会发现读取同一个数据的时候两次读到的不一样;

  • 幻读:Phantom Read
    幻读与不可重复读相同,但是是一个事务多次插入或者删除数据,另一个事务读取的时候会发现多了或者少了数据。

13.事务的隔离级别

  • Read-Uncommitted(读未提交)
    最低的隔离级别,允许读取尚未提交的事务,会导致脏读、幻读、不可重复读。

  • Read-Committed(读已提交)
    允许并发事务读取已经提交的数据,可以防止脏读,单有可能幻读、不可重复读。

  • Repeatable-Read(可重复读)
    mysql的默认隔离级别,对同一字段的多次读取都是相同的,除非数据是被本身事务修改。可以防止脏读与不可重复读,但有可能会有幻读。

  • Serializable(可串行化)
    最高的隔离级别,完全按照ACID,所有事务依次执行。

在这里插入图片描述

12.常用的表的存储引擎

  • 常用的表的存储引擎是 InnoDB 和 MyISAM
  • InnoDB 是支持事务的
  • MyISAM 不支持事务,优势是访问速度快,对事务没有要求或者以select、insert为主的都可以使用该存储引擎来创建表

13.MySQL中索引的优点和缺点和使用原则

(1)优点
索引的优点是加快数据的查询速度

验证索引性能的操作:
-- 开启运行时间监测:
set profiling=1;
-- 查找第1万条数据ha-99999
select * from test_index where title='ha-99999';
-- 查看执行的时间:
show profiles;
-- 给title字段创建索引:
alter table test_index add index (title);
-- 再次执行查询语句
select * from test_index where title='ha-99999';
-- 再次查看执行的时间
show profiles;

(2)缺点
索引的缺点是创建索引会耗费时间和占用磁盘空间,并且随着数据量的增加所耗费的时间也会增加
(3)使用原则
1.通过优缺点对比,并不是索引越多越好,合理使用
2.常更新的表:避免很多索引
经常用于查询的字段:创建索引
3.数据量少:最好不使用索引,不会产生优化效果
4.同一字段相同值比较多:不要建立索引,比如性别,不同值多的可以建立索引

14.mysql联合索引

  • 联合索引是两个或更多个列上的索引。对于联合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a 、 a,b 、 a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。

  • 利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引 不同于使用两个单独的索引。复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。如果您知 道姓,电话簿将非常有用;如果您知道姓和名,电话簿则更为有用,但如果您只知道名不姓,电话簿将没有用处。

15.为什么使用数据索引能提高效率

  • 数据索引的存储是有序的
  • 在有序的情况下,通过索引查询一个数据是无需遍历索引记录的
  • 极端情况下,数据索引的查询效率为二分法查询效率,趋近于 log2(N)

16.B+树索引和哈希索引的区别

B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且叶子节点的指针相互链接,是有序的
在这里插入图片描述
哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从跟节点到叶子节点逐级查找,只需要 一次哈希算法即可,是无序的

在这里插入图片描述
哈希索引的优势:

等值查询。哈希索引具有绝对优势(前提是:没有大量重复键值,如果大量重复键值时,哈希索引的效率很低,因为存在所谓的哈希碰撞问题。)

哈希索引不适用的场景:

1.不支持范围查询
2.不支持索引完成排序
3.不支持联合索引的最左前缀匹配规则

17.B树和B+树的区别

1、B树,每个节点都存储key和data,所有的节点组成这可树,并且叶子节点指针为null,叶子节点不包含任何关键字信息

在这里插入图片描述

2、B+树,所有的叶子节点中包含全部关键字的信息,及指向含有这些关键字记录的指针,且叶子节点本身依关键字的大小自小到大的顺序链接,所有的非终端节点可以看成是索引部分,节点中仅含有其子树根节点中最大(或最小)关键字

在这里插入图片描述

18.为什么说B+比B树更适合实际应用中操作系统的文件索引和数据库索引?

  • B+的磁盘读写代价更低 。B+的内部结点并没有指向关键字具体信息的指针。因此其内部结点相对B树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。

  • B+tree的查询效率更加稳定。 由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。

19.Mysql中的myisam与innodb的区别

1、InooDB支持事务,而MyISAM不支持事务

2、InnoDB支持行级锁,而MyISAM支持表级锁

3、InnoDB支持MVCC,而MyISAM不支持

4、InnoDB支持外键,而MyISAM不支持

5、InnoDB不支持全文索引,而MyISAM支持

20.一张表里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把mysql重启,再insert一条记录,这条记录的ID是18还是15 ?

(1 )如果表的类型是MyISAM ,那么是18。
因为MyISAM表会把自增主键的最大ID记录到数据文件里,重启MySQL自增主键的最大I也不会丢失。

(2)如果表的类型是InnoDB ,那么是15。
InnoDB表只是把自增主键的最大ID记录到内存中,所以重启数据库或者是对表进行OPTIMIZE操作,都会导致最大ID丢失。

21.mysql为什么用自增列作为主键

  • 如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引、如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引、如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递增,这个ROWID不像ORACLE的ROWID那样可引用,是隐含的)。

  • 数据记录本身被存于主索引(一颗B+Tree)的叶子节点上。这就要求同一个叶子节点内(大小为一个内存页或磁盘页)的各条数据记录按主键顺序存放,因此每当有一条新的记录插入时,MySQL会根据其主键将其插入适当的节点和位置,如果页面达到装载因子(InnoDB默认为15/16),则开辟一个新的页(节点)

  • 如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页

  • 如果使用非自增主键(如果身份证号或学号等),由于每次插入主键的值近似于随机,因此每次新纪录都要被插到现有索引页得中间某个位置,此时MySQL不得不为了将新记录插到合适位置而移动数据,甚至目标页面可能已经被回写到磁盘上而从缓存中清掉,此时又要从磁盘上读回来,这增加了很多开销,同时频繁的移动、分页操作造成了大量的碎片,得到了不够紧凑的索引结构,后续不得不通过OPTIMIZE TABLE来重建表并优化填充页面。

22.MySQL分区

什么是表分区
表分区,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看,只有一张表,但是底层却是由多个物理分区组成。

表分区与分表的区别
分表:指的是通过一定规则,将一张表分解成多张不同的表。比如将用户订单记录根据时间成多个表。
分表与分区的区别在于:分区从逻辑上来讲只有一张表,而分表则是将一张表分解成多张表。

表分区有什么好处?
(1)分区表的数据可以分布在不同的物理设备上,从而高效地利用多个硬件设备。和单个磁盘或者文件系统相比,可以存储更多数据
(2)优化查询。在where语句中包含分区条件时,可以只扫描一个或多个分区表来提高查询效率;涉及sum和count语句时,也可以在多个分区上并行处理,最后汇总结果。
(3)分区表更容易维护。例如:想批量删除大量数据可以清除整个分区。
(4)可与使用分区表来避免某些特殊的瓶颈,例如InnoDB的单个索引的互斥访问,ext3问价你系统的inode锁竞争等。

分区表的限制因素

1、一个表最多只能有1024个分区

2、MySQL5.1中,分区表达式必须是整数,或者返回整数的表达式。在MySQL5.5中提供了非整数表达式分区的支持。

3、如果分区字段中有主键或者唯一索引的列,那么多有主键列和唯一索引列都必须包含进来。即:分区字段要么不包含主键或者索引列,要么包含全部主键和索引列

4、分区表中无法使用外键约束

5、MySQL的分区适用于一个表的所有数据和索引,不能只对表数据分区而不对索引分区,也不能只对索引分区而不对表分区,也不能只对表的一部分数据分区。

如何判断当前Mysql是否支持分区?

命令:show variables like ‘%partition%’

Mysql支持的分区类型有哪些?

1、RANGE分区:这种模式允许将数据划分不同范围。例如可以将一个表通过年份划分成若干个分区

2、List分区:这种模式允许系统通过预定义的列表的值来对数据进行分割。按照list中的值分区,与RANGE的区别是,range分区的区间范围值是连续的

3、HASH分区:这种模式允许通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区。例如可以建立一个对表主键进行分区的表

4、KEY分区:上面Hash模式的一种延伸,这里的Hash Key是Mysql系统产生的

23.行级锁定的优点

1.当在许多线程中访问不同的行时只存在少量锁定冲突
2.回滚时只有少量的更改
3.可以长时间锁定单一的行

24.行级锁定的缺点

1.比页级锁定和表级锁定占用更多的内存
2.当在表的大部分使用的时候 ,比页级或表级的速度慢,因为你必须获得更多的锁
3.进行GROUP BY操作或者必须经常扫描整个表,比其它锁定明显慢很多
4.用高级别锁定,通过支持不同的类型锁定,你也可以很容易地调节应用程序,因为其锁成本小于行级锁定

25.mysql优化

(1)设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。

(2)选择合适的表字段数据类型和存储引擎,适当的添加索引,为搜索字段添加索引。

(3)mysql库主从读写分离

(4)找规律分表,减少单表中的数据量提高查询速度。

(5)添加缓存机制,比如memcached,apc等。

(6)不经常改动的页面,生成静态页面。
(7)选择正确的存储引擎,以 MySQL为例,包括有两个存储引擎 MyISAM 和 InnoDB,每个引擎都有利有弊。MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好。甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到读操作完成。另外,MyISAM 对于 SELECT COUNT(*) 这类的计算是超快无比的。InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比 MyISAM 还慢。但是它支持“行锁” ,于是在写操作比较多的时候,会更优秀。并且,他还支持更多的高级应用,比如:事务。

(8)书写高效率的SQL。比如 **SELECT *** FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.固定长度的表会更快;尽可能的使用 NOT NULL, NULL其实需要额外的空间;使用 ENUM 而不是 VARCHAR,ENUM 类型是非常快和紧凑的;优化字段的数据类型,记住一个原则,越小的列会越快。如果一个表只会有几列罢了(比如说字典表,配置表),那么,我们就没有理由使用 INT 来做主键,使用 MEDIUMINT, SMALLINT 或是更小的 TINYINT 会更经济一些。如果你不需要记录时间,使用 DATE 要比 DATETIME 好得多。当然,你也需要留够足够的扩展空间。

25.key和index的区别

1、key是数据库的物理结构,它包含两层意义和作用,一是约束(偏重于约束和规范数据库的结构完整性),二是索引(辅助查询用的)。包括primary key,unique key,foregin key等

2、index是数据库的物理结构,它只是辅助查询的,它创建时会在另外的表空间(mysql中的innodb表空间)以一个类似目录的结构存储。索引要分类的话,分为前缀索引、全文本索引等

26.delete、drop、truncate区别

truncate 和 delete只删除数据,不删除表结构 ,drop删除表结构,并且释放所占的空间。

删除数据的速度,drop> truncate > delete

delete属于DML语言(数据操作语句),需要事务管理,commit之后才能生效。drop和truncate属于DDL语言(数据定义语言),操作立刻生效,不可回滚。

使用场合:
当你不再需要该表时, 用 drop;
当你仍要保留该表,但要删除所有记录时, 用 truncate;
当你要删除部分记录时(always with a where clause), 用 delete.

注意: 对于有主外键关系的表,不能使用truncate而应该使用不带where子句的delete语句,由于truncate不记录在日志中,不能够激活触发器

27.与Oracle相比,Mysql有什么优势?

1.mysql开源、随时可用、无需付费
2.mysql便携式的
3.带有命令提示符的GUI
4.使用mysql查询浏览器支持管理

28.如何区分FLOAT和DOUBLE?

float:精度为8,4个字节

double:精度为16,8个字节

29.区分CHAR_LENGTH和LENGTH?

CHAR_LENGTH:字符数
LENGTH:字节数

Latin字符的这两个数据是相同的,但是对于Unicode和其他编码,它们是不同的。

30.mysql 的主从复制

MySQL复制

保证主服务器(Master)和从服务器(Slave)的数据是一致性的,向Master插入数据后,Slave会自动从Master把修改的数据同步过来(有一定的延迟),通过这种方式来保证数据的一致性,就是Mysql复制

延时性:延时表现为 延迟时间=从库执行SQL完成的时刻-主库开始执行SQL时间;

Mysql 主从复制的好处

1、做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。

2、架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。

3、读写分离,使数据库能支撑更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。

主从配置需要注意的点
(1)主从服务器操作系统版本和位数一致;
(2) Master和Slave数据库的版本要一致;
(3) Master和Slave数据库中的数据要一致;
(4) Master开启二进制日志,Master和Slave的server_id在局域网内必须唯一;

主从复制的原理【重要!!!】

1.数据库有个bin-log二进制文件,记录了所有sql语句。

2.我们的目标就是把主数据库的bin-log文件的sql语句复制过来。

3.让其在从数据的relay-log重做日志文件中再执行一次这些sql语句即可。

4.下面的主从配置就是围绕这个原理配置

5.具体需要三个线程来操作:

  • 1.binlog输出线程:每当有从库连接到主库的时候,主库都会创建一个线程然后发送binlog内容到从库。在从库里,当复制开始的时候,从库就会创建两个线程进行处理:
  • 2.从库I/O线程:当START SLAVE语句在从库开始执行之后,从库创建一个I/O线程,该线程连接到主库并请求主库发送binlog里面的更新记录到从库上。从库I/O线程读取主库的binlog输出线程发送的更新并拷贝这些更新到本地文件,其中包括relay log文件。
  • 3 .从库的SQL线程:从库创建一个SQL线程,这个线程读取从库I/O线程写到relay log的更新事件并执行。

可以知道,对于每一个主从复制的连接,都有三个线程。拥有多个从库的主库为每一个连接到主库的从库创建一个binlog输出线程,每一个从库都有它自己的I/O线程和SQL线程。

主从复制如图:

在这里插入图片描述
原理图2,帮助理解!

步骤一:主库db的更新事件(update、insert、delete)被写到binlog
步骤二:从库发起连接,连接到主库
步骤三:此时主库创建一个binlog dump thread线程,把binlog的内容发送到从库
步骤四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log.
步骤五:还会创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db.

31.数据库的第一范式到第四范式

第一范式:每个表应该有唯一标识每一行的主键。

第二范式:在复合主键的情况下,非主键部分不应该依赖于部分主键。

第三范式:非主键之间不应该有依赖关系。

BC范式
BC范式(BCNF)是Boyce-Codd范式的缩写,其定义是:在关系模式中每一个决定因素都包含候选键,也就是说,只要属性或属性组A能够决定任何一个属性B,则A的子集中必须有候选键。BCNF范式排除了任何属性(不光是非主属性,2NF和3NF所限制的都是非主属性)对候选键的传递依赖与部分依赖。

第四范式
如果满足了BC范式,那么就不再会有任何由于函数依赖导致的异常,但是我们还可能会遇到由于多值依赖导致的异常。
已经是BC范式,并且不包含多值依赖关系。

机器学习

1.学过那些算法,处理过什么样的 特征

2.决策树的原理和作用?什么情况下使用比较好?

3.Kmeans算法分了多少个类!分这么多类有什么作用?

4.Pandas,Numpy熟悉吗?

5.机器学习模型的准确度高不高?

6.建立好模型后是不是只要使用就可以,接下来你干了什么?

7.k近邻算法的实现流程
(1)计算已知类别数据集中的点与当前点之间的距离
(2)按距离递增依次排序
(3)选取与当前点距离最小的k个点
(4)统计前k个点所在的类别出现的频率
(5)返回前k个点出现频率最高的类别作为当前点的预测分类

8.k近邻中k值的选取

K值一般取一个比较小的数值,例如采用交叉验证法(简单来说,就是把训练数据在分成两组:训练集和验证集)来选择最优的K值。对这个简单的分类器进行泛化,用核方法把这个线性模型扩展到非线性的情况,具体方法是把低维数据集映射到高维特征空间。

9.什么是kd树

根据KNN每次需要预测一个点时,我们都需要计算训练数据集里每个点到这个点的距离,然后选出距离最近的k个点进行投票。当数据集很大时,这个计算成本非常高,针对N个样本,D个特征的数据集,其算法复杂度为O(DN^2)。

kd树:为了避免每次都重新计算一遍距离,算法会把距离信息保存在一棵树里,这样在计算之前从树里查询距离信息,尽量避免重新计算。其基本原理是,如果A和B距离很远,B和C距离很近,那么A和C的距离也很远。有了这个信息,就可以在合适的时候跳过距离远的点

这样优化后的算法复杂度可降低到O(DNlog(N))。

原理:
(1)树的建立
(2)最近领域搜索
kd树(K-dimension tree)是一种对k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构。kd树是一种二叉树,表示对k维空间的一个划分,构造kd树相当于不断地用垂直于坐标轴的超平面将K维空间切分,构成一系列的K维超矩形区域。kd树的每个结点对应于一个k维超矩形区域。利用kd树可以省去对大部分数据点的搜索,从而减少搜索的计算量。
构造方法:
(1)构造根结点,使根结点对应于K维空间中包含所有实例点的超矩形区域;

(2)通过递归的方法,不断地对k维空间进行切分,生成子结点。在超矩形区域上选择一个坐标轴和在此坐标轴上的一个切分点,确定一个超平面,这个超平面通过选定的切分点并垂直于选定的坐标轴,将当前超矩形区域切分为左右两个子区域(子结点);这时,实例被分到两个子区域。

(3)上述过程直到子区域内没有实例时终止(终止时的结点为叶结点)。在此过程中,将实例保存在相应的结点上。

(4)通常,循环的选择坐标轴对空间切分,选择训练实例点在坐标轴上的中位数为切分点,这样得到的kd树是平衡的(平衡二叉树:它是一棵空树,或其左子树和右子树的深度之差的绝对值不超过1,且它的左子树和右子树都是平衡二叉树)。

KD树中每个节点是一个向量,和二叉树按照数的大小划分不同的是,KD树每层需要选定向量中的某一维,然后根据这一维按左小右大的方式划分数据。在构建KD树时,关键需要解决2个问题:

(1)选择向量的哪一维进行划分;

(2)如何划分数据;

第一个问题简单的解决方法可以是随机选择某一维或按顺序选择,但是更好的方法应该是在数据比较分散的那一维进行划分(分散的程度可以根据方差来衡量)。好的划分方法可以使构建的树比较平衡,可以每次选择中位数来进行划分,这样问题2也得到了解决。

10.特征降维

深度学习

1.神经网络

2.tensorflow

爬虫

1.爬虫的分布式管理是怎么实现的

2.这个爬虫爬取的数据的需求方是哪个行业的,爬着些数据做什么

数据分析项目

1.这个数据分析项目中你都做了些什么事

人事

  1. 为什么学经济要转行(几乎必问)
  2. 上一家工作为什么离职
  3. 我们这项工作事这样的(描述工作流程),你觉得你能在这项流程中胜任哪些任务?
  4. 你希望下一份工作的氛围是怎么样的
  5. 你希望上司是什么样的人
发布了881 篇原创文章 · 获赞 1254 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/qq_35456045/article/details/105129214