偽共享 FalseSharing (CacheLine,MESI) 淺析以及解決方案
起因 在閱讀百度的發號器 uid-generator 源碼的過程中,發現了一段很奇怪的代碼: 這里面有6個看上去毫無作用的volatile long變量(標紅)。如果這是我自己寫的代碼,我肯定會認為是我自己手抖寫多了。 但是作為百度的發號器,開源了這么久,如果是手抖早被fix了。肯定還是有深意的。于 ...
【小作業】為NLog自定義LayoutRenderer
長話短說 前文《解剖HttpClientFactory,自由擴展HttpMessageHandler》主要講如何為HttpClientFactory自定義HttpMessageHandler組件, 現在來完成課后的小作業: 將重點日志字段顯示到Nlog的LayoutRenderer上。 本文實現一個 ...
【并發編程】Object的wait、notify和notifyAll方法
本博客系列是學習并發編程過程中的記錄總結。由于文章比較多,寫的時間也比較散,所以我整理了個目錄貼(傳送門),方便查閱。 "并發編程系列博客傳送門" 方法簡介 wait方法 wait方法是Object類中的一個方法,調用這個方法會讓調用線程進入waiting狀態,直到另一個線程調用了當前對象上的not ...
Redis系列(五):Redis的RESP協議詳解
一、什么是RESP Redis是Redis序列化協議,Redis客戶端RESP協議與Redis服務器通信。Redis協議在以下幾點之間做出了折衷: 簡單的實現 快速地被計算機解析 簡單得可以能被人工解析 二、RESP協議描述 RESP協議在Redis 1.2中引入,但在Redis 2.0中成為與Re ...
mybatis精講(五)--映射器組件
[TOC] 前言 映射器之前我們已經提到了,是mybatis特有的組件: java+xml組合的方式。對于Java類和xml的編寫也很簡單。值得注意的是需要將Java編寫的mapper注冊到mybatis中來。之前的注冊的方式通過xml。到后續通過spirng來管理通過@Mapper就很方便了。 標 ...
一張圖講解單機FastDFS圖片服務器安裝步驟(修訂版)
前面已經講 "一張圖秒懂微服務的網絡架構" ,通過此文章可以了解FastDFS組件中單機安裝流程。 單機版架構圖 以下為單機FastDFS安裝步驟 一、環境準備 CentOS 7.X "libfastcommon" 請采用最新版本, 本次使用最新版本: libfastcommon 1.0.42.ta ...
負數為什么要用補碼來表示?
上篇文章講了“負數在計算機中是怎么存儲的”。看完之后,應該對原碼,反碼,補碼有了基本的了解了。 今天,我們深入探討一下,為什么計算機中要用補碼來表示負數? 首先,我們應該清楚,原碼是方便給人看的。看到一個數的原碼,我們就能根據符號位和后邊的二進制位,計算出這個數的實際值。為了簡單起見,我以一個字節8 ...
node.js多進程架構
node.js是單進程應用,要充分利用多核cpu的性能,就需要用到多進程架構。 作為web服務器,不能多個進程創建不同的socket文件描述符去accept網絡請求, 有經驗的同學知道,如果端口被占用了,再跑一個監聽該端口的服務就會報EADDRINUSE異常。那么問題來了,多進程架構如何去解決這個問 ...
你真的了解foreach嗎?
有C#基礎的,當問到循環有哪些,會毫不猶豫的說出的for、do while、foreach及while這幾種,但是到具體實際開發中,我們遇到一些問題,比如:到底選擇哪種?為什么選擇這種?哪種好像都可以?,其實在大多數情況下基本上可以通用,但是遇到比如Dictionary <[key] , [valu... ...
以Python為例的Async / Await的編程基礎
來源:Redislabs 作者:Loris Cro 翻譯:Kevin (公眾號:中間件小哥) 近年來,許多編程語言都在努力改進它們的并發原語。Go 語言有 goroutines,Ruby 有 fibers,當然,還有 Node.js 幫助普及的 async/await,這是當今使用最為廣泛的并發操作 ...
C# Lazy Loading
前言 按需加載對象延遲加載實際是推遲進行創建對象,直到對其調用后才進行創建初始化,延遲(懶加載)的好處是提高系統性能,避免不必要的計算以及不必要的資源浪費。 常規有這些情況: 對象創建成本高且程序可能不會使用它。 例如,假定內存中有具有 Orders 屬性的 Customer 對象,該對象包含大量 ...
【一起學設計模式】命令模式+模板方法+工廠方法實戰: 如何優雅的更新商品庫存...
前言 之前在我的博客([一枝花算不算浪漫][1])中已經更新過兩篇設計模式相關的內容 [【一起學設計模式】策略模式實戰一:基于消息發送的策略模式實戰][2] [【一起學習設計模式】策略模式實戰二:配合注解 干掉業務代碼中冗余的if else...][3] [【一起學設計模式】訪問者模式實戰:權限管理 ...
Coroutines in Android - One Shot and Multiple Values
在Android中, 我們用到的數據有可能是一次性的, 也有可能是需要多個值的.
本文介紹Android中結合協程(coroutines)的MVVM模式如何處理這兩種情況. 重點介紹協程`Flow`在Android中的應用. ...
nginx中proxy_pass小斜杠
nginx中proxy_pass小斜杠 1. 故事背景 相信做微信公眾號開發的朋友都知道,要想在微信中預覽效果,必須使用域名訪問.很多朋友使用內網穿透工具.不僅不好用還不穩定.所以,發揮臉厚吃天下的態度,向公司it申請了一個子域名指向了阿里云一臺ecs的80端口.可是后來,端口不夠用了.本著就近原則 ...
AutoCAD ObjectARX 二次開發(2020版)--4,使用ARX向導創建CAD二次開發項目(編程框架)--
手動創建ObjectARX應用程序非常麻煩,在此步驟中,將介紹ObjectARX向導。 在這里,我們將使用ObjectARX向導創建我們的ObjectARX應用程序。 本節的程序的需求是,接收CAD用戶的輸入。 首先,打開VS2017,新建項目 在左邊的樹形目錄里依次選擇 Visual C++ -- ...
[從今天開始修煉數據結構]樹,二叉樹,線索二叉樹,霍夫曼樹
前面我們已經提到了線性表,棧,隊列等數據結構,他們有一個共同的特性,就是結構中每一個元素都是一對一的,可是在現實中,還有很多一對多的情況需要處理,所以我們需要研究這種一對多的數據結構 —— 樹,并運用它的特性來解決我們在編程中遇到的問題。 一、樹的定義 1,樹Tree是n(n >= 0) 個結點的有 ...