原创 C#與CLR學習筆記(4)—— 值類型與引用類型

目錄 值類型與引用類型的關係 值類型與引用類型的使用區別 裝箱與拆箱 造成裝箱的其他情況 參考文獻 值類型與引用類型的關係 在CLR(或者說CTS)中,引用類型包括以下幾種: 類類型(Class) 接口類型(Interface) 委託類型

原创 Program Files(x86) 與 SysWow64

如果用的是 64 位 Windows,你會發現硬盤上有兩個名爲 Program Files(x86)和 SysWOW64 的新文件夾,它們在 32 位 Windows 上不存在。 它們有什麼用呢? 什麼是WOW64 64位的 Wi

原创 .gitignore 文件用法

Git是跟蹤項目中所有文件的好工具,但是,您會希望在項目的整個生命週期中不要跟蹤某些文件及其變更。例如: 系統文件(i.e. Mac系統的.Ds_Store) 應用程序配置文件(i.e. app.config, .env) 構

原创 使用System.Text.Decoder類來處理“流文本”

何爲“流文本”? 他就像“流媒體”,衆所周知“流媒體”可以邊傳送數據邊將已接收的不完整的數據預覽給接收方。“流文本”亦如此。 數據傳輸中的數據並不會按期望以一個整體直接被接收的,尤其是數據量比較大的情況(或者接收方接收速度有限的情

原创 C#與CLR學習筆記(3)—— 類型

目錄 1 基類型與類型轉換 1.1 System.Object的方法 1.2 使用 new 創建對象的過程 1.3 類型轉換 1.4 使用 is 和 as 進行類型轉換 1.5 命名空間 2 類型、對象、棧、堆在運行時的相互關係 類型對象

原创 字符編碼(Encoding)和字節順序標記(BOM)

什麼是字符順序標記(BOM) 計算機內部數據存儲都是二進制的,只有知道一段數據的二進制存儲格式,這段數據纔有意義。所謂的文本文件其實就是用一種特定的字符編碼來將二進制源數據轉換成文字。多數文本編輯器都可以編輯不同編碼的文本文件,那

原创 Span —— .NET高效運行的新基石

原文:https://msdn.microsoft.com/en-us/magazine/mt814808.aspx 目錄 Span 是什麼鬼? Span 是如何實現的? Memory 又是什麼鬼? Span 和 Memory 是如何與

原创 LINQ 延遲查詢的原因

延遲查詢 在運行 LINQ 中的某些擴展方法進行集合的查詢時,查詢不會立即運行。只有當運行至 foreach 對查詢結果進行遍歷時,或者對查詢結果調用 ToList() 方法等情況時,查詢纔會真正的運行。 我們以 Where()

原创 基於Token的身份驗證的原理

目錄 1 發展史 2 Cookie 3 Session 3.1 cookie和session的區別 4 Token 4.1 傳統方式——基於服務器的驗證 4.2 基於服務器驗證方式暴露的一些問題 4.3 基於Token的驗證原理 4.5

原创 C#與CLR學習筆記(2)—— 程序集的部署、查找與強名稱

本文是《CLR via C#》一書第2章和第3章的要點總結。 上篇內容:《CLR via C#》讀書筆記(1)—— 程序集的結構與CLR的啓動 目錄 程序集的生成與部署 程序集的生成 響應文件 語言文化 應用程序的管理配置與文件探測 程序

原创 C#與CLR學習筆記(8)—— 通過反射調用泛型方法

1 調用非泛型方法 通過反射創建一個對象,然後調用其方法的一般過程爲: 加載程序集,並獲取類型 通過類型,實例化一個類型對象(調用靜態方法則不必實例化) 根據名稱、方法簽名、可訪問性等約束,獲取要調用的方法 通過 Invoke

原创 C#與CLR學習筆記(7)—— 泛型與泛型約束

文章目錄1 泛型概述1.1 含義1.2 泛型的繼承1.2.1 泛型類型的繼承1.2.2 泛型的類型參數的繼承2 泛型約束2.1 編譯器對泛型參數的驗證2.2 泛型約束的類型2.3 其他驗證問題參考文獻 1 泛型概述 1.1 含義

原创 IO 模型知多少 (1)

文章目錄1. 引言2. I/O 的定義2.1 計算機視角2.2 程序視角3. IO 模型之阻塞 I/O (BIO)4. IO 模型之非阻塞 I/O (NIO)5. IO 模型之 IO 多路複用5.1 IO多路複用之select/

原创 IO 模型知多少 (2)

文章目錄1. 引言2. Socket 編程基礎2. 同步阻塞 IO3. 同步非阻塞 IO4. IO 多路複用5. 驗證 I/O 模型5.1 驗證同步阻塞I/O發起的系統調用5.2 驗證I/O多路複用發起的系統調用6. 總結 1.

原创 struct實例字段的內存佈局(Layout)和大小

背景 在C/C++中,struct類型中的成員的一旦聲明,則實例中成員在內存中的佈局 (Layout) 順序就定下來了,即與成員聲明的順序相同,並且在默認情況下總是按照結構中佔用空間最大的成員進行對齊(Align);當然我們也可以