python数据库的题库_python 面试题汇总---数据库和缓存

【链接】Python面试数据库

https://www.cnblogs.com/xinyangsdut/p/9183652.html

【链接】【2018】Python面试题【数据库】

https://blog.csdn.net/qq_37275405/article/details/81226213

2019/8/21-每日10道题!

列举常见的关系型数据库和非关系型都有那些?

关系型数据库:mysql orachle sql server

非关系型数据库:mongodb redis

MySQL 常见数据库引擎及区别?

myisam:只支持表级锁,效率低,并发性差 不适用当代高并发节奏

memory:储存快读写快,但是容易丢失数据,故很早就没有人用了

innodb:5.6以及5.6之后默认引擎 支持高并发,支持事物,支持行及锁是目前当代普遍用选择的

简述事务及其特性?

事物:完整提交数据,如果其中有错误,他也可以回滚之前样子,保证数据安全可靠性

事物四大特性:原子性 持久性 隔离性 一致性

简述触发器、函数、视图、存储过程?

MySQL 索引种类

辅助索引,聚集索引, 唯一索引,全文索引

索引在什么情况下遵循最左前缀的规则?

在多个条件与or 相连

MySQL 常见的函数?

concat,distrinct ,case,group_concat,max/min

列举 创建索引但是无法命中索引的情况。

1,创建的索引没有用上2,在范围查找时 ,该索引键所查找的范围很大很大3,所设定的索引在正表中出现次数高,重复率大,区分度低4,设置索引那字段 内容参与了计算5,在多个条件与or 相连 位置在其最右

数据库导入导出命令(结构+数据)?

mysqldump -uroot -p123 --all-databases>all.sql---导出

mysql-uroot -p123 。。。/all.sql 导入到数据库中

你了解那些数据库优化方案?

为经常查询字段创建索引

减少外键关联查询

2019/8/22-每日10道题!

char 和 varchar 的区别?

char ----定长--浪费空间,储存效率高varchar 变长--使用博客类大文章上--效率比char低

简述MySQL的执行计划的作用及使用方法?

数据库在执行sql 语句时会准备几套方案,最后会选择消耗最小的那个方案 就是执行计划

1000w 条数据,使用 limit offset 分页时,为什么越往后翻越慢?如何解 决?

当一个数据库表过于庞大,LIMIT offset, length中的offset值过大,则SQL查询语句会非常缓慢

,增加order by,并且order by字段需要建立索引。

什么是索引合并?两个或者两个以上都是所创建的索引在多个条件下连在一起

1、索引合并是把几个索引的范围扫描合并成一个索引。2、索引合并的时候,会对索引进行并集,交集或者先交集再并集操作,以便合并成一个索引。3、这些需要合并的索引只能是一个表的。不能对多表进行索引合并。

什么是覆盖索引?--数据存在叶子节点,三层内就能找到该数据(效率高)

就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖。

简述数据库读写分离?

对于数据存储层高并发问题,最先想到的可能就是读写分离,在网站访问量大并且读写不平均的情况下,

将存储分为master,slave两台,所有的写都路由到master上,所有的读都路由到slave上,

然后master和slave同步。如果一台salve不够,可以加多台,

比如一台master,3台slave。

简述数据库分库分表?(水平、垂直)

分区的主要目的是将数据按照一个较粗的粒度分在不同的表中,这样可以将相关的数据存放在一起,

而且如果想一次性的删除整个分区的数据也很方便。

通过一些HASH算法或者工具实现将一张数据表垂直或者水平进行物理切分

数据库锁的作用?--保持数据安全可靠,不易丢失,不易被串改

where 子句中有 a,b,c 三个查询条件, 创建一个组合索引 abc(a,b,c),以下哪 种会命中索引

(a)

(b)

(c)

(a,b)✅

(b,c)✅

(a,c)

(a,b,c)✅

mysql 下面那些查询不会使用索引,between, like "c%" , not in, not--exists

exists, !=, , >=,in

2019/8/23-每日10道题!

mysql 中 varchar 与 char 的区别以及 varchar(50)中的 50 代表的含义

char ----定长--效率高

varchar 变长--使用博客类大文章上--效率比char低

varchar(50)---代表最多输入50个字符

请简述项目中优化sql语句执行效率的方法

--能使用连表查询不使用子查询--选择区分度高的字段去操作---尽量少使用模糊匹配

从delete语句中省略where子句,将产生什么后果?  B

A. delete语句将失败因为没有记录可删除 B. delete语句将从表中删除所有的记录 C. delete语句将􏰀示用户进入删除的标准 D. delete语句将失败,因为语法错误

叙述mysql半同步复制原理

sql 查询

存在的表有

1. products(商品表) columns 为 id, name, price

2. orders(商城订单表) columns 为 id, reservation_id, product_id,

quentity(购买数量)

3. reservations(酒店订单表) columns 为 id,user_id, price, created

需要查询的:

1. 各个商品的售卖情况, 需要字段 商品名 购买总量 商品收入

2. 所有用户在2018-01-01至2018-02-01下单次数,下单金额,商城下单次

数, 商城下单金额

3. 历月下单用户数: 下单一次用户数, 下单两次用户数, 下单三次及以上用户

26. 考虑如下表结构,写出建表语句

create table t1(id int unique auto_increment,name char(6) not null,balance float(4) not null);

27. 假设学生Students和教师Teachers关系模型如下所示

1. Student:(学号,姓名,性别,类别,身份证号)

2. Teacher:(教师号,姓名,性别,身份证号,工资) 其中,学生关系中的类别分别为"本科生"和"研究生两类", 性别分为"男"和"女"

两类.

查询研究生教师平均工资(显示为平均工资), 最高工资与最低工资之间的差值

(显示为差值)的 SQL 语句

select (1) as 平均工资, (2) as 差值 from Students,Teacher where (3);

查询工资少于 10000 元的女研究生教师的身份证号和姓名的 SQL 语句(非嵌套查 询方式);

select 身份证号,姓名 from Students where (4) (5)

select 身份证号,姓名 from Teachers where (6)

mysql 中怎么创建索引?

create index 索引名 on 表名 (字段名)

请简述sql注入的攻击原理及如何在代码层面防止sql注入?

使用Python实现将数据库的student表中􏰀取的数据写入db.txt?

mysql>use db1;

mysql> SET SQL_LOG_BIN=0; #关闭二进制日志,只对当前session生效

mysql> source /root/db1.txt

2019/8/24-每日10道题!

简述leftjoin和rightjoin的区别?

左外连接:以左边为主导并保存左边所有数据

右外连接:以右边为主导并保存右边所有数据

索引有什么作用,有那些分类,有什么好处和坏处?

大大加快了查找速度,提高用户体验

聚集索引,辅助索引

好处---查询速度快,,坏处--太占用内存资源

写sql语句

查询:

查询出每门课程都大于80分的学生姓名

查询出语文成绩醉的大学生姓名

查询没有成绩的学生姓名试列出至少三种目前流行的大型关系型数据库的名称

试列出至少三种目前流行的大型关系型数据库的名称

其中您最熟悉的是

什么时候开始使用

数据库查询

有表 List, 共有字段 a,b,c. 类型都是整数, 表中有如下几条记录

用一条sql语句查询出每门课程都大于80分的学生姓名.表score如下:

设计表,关系如下:教师,班级,学生,科室.科室与教师为一对多关系,教师与 班级为多对多关系, 班级与学生为一对多关系, 科室中需体现层级关系

写出各张表的逻辑字段

根据上述关系表

1. 查询教师id=1的学生数

2. 查询科室id=3的下级部门数

3. 查询所带学生最多的教师的id

有staff表,字段为主键Sid,姓名Sname,性别Sex(值为"男"或"女"),课程表

Course,字段为主键 Cid,课程名称 Cname,关系表 SC_Relation,字段为 Student

表主键 Sid 和 Course 表主键 Cid,组成联合主键,请用 SQL 查询语句写出查

询所有选"计算机"课程的男士的姓名

什么是MySQL慢日志?

数据库题(要求写出逻辑字段)

1. 写出建表语句完成如下操作,列名自由定义(id 自增): 新建 A,B,C 三张表;

A 表自关联;

A、B 表为 1:n 表;

B、C表为 m:n 表

2. 写出插入语句完成如下操作:

在C表中插入记录c1,并使其关联B表中 id为1和2的两条记录。

3. 写出删除语句完成如下操作:

删除 A 表中的记录 a1(id=1),并级联删除 A、B、C 表中的其他相关记录。

4. 写出查询语句完成如下操作(3 条 SQL):

A 表中存在记录 a2(id=2),分别查询 A、B、C 表中与 a2 相关联的记录数

据。

2019/8/25-每日10道题!

在对name做了唯一索引前􏰀下,简述以下区别:

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恢复;

如何高效的找到redis中所有以oldboy开头的key?

key oldboy*

什么是一致性哈希?

对节点和数据,都做一次哈希运算,然后比较节点和数据的哈希值,数据取和节点最相近的节点做为存放节点。

这样就保证当节点增加或者减少的时候,影响的数据最少。

hash_ring 是python中做一致性哈希的模块

redis 是单进程单线程的吗?

redis 中数据库默认是多少个 db 及作用?

redis默认有十六个db

如果redis中的某个列表中的数据量非常大,如果实现循环显示每一个 值?

查询取出列表的值让后使用python循环

redis 如何实现主从复制?以及数据同步机制?

在Master和Slave互通之后,首先,Slave会发送sync同步指令,

当Master收到指令后,将在后台启动存盘进程,同时收集所有来自Slave的修改数据集的指令信息,当后台进程完成之后,

Master将发送对应的数据库文件到对应的Slave中,以完成一次完整的同步工作。

其次Slave在接受到数据库文件之后,将其存盘并加载到内存中。

最后,Master继续收集修改命令和新增的修改指令,并依次发送给Slave,其将在本次执行这些数据的修改命令,从而最终达到数据同步的实现。

redis 中的 sentinel 的作用?

Redis Sentinel 为Redis提供了高可用的实现。通俗来说就是你可以部署一套无需人为干预即可防灾的Redis环境。

RS同时为客户端提供了其他诸如监控,通知的功能。

如何实现redis集群?

官方cluster方案

twemproxy代理方案

哨兵模式

codis

客户端分片

2019/8/26-每日10道题!

redis 中默认有多少个哈希槽?

有2**14个哈希槽 16384个

简述redis的有哪几种持久化策略及比较?

rdb:快照形式是直接把内存中的数据保存到一个dump文件中,定时保存,保存策略

aof:把所有的对redis的服务器进行修改的命令都存到一个文件里,命令的集合

列举redis支持的过期策略。

定时删除

含义:在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除

惰性删除

含义:key过期的时候不删除,每次从数据库获取key的时候去检查是否过期,若过期,则删除,返回null。

定期删除

含义:每隔一段时间执行一次删除(在redis.conf配置文件设置hz,1s刷新的频率)过期key操作

MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中都 是热点数据?

LRU(最近少用的淘汰)

即redis的缓存每命中一次,就给命中的缓存增加一定ttl(过期时间)(根据具体情况来设定, 比如10分钟).一段时间后, 热数据的ttl都会较大, 不会自动失效, 而冷数据基本上过了设定的ttl就马上失效了.

写代码,基于redis的列表实现先进先出、后进先出队列、优先级队列。

先进lpush keys values 先出 rpop keys

先进lpush keys values 后出 lpop keys

如何基于redis实现消息队列?

Redis中五大数据结构之一—列表,其PUSH和POP命令遵循FIFO先进先出原则。

当我们需要发布消息的时候执行LPUSH(消息从左边进入队列),消息接收端执行RPOP获得消息(消息从右侧弹出)。

对于列表,Redis提供了带有阻塞的命令(命令前加B)。

因此,生产者lpush消息,消费者brpop(从列表中弹出最右端元素,如无元素则一直阻塞到timeout)消息,并设定超时时间timeout,可以减少redis的压力。

如何基于redis实现发布和订阅?

创建一个频道 客户端加入频道 等待频道发布订阅

什么是codis?

Codis 是一个分布式 Redis 解决方案,

对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别

(不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务.

什么是twemproxy?

Twemproxy是一种代理分片机制,由Twitter开源。Twemproxy作为代理,可接受来自多个程序的访问,

按照路由规则,转发给后台的各个Redis服务器,再原路返回。

该方案很好的解决了单个Redis实例承载能力的问题。

redis 如何实现事务。

>multi //开启一个事务>set age 10 //暂存指令队列>set age 20

>exec //开始执行(提交事务)

或>discard //清空指令队列(事务回滚)

redis 中的 watch 的命令的作用?

Redis Watch 命令用于监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断

简述redis分布式锁和redlock的实现机制。

在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段。

一个Client想要获得一个锁需要以下几个操作:

得到本地时间Client使用相同的key和随机数,按照顺序在每个Master实例中尝试获得锁。在获得锁的过程中,为每一个锁操作设置一个快速失败时间(如果想要获得一个10秒的锁, 那么每一个锁操作的失败时间设为5-50ms)。

这样可以避免客户端与一个已经故障的Master通信占用太长时间,通过快速失败的方式尽快的与集群中的其他节点完成锁操作。

客户端计算出与master获得锁操作过程中消耗的时间,当且仅当Client获得锁消耗的时间小于锁的存活时间,并且在一半以上的master节点中获得锁。才认为client成功的获得了锁。

如果已经获得了锁,Client执行任务的时间窗口是锁的存活时间减去获得锁消耗的时间。

如果Client获得锁的数量不足一半以上,或获得锁的时间超时,那么认为获得锁失败。客户端需要尝试在所有的master节点中释放锁, 即使在第二步中没有成功获得该Master节点中的锁,仍要进行释放操作。

请设计一个商城商品计数器的实现方案?

指定键的值做加加操作,返回加后的结果。

了解过Hbase、DB2、SQLServer、Access吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值