經歷了滴滴的幸福裁員潮,又迎來了人人車硬剛勞動法,出現了蘇寧管培生巨嬰,伴隨著網易的大面積裁員,各大企業一波未平一波又起。

對於技術在手,說走就走的IT工程師而言,裁員不就是換個公司繼續填坑嗎?大家都習以為常了。為了進入更好的坑,IT工程師不斷的提升技術,不斷提升能力。

小編作為一名資(diao)深(si)級工程師,總結了5個經典面試題

一 redis分散式鎖過期時間內沒執行完 怎麼解決?

分散式鎖超時沒有執行完,是沒有辦法避免的,因為鎖過期不會通知客戶端,只能盡量不在鎖內執行長任務; 從業務上解決的話,需要為鎖值加版本號。刪除前判斷版本號;

二 rocketmq 延遲消息怎麼實現的?

RocketMQ提供了延遲消息類型,簡單來說就是生產者在發送消息的時候指定一個延遲時間,當達到延遲時間之後消息才能被投送到消費者。

生產者將延遲消息發送到Broker,Broker區分普通消息與延遲消息

消息如何保證不被消費者拉取到的(RocketMQ將消息以SCHEDULE_TOPIC_XXXX為topic將延時消息持久化,等到達延時消息之後再以原有的topic重新保存)

對於延遲消息,常用方法是用時間堆來實現的消息隊列保存消息事件,額外線程定時檢查堆頂進行消息投放。

三 myisam 索引數據結構是什麼?

MYISAM使用b+tree,索引文件和數據文件分離。索引文件僅保存記錄所在頁的指針(物理位置),通過這些地址來讀取頁,進而讀取被索引的行。

四 消息隊列的使用場景

消息隊列主要用於業務非同步解耦,流量請求削峯,業務通信,廣播組播等事務。

五 redis單線程為什麼這麼快?

redis數據操作基於內存操作,而不是基於磁碟IO操作的,所以不需要等待磁碟IO就緒。單線程不需要出現線程切換的代價,故redis能夠採用單線程。與之相對的,mysql數據操作是基於磁碟IO的,單線程是絕不可能的。至於快,內存操作本來就快的,這與單線程和多線程沒有關係的。

歡迎評論&關注


推薦閱讀:
相關文章