原创 golang 內存控制

對象池 在每次開始執行垃圾回收時,都會清除所有已創建的臨時對象池中的值 內存暴漲

原创 golang sync模塊

鎖 重複加鎖會引發死鎖,重複解鎖會引發panic sync.Mutex作爲參數時的時候需要傳指針,不然就是拷貝,會引起加鎖失敗 條件變量 條件變量並不是被用來保護臨界區和共享資源的,它是用於控制想要訪問共享資源線程的順序

原创 golang channel和select

Channel 從根本上來說,channel只是一個數據結構,可以被寫入數據,也可以被讀取數據 所謂的發送數據到channel,或者從channel讀取數據,說白了就是對一個數據結構的操作 因爲協程原則上不會出現多線程編程中

原创 HDD和SSD的比較

HDD 當應用程序發出硬盤 IO 請求後,這個請求就會進入硬盤的 IO 隊列。如果前面有其他 IO,那麼這個請求可能需要排隊等待 HDD對於隨機訪問和順序訪問速度差距很大 主要因素是尋道時間 使用 HDD 的應用程序通常會進

原创 常見web攻擊方式

XSS跨站腳本攻擊 攻擊者在服務器返回的普通頁面中嵌入特殊的腳本代碼,那麼在普通用戶瀏覽這個網頁的時候,這個特殊的腳本代碼就得到了執行,於是用戶的 Cookie 通過請求的方式發送給了這個攻擊者指定的地址,這樣攻擊者就劫持了用

原创 直播基本原理

直播通信過程 主播客戶端在分享自己的音視頻媒體流之前,首先要向信令服務器發送“創建房間”的信令 信令服務器收到該信令後,給主播客戶端返回一個推流地址(CDN 網絡源站地址) 此時,主播客戶端就可以通過音視頻設備進行音視頻數據的採

原创 實時通信基本原理

在線教育、音視頻會議這類直播屬於實時互動直播,主要考慮傳輸的實時性,因此一般使用 UDP 作爲底層傳輸協議而娛樂直播對實時性要求不高,更多關注的是畫面的質量、音視頻是否卡頓等問題,所以一般採用 TCP 作爲傳輸協議 我們稱前

原创 緩存基本原理

緩存的作用不僅在於更快地獲取到數據,還可以避免源站被大量請求擊穿(例如數據庫) 從緩存視角看URL到IP的映射過程 先查詢瀏覽器內部的“域名-IP”緩存,如果曾經使用該瀏覽器訪問過這個域名,那麼很有可能命中緩存 接着會查詢操作

原创 Chrome的調試與架構

調試 功能 請求用時分佈 超完整的Chrome瀏覽器客戶端調試大全 架構 多線程 多線程也就是單進程,瀏覽器是指瀏覽器的所有功能模塊都是運行在同一個進程裏,這些模塊包含了網絡、插件、JavaScript 運行環境、渲染引

原创 DNS協議

使用53端口 域名不區分大小寫 底層爲UDP協議而不是TCP協議 如果很短時間內沒有響應返回,就再次發送記錄 重複一定次數後嘗試另一個服務器 每次查詢報文都包含一個標識符,並複製到響應中,以防止混淆查詢結果 爲什麼瀏覽器上

原创 golang 內置命令

命令列表 build compile packages and dependencies clean remove object files doc show documentatio

原创 賬戶體系(SSO, JWT與OAuth)

SSO 單點登錄(SSO: Single Sign-On) 一套公用的用戶體系,用戶只要登陸之後,就能夠訪問所有的系統 比如人力資源,代碼管理等 也用於解決跨域問題 JWT JWT就像一個臨時的用戶憑證,代替了

原创 go context

爲什麼需要context context可以主要用來在goroutine中傳遞上下文信息 包括取消信號,超時時間,截止時間,k-v等 利用context關閉樹狀goroutine鏈 當go服務處理一個請求時,可以需要開多

原创 golang 編譯

跨平臺 GOOS=linux GOARCH=amd64 go build <packageName> 條件編譯 go 不像c一樣能夠通過宏定義實現一個文件內部分代碼的條件編譯,他只支持文件級別的條件編譯 方法一: 文件開始的編

原创 SSH端口轉發

端口轉發兩大功能 加密SSH Client 端至SSH Server 端之間的通訊數據 突破防火牆或內網的限制完成一些之前無法建立的TCP 連接 正向端口轉發 L表示正向轉發;-N 表示非不執行命令,只做端口轉發;-f