• Python面试数据库


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

       关系型 : MySQL,SQL Server ,Oracle , Sybase, DB2
       非关系型 : Redis, MongodDB

    2.MySQL常见数据库引擎及比较?

      InnoDB,MyISAM,NDB,Memory等

    3.简述数据三大范式?

    1.第一范式:确保每列保持原子性
    2.第二范式:确保表中的每列都和主键相关
    3.第三范式:确保表中每一列都和主键列直接相关,而不是间接相关.

    4.什什么是事务?MySQL如何支持事务?

    事务是逻辑上的一组操作,组成这组操作的各个单元,要不全都成功要不全都失败,这个特性就是事务

    5.简述数据库设计中一对多和多对多的应用场景?

    一对多 : 一个学校有多个老师.

    多对多 : 一个老师可以带多个班级,一个班级有多个老师

    6.如何基于数据库实现商城商品计数器?

      详情

    7.常见SQL(必备)

      详情

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

      详情

    触发器: 在执行某种操作前后一些自定义的操作
    函数: 处理参数,返回结果
    视图: 把需要的数据存放在一张临时表中
    存储过程: sql语句集,简化了一些操作.与函数不同,他可以返回一个结果集(查询结果)

    9.MySQL索引种类

      详情

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

    联合索引

    11.主键和外键的区别?

    主键 : 该表中此列唯一,非空

    外键 : 该列中的值必须是关联表中关联的数据

    12.MySQL常见的函数?

    详情

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

    详情

    14.如何开启慢日志查询?

    详情

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

      Mysqldump -h127.0.0.1 -P3306  -uroot -p密码 数据库名称>xx.sql

    16.数据库优化方案?

    详情

    17.char和varchar的区别?

    #char类型:定长,简单粗暴,浪费空间,存取速度快

    #varchar类型:变长,精准,节省空间,存取速度慢

    18.简述MySQL的执行计划?

      详情

    19.在对name做了了唯⼀一索引前提下,简述以下区别:

    • select * from tb where name = ‘Oldboy-Wupeiqi’
    • select * from tb where name = ‘Oldboy-Wupeiqi’ limit 1

    全局遍历与只取一条

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

    越是向后,扫描的数据也就越多

    解决方案:按照需求实现,可分为

    • 限制浏览页数,
    • 存储本页数据两端的主键,按主键查找后向前或向后取多少条
    • 另外,如果数据没有缺失的话,还可以通过页数来计算主键

    21.什什么是索引合并?

    使用多个主键进行查询

    22.什什么是覆盖索引?

    查询内容在主键中可以直接查到

    23.简述数据库读写分离?

    建立主从关系,实现高可用,并减少主服务器的压力

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

    水平 : 数据库字段过多

    垂直 : 数据库行数太多

    25.redis和memcached比较?

    详情

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

    0-15,相当于不同的库

    27.python操作redis的模块?

    redis模块

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

    def list_iter(name):
        """
        自定义redis列表增量迭代
        :param name: redis中的name,即:迭代name对应的列表
        :return: yield 返回 列表元素
        """
        list_count = r.llen(name)
        for index in xrange(list_count):
            yield r.lindex(name, index)

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

    在从服务器中配置 SLAVEOF 127.0.0.1 6380 # 主服务器IP,端口 

    30.redis中的sentinel的作用?

    监控主机状态,实现高可用

    31.如何实现redis集群?

     安装集群软件

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

    16384

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

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

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

    34.列列举redis支持的过期策略略。

    • voltile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
    • volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
    • volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
    • allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
    • allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
    • no-enviction(驱逐):禁止驱逐数据

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

    redis内存数据级上升到一定大小时,就会实行数据淘汰策略,从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰

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

    class Zhan:
        def __init__(self,conn):
            self.conn = conn
        def push(self,val):
            self.conn.rpush('aaa',val)
        def pop(self):
            return self.conn.rpop('aaa')
     
    class Dui:
        def __init__(self,conn):
            self.conn = conn
        def push(self,val):
            self.conn.rpush('bbb',val)
        def get(self):
            return self.conn.lpop('bbb')
     
    class Xu:
        def __init__(self,conn):
            self.conn = conn
        def push(self,val,count):
            self.conn.zadd('ccc',val,count)
        def get(self):
            a = self.conn.zrange('ccc', 0, 0)[0]
            self.conn.zrem('ccc', a)
            return a

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

    将列表维护成一个栈,设置获取数据的超时时间

    38.如何基于redis实现发布和订阅?以及发布订阅和消息队列列的区别?

    发送消息 : conn.publish(名称,消息)

    接收消息 : conn.sunscribe(名称)

    区别 :  消息队列,收到消息只会有一个处理者;发布订阅,所有的订阅者都会收到消息并进行处理

    39.什么是codis及作用?

    豌豆荚团队提供的一个分布式 Redis 解决方案

    40.什么是twemproxy及作用?

    Twemproxy 又称 nutcracker ,是一个memcache、redis协议的轻量级代理,一个用于sharding 的中间件。有了Twemproxy,客户端不直接访问Redis服务器,而是通过twemproxy 代理中间件间接访问。

    作用 : 对redis数据分片处理

    41.写代码实现redis事务操作。

    import redis
      
    pool = redis.ConnectionPool(host='10.211.55.4', port=6379)
      
    conn = redis.Redis(connection_pool=pool)
      
    # transaction默认为False,只可以完成批量提交的作用,节省网络延时
    # 改为True后可以实现事务功能
    # pipe = r.pipeline(transaction=False)
    pipe = conn.pipeline(transaction=True)
    # 开始事务
    pipe.multi()
      
    pipe.set('name', 'alex')
    pipe.set('role', 'sb')
    pipe.lpush('roless', 'sb')
      
    # 提交
    pipe.execute()

    42.redis中的watch的命令的作用?

    加锁

    43.基于redis如何实现商城商品数量计数器?

    字符串的decr可以实现自减操作

    44.简述redis分布式锁?

    为redis集群设计的锁,防止多个任务同时修改数据库,其本质就是为集群中的每个主机设置一个会超时的字符串,当集群中有一半多的机器设置成功后就认为加锁成功,直至锁过期或解锁不会有第二个任务加锁成功

    45.什么是一致性哈希?Python中是否有相应模块?

    详情

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

    # 命令模式
    KEYS * # *代表通配符
     
    # redis模块
    import redis
    con = redis.Redis()
    con.keys(pattern='celery*') # *代表通配符
  • 相关阅读:
    ubuntu 读取群晖 nas 盘
    nginx 下载 apk、ipa 不改名zip 设置
    centos 更新时间
    go 交叉编译跨平台
    ffmpeg安装
    批量打开文件夹下所有的指定文件(批处理)
    端口流量统计
    关于 bind 和 dns
    关于使用 certbot 给网站增加 ssl
    Macos下制作可启动的u盘(转)
  • 原文地址:https://www.cnblogs.com/xinyangsdut/p/9183652.html
Copyright © 2020-2023  润新知