1.列舉常見的關系型數據庫和非關系型都有那些?
關系型 : MySQL,SQL Server ,Oracle , Sybase, DB2
非關系型 : Redis, MongodDB
2.MySQL常見數據庫引擎及比較?
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的模塊?
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*') # *代表通配符
