原创 Macbook Pro 副屏 - Gobigger 4k 便攜屏使用體驗

外出作業,mbp 13 英寸屏幕有點小,生產力跟不上,急需一個擴展屏。我的需求:便攜,屏幕清晰。經過綜合比較,最後在某寶入手了一款 Gobigger 4k 便攜屏。 🔥文章來源:wenfh2020.com 1. Gobigg

原创 [redis 源碼走讀] 事件 - 定時器

定時器是 redis 異步處理事件的一個十分重要的功能。redis 定時器功能由多個時間事件組成,事件由一個雙向鏈表維護。時間事件可以處理多個定時任務。 理解 redis 定時器,我們帶着問題,看看 redis 是怎麼處理的:

原创 strncpy 安全嗎?

測試一下看看,Linux 環境下,這三個函數(strcpy, strncpy, snprintf)哪個比較安全。 🔥文章來源:wenfh2020.com 1. 測試代碼 數據拷貝,當目標內存很小,源數據很大時,從測試結果看:

原创 十年工作總結

人生有多少個十年,總結是人生一個階段的覆盤。一首 《平凡之路》送給平凡的自己:——我曾經跨過山和大海,也穿過人山人海,我曾經擁有着的一切… 更精彩內容,可以關注我的博客:wenfh2020.com 興趣 興趣是最好的老師

原创 printf 從現象到本質

講真,要深入理解 printf,只能自己看源碼。666… 從現象到本質 前些時間,朋友問了一個問題: printf 的 %s 格式輸出,如果參數是其它類型的數據強制轉換爲 char* 的,結果會怎麼樣? 我想最好的方法莫過於馬上

原创 [nginx 源碼走讀] 內存池

[nginx 源碼走讀] 內存池 nginx 內存池(源碼)通過大小內存塊的鏈式管理邏輯大致如下圖(部分內存對齊的細節沒有添加進去): 內存池數據結構 小內存塊 小內存塊是通過鏈表進行管理,內存分配過程,涉及到結點上空閒內存匹

原创 [算法導論]歸併排序

時間複雜度 《算法導論》2.3.1 分治法。 歸併排序採用了分治法的遞歸排序。分治法:分解子問題,解決子問題,合併子結果。 分解:分解待排序的 nnn 個元素的序列各成 n2\frac{n}{2}2n​ 個元素的子列。 解決:使

原创 [算法導論]快速排序學習

基礎 看懂《算法導論》需要重溫數學知識。算法實現和推導是一個數學建模過程。 原理 對於包含 n 個數的輸入數組來說,快速排序是一種最壞情況時間複雜度爲 O(n2n^2n2) 的排序算法。雖然最壞情況的時間複雜度很差,但是快排通常

原创 [算法導論]堆排序

主要測試大堆,測試源碼在(github) 堆 堆可以看成一個近似的完全二叉樹,除了底層外,該樹是完全充滿的,而且是從左到右填充。 完全二叉樹適合用數組來存儲。用數組來存儲完全二叉樹是非常節省存儲空間的。å 最大堆中,是指除了

原创 [redis 源碼走讀] 壓縮列表(ziplist)

壓縮列表 點贊作者:redis 源碼,註釋很多而且很詳細。看壓縮列表源碼前,可以先看看 ziplist.c 文件頂部註釋,基本可以瞭解該數據結構設計。 壓縮列表ziplist是一個雙向鏈表,設計主要是爲了節省內存。保存字符串,數

原创 [redis 源碼走讀] zmalloc

內存管理 redis 內存管理實現,有三種方式: jemalloc (谷歌) tcmalloc (facebook) libc (系統) 其中 jemalloc, tcmalloc 是第三方的實現,libc 的實現相對簡單,沒

原创 [即時通訊]千人羣組消息管理

消息時序 理想狀態下,客戶端和服務端數據是一致的。實際情況,涉及到用戶上線或下線。(詳見下圖) 用戶在線:服務實時發送消息。 用戶離線:服務保存消息;用戶重新上線後,向服務獲取離線消息。 羣組離線消息數據(分頁獲取)

原创 redis 腦裂現象

腦裂 由於網絡問題,集羣節點失去聯繫。主從數據不同步;重新平衡選舉,產生兩個主服務。兩套主服務一起運行,導致數據不一致。 參考 redis 腦裂等極端情況分析 解決方案 比較簡單的方案,進行 redis 設置 // mas

原创 linux 常用命令

系統 機器啓動 poweroff reboot shutdown -r now 修改密碼 passwd root 查看 CPU cat /proc/cpuinfo | grep "processor" | wc -l 查看

原创 linux 下實現 itoa 轉二進制

linux 下,需要將整數轉化爲二進制,很自然想到 itoa,發現這函數竟然編譯不通過。標準庫中貌似有這個實現,不明白了~ 網上參考了帖子,下面實現代碼: 方法一 感覺這方法有點費腦,不是很直觀。 取模的方法一般都是從低位到高