標籤:延時 資料量 臨時 情況下 plain rdb 一個 memory 定義
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 rediscon = redis.Redis()con.keys(pattern=‘celery*‘) # *代表萬用字元
Python面試資料庫