原创 【緩存】緩存雪崩、緩存擊穿、緩存穿透

緩存 緩存雪崩 就是緩存層裏的數據同一個時間點失效,那麼這些數據就會集中打向 MySQL。 緩存擊穿 緩存裏有一條數據,一條數據失效後也是穿過了 redis 打到了 MySQL。 緩存擊穿、緩存雪崩屬於緩存穿透的一種特殊表現形式。

原创 【每日一題】整數翻轉

整數反轉 給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。 示例 1: 輸入: 123 輸出: 321 示例 2: 輸入: -123 輸出: -321 示例 3: 輸入: 120 輸出: 21 注意: 假設

原创 【讀書筆記】大型網站架構模式

2、大型網站架構模式 每一個模式描述了一個在我們周圍不斷重複大聲的問題以及問題解決方案的核心。 分層 將系統橫向切分。 分層結構在計算機中無處不在,網絡的 ISO 7層分層,計算機硬件、操作系統、應用軟件也是一種分層。 網站系統中

原创 【每日一題】100.相同的樹

題目:https://leetcode-cn.com/problems/same-tree/ 解法 1,遞歸 很容易理解。 class Solution { public: bool isSameTree(TreeNode

原创 【每日一題】迴文數

https://leetcode-cn.com/problems/palindrome-number/ 迴文數 判斷一個整數是否是迴文數。迴文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。 示例 1: 輸入: 121

原创 【操作系統】線程同步、線程互斥、原子操作

文章目錄線程互斥引入原因解決線程互斥線程同步 線程互斥 引入 來看一段多線程的代碼,這是一個經典的賣火車票例子,西安火車站現在剩餘 10 張到北京西的票,有 3 個售票窗口在買票: // 銷售火車票 #include <stdio

原创 【操作系統】死鎖

文章目錄死鎖栗子死鎖概念產生死鎖的 4 個必要條件常見場景哲學家就餐問題如何避免死鎖 在 【操作系統】線程同步、線程互斥、原子操作 一問中,使用到了 鎖 這個東西,當一個線程進入臨界區後把門鎖起來,其他線程跑到這裏來發現鎖被使用了

原创 【每日一題】羅馬數字轉整數

https://leetcode-cn.com/problems/roman-to-integer/ 羅馬數字轉整數 羅馬數字包含以下七種字符: I, V, X, L,C,D 和 M。 字符 數值 I

原创 【讀書筆記】高性能網站架構-瞬時響應

4、高性能-瞬時響應 檢查請求各個環節的誒之,分析哪個環節響應時間不合理、超出預期;檢查監控數據,分析影響性能的主要因素是內存、磁盤、網絡、還是 CPU,是代碼問題還是架構設計不合理,或者系統資源確實不足。 性能測試指標 響應時間

原创 【讀書筆記】大型網站核心架構要素

大型網站核心架構要素 性能 瀏覽器端:瀏覽器緩存、頁面壓縮、合理頁面佈局、減少 Cookie 傳出、CDN。 應用服務器端:本地緩存、分佈式緩存、異步操作、服務器集羣。 代碼層面:多線程、改善內存管理等。 數據庫端:索引、緩存、S

原创 【操作系統】在 Linux 上編寫和調試多線程程序

文章目錄線程創建線程終止線程等待線程分離使用 gdb 調試多線程程序 本文的環境: Linux centos-7.shared 3.10.0-693.5.2.el7.x86_64 #1 SMP Fri Oct 20 20:32:5

原创 【讀書筆記】大型網站架構演化

大型網站架構演化 網站架構設計的目標 高可用、高性能、易擴展、可伸縮、安全。 網站的價值在於它能爲用戶提供什麼價值,在於網站能做什麼,不在於網站怎麼做的。 不是所有的問題都可以通過技術來解決。 有的時候調整業務也是很好的一種方式。

原创 【讀書筆記】高可用網站架構-萬無一失

5、高可用-萬無一失 廉價的服務器硬件故障是常態,網站的高可用架構設計的主要目的就是保證服務器硬件故障時服務依然可用、數據依然保存並能夠訪問。實現上述高可用方案的主要數據和服務的手段是冗餘備份和失效轉移。 應用層:應對高併發,負載

原创 【讀書筆記】網站伸縮性架構-永無止境

6、伸縮性-永無止境 架構的伸縮性設計 不同功能進行物理分離實現伸縮 縱向分離(分層後分離) 橫向分離(業務分割後分離) 單一功能通過集羣規模實現伸縮 當一頭牛拉不動車的時候,不要去尋找一頭更強壯的牛,而是用兩頭牛來拉車。 應

原创 【數據結構與算法】堆排序、堆化 heapify

文章目錄基礎知識堆的實現堆排序性能對比 關於堆的介紹已經一大堆了,這裏主要總結下筆記 && 對比下這幾個 O(nlogn) 的排序效率。 基礎知識 堆的基本知識: 大堆:堆頂元素大於左右孩子。 小堆:堆頂元素小於左右孩子。 堆的操