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*') # *代表通配符

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM