3、简述数据三大范式?
1, 每一列只有一个值
2, 每一行都能区分。
3, 每一个表都不包含其他表已经包含的非主关键字信息。
4、什么是事务?MySQL如何支持事务?
同时对一组数据进行操作的语句就成为事务
在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
5、简述数据库设计中一对多和多对多的应用场景?
一对多 :一个学生对多门考试成绩
多对多 :一个老师教多个学生 一个学生让好几个老师教
6、如何基于数据库实现商城商品计数器?
设置一个商品计数的列 自动递增为1
8、简述触发器、函数、视图、存储过程?
触发器:制定一个sql条件和要做的事当满足的时候自动触发并执行要做的事
函数(存储过程):Mysql储存过程简而言之就是一组已经好的命令,需要使用的时候拿出来用就可以
视图:将一个写好的查询语句封装起来 当调用的时看到的数据就是满足条件的数据 不用每次都写同样的代码
9、MySQL索引种类
- 唯一索引
- 主键索引
- 普通索引
- 全文索引
10、索引在什么情况下遵循最左前缀的规则?
联合索引
11、主键和外键的区别?
12、MySQL常见的函数?
*concat(s1,s2,…Sn) 连接s1,s2..Sn为一个字符串
*length(str) 返回值为字符串str 的长度
*datediff(expr,expr2) 返回起始时间和结束时间的间隔天数
13、列举 创建索引但是无法命中索引的8种情况。
1、如果条件中有or,即使其中有条件带索引也不会使用
2、对于多列索引,不是使用的第一部分(第一个),则不会使用索引
3、like查询是以%开头
4、如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引5、如果mysql估计使用全表扫描要比使用索引快,则不使用索引
14、如何开启慢日志查询?
1.查看慢查询是否开启
show variables like ‘slow_query%’;
show variables like ‘long_query_time’;
2.打开慢查询
set global slow_query_log=’ON’;
3.设置慢查询日志记录文件
set global slow_query_log_file=’/var/lib/mysql/test-10-226-slow.log’;
4.指定慢查询事件
set global long_query_time=1;
15、数据库导入导出命令(结构+数据)?
导出:
mysqldump -u root -p 库名 >导出的文件.sql
导入:
mysql -u root -p 库名
16、数据库优化方案?
为经常查询的字段添加索引
减少外键关联查询
17、char和varchar的区别?
char的长度是不可变的,而varchar的长度是可变的,也就是说,定义一个char[10]和varchar[10],如果存进去的是‘csdn’,那么char所占的长度依然为10,除了字符‘csdn’外,后面跟六个空格,而varchar就立马把长度变为4了
18、简述MySQL的执行计划?
数据库的执行计划通俗点说就是,数据库服务器在执行sql语句的时候,会准备几套方案,最后选择消耗资源最小的那个方案。就是执行计划。
19、在对name做了唯一索引前提下,简述以下区别:
select* from tb where name= ‘Oldboy-Wupeiqi’ —–取出所有name= Oldboy-Wupeiqi
select* from tb where name= ‘Oldboy-Wupeiqi’ limit1 —–只取出第一条 name=Oldboy-Wupeiqi
20、1000w条数据,使用limit offset 分页时,为什么越往后翻越慢?如何解决?
当一个数据库表过于庞大,LIMIT offset, length中的offset值过大,则SQL查询语句会非常缓慢,增加order by,并且order by字段需要建立索引。
21、什么是索引合并?
1、索引合并是把几个索引的范围扫描合并成一个索引。
2、索引合并的时候,会对索引进行并集,交集或者先交集再并集操作,以便合并成一个索引。
3、这些需要合并的索引只能是一个表的。不能对多表进行索引合并。
22、什么是覆盖索引?
就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖。
23、简述数据库读写分离?
对于数据存储层高并发问题,最先想到的可能就是读写分离,在网站访问量大并且读写不平均的情况下,将存储分为master,slave两台,所有的写都路由到master上,所有的读都路由到slave上,然后master和slave同步。如果一台salve不够,可以加多台,比如一台master,3台slave。
24、简述数据库分库分表?(水平、垂直)
分区的主要目的是将数据按照一个较粗的粒度分在不同的表中,这样可以将相关的数据存放在一起,而且如果想一次性的删除整个分区的数据也很方便。
通过一些HASH算法或者工具实现将一张数据表垂直或者水平进行物理切分
25、redis和memcached比较?
1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等;
2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储;
3、虚拟内存–Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘;
4、过期策略–memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定,例如expire name 10;
5、分布式–设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从;
6、存储数据安全–memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化);
7、灾难恢复–memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复;
26、redis中数据库默认是多少个db 及作用?
redis默认有十六个db
27、python操作redis的模块?
import redis
r = redis.Redis(host='127.0.0.1', port=6379,decode_responses=True)
r.set('name', 'OK')
print(r.get('name'))
28、如果redis中的某个列表中的数据量非常大,如何实现循环显示每一个值?
查询取出列表的值让后使用python循环
29、redis如何实现主从复制?以及数据同步机制?
在Master和Slave互通之后,首先,Slave会发送sync同步指令,当Master收到指令后,将在后台启动存盘进程,同时收集所有来自Slave的修改数据集的指令信息,当后台进程完成之后,Master将发送对应的数据库文件到对应的Slave中,以完成一次完整的同步工作。其次Slave在接受到数据库文件之后,将其存盘并加载到内存中。最后,Master继续收集修改命令和新增的修改指令,并依次发送给Slave,其将在本次执行这些数据的修改命令,从而最终达到数据同步的实现。
30、redis中的sentinel的作用?
Redis Sentinel 为Redis提供了高可用的实现。通俗来说就是你可以部署一套无需人为干预即可防灾的Redis环境。
RS同时为客户端提供了其他诸如监控,通知的功能。
31、如何实现redis集群?
官方cluster方案
twemproxy代理方案
哨兵模式
codis
客户端分片
32、redis中默认有多少个哈希槽?
有2**14个哈希槽 16384个
33、简述redis的有哪几种持久化策略及比较?
rdb:快照形式是直接把内存中的数据保存到一个dump文件中,定时保存,保存策略
aof:把所有的对redis的服务器进行修改的命令都存到一个文件里,命令的集合
34、列举redis支持的过期策略。
定时删除
含义:在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除
惰性删除
含义:key过期的时候不删除,每次从数据库获取key的时候去检查是否过期,若过期,则删除,返回null。
定期删除
含义:每隔一段时间执行一次删除(在redis.conf配置文件设置hz,1s刷新的频率)过期key操作
35、MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中都是热点数据?
LRU(最近少用的淘汰)
即redis的缓存每命中一次,就给命中的缓存增加一定ttl(过期时间)(根据具体情况来设定, 比如10分钟).一段时间后, 热数据的ttl都会较大, 不会自动失效, 而冷数据基本上过了设定的ttl就马上失效了. 学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
四、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
五、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。