面試:集合:redis:kafka

解決hash沖突的方法

  1. 線性探測法
  2. 平方探測法
  3. 偽隨機(jī)列法
  4. 拉鏈法

Redis和mysql數(shù)據(jù)怎么保持?jǐn)?shù)據(jù)一致的

主要是解決讀數(shù)據(jù)從Redis緩存呵俏,一旦涉及到數(shù)據(jù)更新:數(shù)據(jù)庫和緩存更新,就容易出現(xiàn)緩存(Redis)和數(shù)據(jù)庫(MySQL)間的數(shù)據(jù)一致性問題。

不管先刪數(shù)據(jù)庫還是先刪redis都會出現(xiàn)問題:

解決方案:1.采用延時雙刪策略

在寫庫前后都進(jìn)行redis.del(key)操作倦始,并且設(shè)定合理的超時時間良风。

先刪除緩存,再寫數(shù)據(jù)庫,休眠500毫秒,再次刪除緩存
  1. 異步更新緩存

MySQL binlog增量訂閱消費+消息隊列+增量數(shù)據(jù)更新到redis

這里說的是增量,指的是mysql的update、insert窑多、delate變更數(shù)據(jù)。(2)讀取binlog后分析 洼滚,利用消息隊列,推送更新各臺的redis緩存數(shù)據(jù)埂息。這樣一旦MySQL中產(chǎn)生了新的寫入、更新遥巴、刪除等操作千康,就可以把binlog相關(guān)的消息推送至Redis,Redis再根據(jù)binlog中的記錄铲掐,對Redis進(jìn)行更新拾弃。

kafka、rabbitMQ等來實現(xiàn)推送更新Redis!

一張自增表里面總共有 7 條數(shù)據(jù)摆霉,刪除了最后 2 條數(shù)據(jù)豪椿,重啟 MySQL 數(shù)據(jù)庫,又插入了一條數(shù)據(jù)携栋,此時 id 是幾?

一般情況下搭盾,我們創(chuàng)建的表的類型是InnoDB,如果新增一條記錄(不重啟mysql的情況下)婉支,這條記錄的id是8鸯隅;但是如果重啟(文中提到的)MySQL的話,這條記錄的ID是6向挖。因為InnoDB表只把自增主鍵的最大ID記錄到內(nèi)存中蝌以,所以重啟數(shù)據(jù)庫或者對表OPTIMIZE操作霎奢,都會使最大ID丟失。

但是饼灿,如果我們使用表的類型是MylSAM幕侠,那么這條記錄的ID就是8。因為MylSAM表會把自增主鍵的最大ID記錄到數(shù)據(jù)文件里面碍彭,重啟MYSQL后晤硕,自增主鍵的最大ID也不會丟失。

怎么確保一個集合不能被修改庇忌?

可以使用Collections.unmodifiableMap(map)定義舞箍;
或者使用 ImmutableList<Integer> guava定義

Iterator 和 ListIterator 的區(qū)別?

一.相同點

都是迭代器皆疹,當(dāng)需要對集合中元素進(jìn)行遍歷不需要干涉其遍歷過程時疏橄,這兩種迭代器都可以使用。

二.不同點

1.使用范圍不同略就,Iterator可以應(yīng)用于所有的集合捎迫,Set、List和Map和這些集合的子類型表牢。而ListIterator只能用于List及其子類型窄绒。

2.ListIterator有add方法,可以向List中添加對象崔兴,而Iterator不能彰导。

3.ListIterator和Iterator都有hasNext()和next()方法,可以實現(xiàn)順序向后遍歷敲茄,但是ListIterator有hasPrevious()和previous()方法位谋,可以實現(xiàn)逆向(順序向前)遍歷。Iterator不可以堰燎。

4.ListIterator可以定位當(dāng)前索引的位置掏父,nextIndex()和previousIndex()可以實現(xiàn)。Iterator沒有此功能爽待。

5.都可實現(xiàn)刪除操作损同,但是ListIterator可以實現(xiàn)對象的修改,set()方法可以實現(xiàn)鸟款。Iterator僅能遍歷膏燃,不能修改。

Queue 的 poll() 和 remove()

共同點:他們都是刪除一個元素何什;

不同點:如果隊列為空组哩,poll() 返回 null, 但是remove() 報 NoSuchElementException();

MySQL 執(zhí)行慢排查都有哪些手段?

  1. 使用 show processlist 命令查看當(dāng)前所有連接信息。
  2. 使用 explain 命令查詢 SQL 語句執(zhí)行計劃伶贰。
  3. 開啟慢查詢?nèi)罩局肱椋榭绰樵兊?SQL。

開啟慢查詢的方法有:

  1. 修改配置文件
[mysqld]  
long_query_time=2  

#5.5以前版本配置如下選項  
log-slow-queries="mysql_slow_query.log"  
#5.5及以上版本配置如下選項  
slow-query-log=On  
slow_query_log_file="mysql_slow_query.log"  

log-query-not-using-indexes  

第一句:定義超過多少秒的查詢算是慢查詢黍衙,這里定義的是2秒
第二句:定義慢查詢?nèi)罩镜穆窂剑ㄗ⒁馊绻?Linux 或 Mac 系統(tǒng)要考慮權(quán)限問題)
第三句:記錄下沒有使用索引的query

  1. 通過命令開啟慢查詢
mysql>set global slow_query_log=ON

mysql>set global long_query_time = 3600;
mysql>set global log_querise_not_using_indexes = ON;

// 寫一條慢查詢
SELECT SLEEP(10);

分析慢查詢:

MySQL 自帶了 mysqldumpslow 工具用來分析 slow query 日志

-s泥畅,表示按照何種方式排序,c琅翻、t位仁、l、r分別是按照記錄次數(shù)方椎、時間聂抢、查詢時間、返回的記錄數(shù)來排序(從大到刑闹凇)琳疏,ac、at闸拿、al空盼、ar表示相應(yīng)的倒序。
-t胸墙,是top n的意思我注,即為返回前面多少條數(shù)據(jù)。
-g迟隅,后邊可以寫一個正則匹配模式,大小寫不敏感励七。

mysqldumpslow -s c -t 10 host-slow.log

按照時間返回前10條里面含有左連接的sql語句
mysqldumpslow -s t -t 10 -g "left join" host-slow.log

jedis 和 redission 區(qū)別智袭?

  1. Jedis 和 Redisson 都是Java中對Redis操作的封裝。Jedis 只是簡單的封裝了 Redis 的API庫掠抬,可以看作是Redis客戶端吼野,它的方法和Redis 的命令很類似。
  2. Redisson 不僅封裝了 redis 两波,還封裝了對更多數(shù)據(jù)結(jié)構(gòu)的支持瞳步,以及鎖等功能,相比于Jedis 更加大腰奋。但Jedis相比于Redisson 更原生一些单起,更靈活。

redis 實現(xiàn)分布式鎖的原理和缺點

image.png

在超時時間內(nèi)獲取鎖劣坊,執(zhí)行setnx , 并設(shè)置超時時間嘀倒,否則休眠一段時間繼續(xù)請求拿鎖;

redis 實現(xiàn)分布式鎖的缺點:

  1. 單點故障,主從切換可能丟失鎖信息测蘑;
  2. 緩存易失性假如第一個線程設(shè)置了鎖灌危,但是之后觸發(fā)內(nèi)存淘汰機(jī)制很不幸淘汰了設(shè)置的鎖字段,接下來的線程在第一個線程沒有釋放鎖的情況下碳胳,也是重新設(shè)置鎖字段的勇蝙,這樣并不能保證鎖的安全性。

redis 如何進(jìn)行內(nèi)存優(yōu)化挨约?

  1. 優(yōu)化的key大小
  2. 盡可能使用Hash浅蚪,hash占用空間少;
  3. 選擇內(nèi)存占用和效率更好的數(shù)據(jù)結(jié)構(gòu)zipList

kafka 有幾種數(shù)據(jù)保存策略

Kafka Broker默認(rèn)的消息保留策略是:要么保留一定時間烫罩,要么保留到消息達(dá)到一定大小的字節(jié)數(shù)惜傲。

http://www.reibang.com/p/7008d2a1e320

時間和大小不論那個滿足條件,都會清空數(shù)據(jù)贝攒。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盗誊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子隘弊,更是在濱河造成了極大的恐慌哈踱,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梨熙,死亡現(xiàn)場離奇詭異开镣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)咽扇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進(jìn)店門邪财,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人质欲,你說我怎么就攤上這事树埠。” “怎么了嘶伟?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵怎憋,是天一觀的道長。 經(jīng)常有香客問我九昧,道長绊袋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任铸鹰,我火速辦了婚禮癌别,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘掉奄。我一直安慰自己规个,他們只是感情好凤薛,可當(dāng)我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著诞仓,像睡著了一般缤苫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上墅拭,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天活玲,我揣著相機(jī)與錄音,去河邊找鬼谍婉。 笑死舒憾,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的穗熬。 我是一名探鬼主播镀迂,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼唤蔗!你這毒婦竟也來了探遵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤妓柜,失蹤者是張志新(化名)和其女友劉穎箱季,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棍掐,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡藏雏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了作煌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掘殴。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖最疆,靈堂內(nèi)的尸體忽然破棺而出杯巨,到底是詐尸還是另有隱情,我是刑警寧澤努酸,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站杜恰,受9級特大地震影響获诈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜心褐,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一舔涎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逗爹,春花似錦亡嫌、人聲如沸嚎于。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽于购。三九已至,卻和暖如春知染,著一層夾襖步出監(jiān)牢的瞬間肋僧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工控淡, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留嫌吠,地道東北人。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓掺炭,卻偏偏與公主長得像辫诅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子涧狮,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,870評論 2 361