原创 肯·湯普遜

肯尼斯·藍·湯普遜(英語:Kenneth Lane Thompson,1943年2月4日-)小名肯·湯普遜(英語:Ken Thompson),美國計算機科學學者和工程師。黑客文化圈子通常稱他爲“ken”[1]。在貝爾實驗室工作期間

原创 【理解字節序】

計算機硬件有兩種儲存數據的方式:大端字節序(big endian)和小端字節序(little endian)。 舉例來說,數值0x2211使用兩個字節儲存:高位字節是0x22,低位字節是0x11。 大端字節序:高位字節在前,低位字

原创 【Golang】關於GOLANG的chan

chan是golang中非常重要的一個東西,用來做goroutine的通信,因爲golang程序必然會有多個goroutine,如何同步這些goroutine就很重要了。 使用chan時有幾個心得: 首先,永遠是符號<-進行讀取

原创 【C++】如何看待C++前置聲明?

利益相關:在Google寫了4年C++。我是經歷了Google內部從『傾向於使用前置聲明』到『傾向於使用#include』的這個過程的。事實上在很多年前Google內部就開始了對這兩者的比較和探討。在2014年,內部有一篇總結性文

原创 【操作系統】內存分配的五種算法比較

最簡單的算法是首次適配(first fit)算法。存儲管理器沿着段鏈表進行搜索,直到找到一個足夠大的空閒區,除非空閒區大小和要分配的空間大小正好一樣,否則將該空閒區分爲兩部分,一部分供進程使用,另一部分形成新的空閒區。首次適配算法

原创 【操作系統】原語之經典問題 - “生產者-消費者問題”

生產者-消費者(producer-consumer)問題,也稱作有界緩衝區(bounded-buffer)問題。兩個進程共享一個公共的固定大小的緩衝區。其中一個是生產者,將信息放入緩衝區;另一個是消費者,從緩衝區中取出信息。(也可

原创 【Golang】sync/mutex源碼分析

先看數據結構: type Mutex struct { state int32 sema uint32 } state代表Mutex的狀態,sema是信號量。 以下常量表示了Mutex的狀態: const ( mutexL

原创 【Linux】RUD鏈表的實現(源碼)

/* SPDX-License-Identifier: GPL-2.0 */ #ifndef _LINUX_RCULIST_H #define _LINUX_RCULIST_H #ifdef __KERNEL__ /* *

原创 【HTML】清緩存的目的是什麼,如何實現?

緩存及優點 瀏覽器的緩存可以臨時存儲一些文件,因此當頁面切換或者再次加載相同頁面時就不需要去重新下載這些文件。服務端可以設置頭部告訴瀏覽器在一定時間內存儲這些文件。這樣不僅可以大幅度加快網站的速度還可以節省你的帶寬。 緩存帶來的問

原创 【Redis】簡單介紹redis哨兵機制

爲了解決redis主從複製模式致命缺點,當主節點宕機,影響整個系統運行,引入哨兵機制Sentinel。 Sentinel哨兵主要解決以下問題: 監控,監控每個節點以及哨兵 運行狀態報警,當發現某個節點或哨兵出現問題,通知其他哨兵

原创 【數據結構與算法】二分圖算法

首先什麼是二分圖 顧名思義就是能分成兩個部分的圖。 要注意的是,‘分’的是點並且這兩個集合(這裏我們稱作X集合和Y集合)內部所有的點之間沒有邊相連,也就是說X集合中任何兩點之間都不會有邊相連, Y亦然。 無向圖G爲二分圖的一個充要

原创 【操作系統】如何實現互斥?

共享數據的併發進程能夠正確和高效地進行協作。對於一個好的解決方案,需要滿足以下4個條件: 任何兩個進程不能同時處於其臨界區。 不應對CPU的速度和數量做任何假設。 臨界區外運行的進程不得阻塞其他進程。 不得使進程無

原创 【操作系統】多級頁表機制

第一種方法是採用多級頁表。一個簡單的例子如圖所示。在圖a中,32位的虛擬地址被劃分爲10位的PT1域、10位的PT2域和12位的Offset(偏移量)域。因爲偏移量是12位,所以頁面長度是4KB,共有220 個頁面。 引入多級頁表

原创 【C++】Effective C++/More Effective c++

Effective C++ 視 C++ 爲一個語言聯邦(C、Object-Oriented C++、Template C++、STL) 寧可以編譯器替換預處理器(儘量以 const、enum、inline 替換 #define)

原创 【操作系統】mutex_lock和mutex_unlock的彙編實現

由於thread_yield只是在用戶空間中對線程調度程序的一個調用,所以它的運行非常快捷。這樣,mutex_lock和mutex_unlock都不需要任何內核調用。通過使用這些過程,用戶線程完全可以實現在用戶空間中的同步,這些