ARTS挑戰打卡第四周

 堅持就是勝利

Algorithm-一週至少一道算法題

Review-閱讀並點評至少一篇英文技術文章

Tip-學習至少一個技術技巧,總結和歸納在日常工作中所遇到的知識點

Share-分享一篇有觀點和思考的技術文章

01-Algorthm

leetcode-349: https://leetcode.com/problems/interp-of-two-arrays/

思路:空間換時間

使用Map/Set保存第一個數組的數字,遍歷第二個數組,如果數字在Map存在,說明是交集,加入返回集合

leetcode-350: https://leetcode.com/problems/interp-of-two-arrays-ii/

思路:與第一題類似,但是這裏重複的數也要算上。排序後,維護兩個下標,同時遍歷兩個數組,如果相等,加入返回集合,否則,移動較小值對應的下標

02-Review

——————

https://programmingisterrible.com/post/176657481103/repeat-yourself-do-more-than-one-thing-and

DRY-Don't Repeat Yourself,不僅僅是不寫重複的代碼塊,更重要的是不寫重複功能/職責的代碼塊。要反覆地去優化代碼,抽象代碼塊。

代碼模塊化不僅僅是簡單的按功能將一個大的代碼拆分爲幾個小函數,或將相同的功能分佈在一起,而是研究如何使方法保持分離並限制整個代碼庫間的協調。即知道哪些代碼塊需要互相交互,哪些需要共享資源,哪些需要共同承擔職責,更重要的是,存在哪些外部約束。

關於重寫

一項重寫工作如果三個月了都沒有下文,大概率就是永遠都不會去做了。

重寫代碼一直都是一個很難的話題,因爲業務需要快速發展,代碼會越來越多,想優化的東西又太多,但是卻想這些優化快速完成,不要重寫代碼的含義應該是“不要追求快速的重寫”。

03-Tip

——————

MySQL的四種事務隔離級別:

  • RU(Read UnCommitted):讀未提交,允許出現髒讀,幻讀

  • RC(Read Committed):讀提交,不允許髒讀,只讀取已經提交事務的數據,多次讀取會出現不一樣的結果,稱爲不可重複讀。

  • RR(Repeatable Read):可重複讀,同樣的select,多次讀取的結果一樣,可能會出現幻讀

  • SERIALIZABLE:序列化,讀操作完全串行化,加了隱形的讀共享鎖,避免了髒讀、不可重複讀和幻讀的問題

隔離級別的問題

隔離級別不可重複讀
讀未提交可以出現可以出現可以出現
讀提交不允許出現可以出現可以出現
可重複不允許出現不允許出現可以出現
序列化不允許出現不允許出現不允許出

MySQL的鎖類型:

  • 共享鎖(S鎖):允許事務讀取一行數據

  • 獨佔鎖(X鎖):允許事務刪除或更新一行數據

S 鎖和 S 鎖是兼容的,X 鎖和其它鎖都不兼容。

爲了實現多粒度的鎖機制,InnoDB 還有兩種內部使用的意向鎖,由 InnoDB 自動添加,且都是表級別的鎖。

意向共享鎖(IS):事務即將給表中的各個行設置共享鎖,事務給數據行加 S 鎖前必須獲得該表的 IS 鎖。

意向排他鎖(IX):事務即將給表中的各個行設置排他鎖,事務給數據行加 X 鎖前必須獲得該表 IX 鎖。

InnoDB 存儲引擎使用三種行鎖的算法用來滿足相關事務隔離級別的要求。

Record Locks

該鎖爲索引記錄上的鎖,如果表中沒有定義索引,InnoDB 會默認爲該表創建一個隱藏的聚簇索引,並使用該索引鎖定記錄。

Gap Locks

該鎖會鎖定一個範圍,但是不包括記錄本身。可以通過修改隔離級別爲 READ COMMITTED 或者配置 innodb_locks_unsafe_for_binlog 參數爲 ON。

Next-key Locks

該鎖就是 Record Locks 和 Gap Locks 的組合,即鎖定一個範圍並且鎖定該記錄本身。InnoDB 使用 Next-key Locks 解決幻讀問題。

死鎖是指兩個或兩個以上的進程在執行過程中,由於競爭資源或者由於彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。在MySQL中,就是兩個或兩個以上的事務在互相等待。

04-Share

—————

Blog-爲什麼需要分佈式系統(見推送第二篇文章)

參考鏈接

Innodb中的事務隔離級別和鎖的關係

https://tech.meituan.com/2014/08/20/innodb-lock.html

MySQL 事務隔離級別和鎖

https://www.ibm.com/developerworks/cn/opensource/os-mysql-transaction-isolation-levels-and-locks/index.html

原創文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知。

如果本文對你有幫助,順手點個在看吧,謝謝

更多精彩內容,請關注個人公衆號。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章