赞
踩
【更新日志】
日期 | 内容 |
---|---|
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的区别 |
2020.03.22 | 归一化的定义、公式、优缺点;标准化的定义、公式、与归一化对比;什么是交叉验证;为什么需要交叉验证;什么是网格搜索(Grid Search);线性回归应用场景、定义、公式;线性回归经常使用的两种优化算法;梯度下降和正规方程的对比;回归的选择;梯度下降的种类;回归性能评估;欠拟合和过拟合定义、解决办法;正则化的定义和类别;12.正则化线性模型;13.sklearn模型的保存和加载API;逻辑回归的应用场景;逻辑回归的原理;“那像你提到有用到Xgboost,你有测试过Xgboost和GBDT的效果区别吗?你认为在你的项目上是什么导致原因导致了这个区别”;“xgboost对缺失值是怎么处理的?”;“那你知道在什么情况下应该使用Onehot呢?”;“你能讲一下Xgboost和GBDT的区别吗?;LGB比xgboost快且精度高的原因;分类的评估方法 |
2020.04.02 | 索引失效的情况;脏读是什么;什么情况下会脏读;事务的隔离级别;sql语句的优化;sql的优化;python的迭代器生成器;二分查找是什么;快速排序是什么;怎么样处理垃圾邮件;怎么样实现论文的查重系统;手写sigmod激活函数;什么是主从复制;mysql怎么实现负载均衡;knn算法解释;推荐系统需要采集用户的哪些特征 |
2020.04.09 | 更新阿里数据分析面试题 |
M表示两个牌堆各有2个A的情况:M=4(25!25!)
N表示两个牌堆完全随机的情况:N=27!27!
所以概率为:M/N = 926/53*17
因为男女的点击率可能有较大差异,同时低点击率群体的占比增大。
如原来男性20人,点击1人;女性100人,点击99人,总点击率100/120。
现在男性100人,点击6人;女性20人,点击20人,总点击率26/120。
即那个段子“A系中智商最低的人去读B,同时提高了A系和B系的平均智商。”
用样本统计量去估计总体的参数。
可参考https://vicky.blog.csdn.net/article/details/105131308
参数估计和假设检验是统计推断的两个组成部分,它们都是利用样本对总体进行某种推断,但推断的角度不同。
参数估计讨论的是用样本估计总体参数的方法,总体参数μ在估计前是未知的。
而在假设检验中,则是先对μ的值提出一个假设,然后利用样本信息去检验这个假设是否成立。
可参考:https://vicky.blog.csdn.net/article/details/105131409
置信区间是我们所计算出的变量存在的范围,置信水平就是我们对于这个数值存在于我们计算出的这个范围的可信程度。
举例来讲,有95%的把握,真正的数值在我们所计算的范围里。
在这里,95%是置信水平,而计算出的范围,就是置信区间。
如果置信度为95%, 则抽取100个样本来估计总体的均值,由100个样本所构造的100个区间中,约有95个区间包含总体均值。
可参考http://www.360doc.com/content/18/0317/16/15033922_737796626.shtml
协方差:
协方差表示的是两个变量的总体的误差,这与只表示一个变量误差的方差不同。 如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。 如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。
相关系数:
研究变量之间线性相关程度的量,取值范围是[-1,1]。相关系数也可以看成协方差:一种剔除了两个变量量纲影响、标准化后的特殊协方差。
可参考http://blog.sina.com.cn/s/blog_6aa3b1010102xkp5.html
中心极限定理定义:
(1)任何一个样本的平均值将会约等于其所在总体的平均值。
(2)不管总体是什么分布,任意一个总体的样本平均值都会围绕在总体的平均值周围,并且呈正态分布。
中心极限定理作用:
(1)在没有办法得到总体全部数据的情况下,我们可以用样本来估计总体。
(2)根据总体的平均值和标准差,判断某个样本是否属于总体。
可参考https://www.zhihu.com/question/22913867/answer/250046834
基本原理只有3个:
证明逻辑就是:我要证明命题为真->证明该命题的否命题为假->在否命题的假设下,观察到小概率事件发生了->否命题被推翻->原命题为真->搞定。
结合这个例子来看:证明A是合格的投手-》证明“A不是合格投手”的命题为假-》观察到一个事件(比如A连续10次投中10环),而这个事件在“A不是合格投手”的假设下,概率为p,小于0.05->小概率事件发生,否命题被推翻。
可以看到p越小-》这个事件越是小概率事件-》否命题越可能被推翻-》原命题越可信
是同一现象在不同时间上的相继观察值排列而成的序列。
(随口追问了一句小孩子的智力水平,面试官说七八岁,能数数)
拿出小朋友班级的成绩表,每隔2分统计一下人数(因为小学一年级大家成绩很接近),画出钟形。然后说这就是正态分布,大多数的人都集中在中间,只有少数特别好和不够好
拿出隔壁班的成绩表
,让小朋友自己画画看,发现也是这样的现象
然后拿出班级的身高表
,发现也是这个样子的
大部分人之间是没有太大差别
的,只有少数人特别好和不够好
,这是生活里普遍
看到的现象,这就是正态分布
A. 回归系数的符号与专家经验知识不符(对)
B. 方差膨胀因子(VIF)
<5(错,大于10认为有严重多重共线性
)
C. 其中两个预测变量的相关系数>=0.85(对)
D. 变量重要性与专家经验严重违背(对)
因为要算协方差。单纯的线性变换只是产生了倍数缩放,无法消除量纲对协方差的影响,而协方差是为了让投影后方差最大。
在统计学中,主成分分析(PCA)
是一种简化数据集的技术。它是一个线性变换
。这个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。
主成分分析经常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。但是,这也不是一定的,要视具体应用而定。
主成分分析的原理是设法将原来变量重新组合成一组新的相互无关的几个综合变量,同时根据实际需要从中可以取出几个较少的综合变量尽可能多地反映原来变量的信息的统计方法叫做主成分分析或称主分量分析,也是数学上处理降维的一种方法。
主成分分析是设法将原来众多具有一定相关性(比如P个指标),重新组合成一组新的互相无关的综合指标来代替原来的指标。通常数学上的处理就是将原来P个指标作线性组合,作为新的综合指标。最经典的做法就是用F1(选取的第一个线性组合,即第一个综合指标)的方差来表达,即Va(rF1)越大,表示F1包含的信息越多。因此在所有的线性组合中选取的F1应该是方差最大的,故称F1为第一主成分。如果第一主成分不足以代表原来P个指标的信息,再考虑选取F2即选第二个线性组合,为了有效地反映原来信息,F1已有的信息就不需要再出现再F2中,用数学语言表达就是要求Cov(F1,F2)=0,则称F2为第二主成分,依此类推可以构造出第三、第四,……,第P个主成分。
利用已知的样本结果
,反推最有可能(最大概率)
导致这样结果的参数值。
参考https://blog.csdn.net/zengxiantao1994/article/details/72787849
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的高级功能)
(1)事务
就是用户定义的一系列执行SQL语句的操作, 这些操作要么完全地执行,要么完全地都不执行, 它是一个不可分割的工作执行单元。
(2)事务的四大特性
ACID原子性、一致性、隔离性、持久性
(3)事务的使用
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() 操作就是回滚事务
脏读:dirty read
一个事务修改来了数据未提交,另一个数据读取了未提交的数据。
丢失修改:lost to modify
两个事务都修改了数据之后,第一个数据修改就会丢失。如数据A=10,事务1:A=A-1;
事务2:A=A-1,最后结果发现为19;
不可重复读:Unrepeatable Read
A事务在多次修改数据之间,B事务读取了数据,但是B在A事务执行之间读取的时候,可能会发现读取同一个数据的时候两次读到的不一样;
幻读:Phantom Read
幻读与不可重复读相同,但是是一个事务多次插入或者删除数据,另一个事务读取的时候会发现多了或者少了数据。
Read-Uncommitted(读未提交)
最低的隔离级别,允许读取尚未提交的事务,会导致脏读、幻读、不可重复读。
Read-Committed(读已提交)
允许并发事务读取已经提交的数据,可以防止脏读,单有可能幻读、不可重复读。
Repeatable-Read(可重复读)
mysql的默认隔离级别,对同一字段的多次读取都是相同的,除非数据是被本身事务修改。可以防止脏读与不可重复读,但有可能会有幻读。
Serializable(可串行化)
最高的隔离级别,完全按照ACID,所有事务依次执行。
(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.同一字段相同值比较多:不要建立索引,比如性别,不同值多的可以建立索引
联合索引是两个或更多个列上的索引。对于联合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a 、 a,b 、 a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。
利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引 不同于使用两个单独的索引。复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。如果您知 道姓,电话簿将非常有用;如果您知道姓和名,电话簿则更为有用,但如果您只知道名不姓,电话簿将没有用处。
B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且叶子节点的指针相互链接,是有序的
哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从跟节点到叶子节点逐级查找,只需要 一次哈希算法即可,是无序的
哈希索引的优势:
等值查询。哈希索引具有绝对优势(前提是:没有大量重复键值,如果大量重复键值时,哈希索引的效率很低,因为存在所谓的哈希碰撞问题。)
哈希索引不适用的场景:
1.不支持范围查询
2.不支持索引完成排序
3.不支持联合索引的最左前缀匹配规则
1、B树,每个节点都存储key和data,所有的节点组成这可树,并且叶子节点指针为null,叶子节点不包含任何关键字信息
2、B+树,所有的叶子节点中包含全部关键字的信息,及指向含有这些关键字记录的指针,且叶子节点本身依关键字的大小自小到大的顺序链接,所有的非终端节点可以看成是索引部分,节点中仅含有其子树根节点中最大(或最小)关键字
B+的磁盘读写代价更低 。B+的内部结点并没有指向关键字具体信息的指针。因此其内部结点相对B树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。
B+tree的查询效率更加稳定。 由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。
1、InooDB支持事务,而MyISAM不支持事务
2、InnoDB支持行级锁,而MyISAM支持表级锁
3、InnoDB支持MVCC,而MyISAM不支持
4、InnoDB支持外键,而MyISAM不支持
5、InnoDB不支持全文索引,而MyISAM支持
(1 )如果表的类型是MyISAM ,那么是18。
因为MyISAM表会把自增主键的最大ID记录到数据文件里,重启MySQL自增主键的最大I也不会丢失。
(2)如果表的类型是InnoDB ,那么是15。
InnoDB表只是把自增主键的最大ID记录到内存中,所以重启数据库或者是对表进行OPTIMIZE操作,都会导致最大ID丢失。
如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引、如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引、如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递增,这个ROWID不像ORACLE的ROWID那样可引用,是隐含的)。
数据记录本身被存于主索引(一颗B+Tree)的叶子节点上。这就要求同一个叶子节点内(大小为一个内存页或磁盘页)的各条数据记录按主键顺序存放,因此每当有一条新的记录插入时,MySQL会根据其主键将其插入适当的节点和位置,如果页面达到装载因子(InnoDB默认为15/16),则开辟一个新的页(节点)
如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页
如果使用非自增主键(如果身份证号或学号等),由于每次插入主键的值近似于随机,因此每次新纪录都要被插到现有索引页得中间某个位置,此时MySQL不得不为了将新记录插到合适位置而移动数据,甚至目标页面可能已经被回写到磁盘上而从缓存中清掉,此时又要从磁盘上读回来,这增加了很多开销,同时频繁的移动、分页操作造成了大量的碎片,得到了不够紧凑的索引结构,后续不得不通过OPTIMIZE TABLE来重建表并优化填充页面。
什么是表分区
表分区,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看,只有一张表,但是底层却是由多个物理分区组成。
表分区与分表的区别
分表:指的是通过一定规则,将一张表分解成多张不同的表。比如将用户订单记录根据时间成多个表。
分表与分区的区别在于:分区从逻辑上来讲只有一张表,而分表则是将一张表分解成多张表。
表分区有什么好处?
(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系统产生的
1.当在许多线程中访问不同的行时只存在少量锁定冲突
2.回滚时只有少量的更改
3.可以长时间锁定单一的行
1.比页级锁定和表级锁定占用更多的内存
2.当在表的大部分使用的时候 ,比页级或表级的速度慢,因为你必须获得更多的锁
3.进行GROUP BY操作或者必须经常扫描整个表,比其它锁定明显慢很多
4.用高级别锁定,通过支持不同的类型锁定,你也可以很容易地调节应用程序,因为其锁成本小于行级锁定
(1)设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。
(2)选择合适的表字段数据类型和存储引擎,适当的添加索引,为搜索字段添加索引。
(3)mysql库主从读写分离。
(4)找规律分表,减少单表中的数据量提高查询速度。
(5)添加缓存机制,比如memcached,apc等。
(6)不经常改动的页面,生成静态页面。
(7)选择正确的存储引擎,以 MySQL为例,包括有两个存储引擎 MyISAM 和 InnoDB,每个引擎都有利有弊。MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好。甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到读操作完成。另外,MyISAM 对于 SELECT COUNT(*) 这类的计算是超快无比的。InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用&#x
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。