写在前言   .Net Framework并不是Win 32 API 和COM上的一个抽象层.   某种程度上,它是自己的操作系统,有自己的内存管理器,自己的安全系统,自己的文件加载器,自己的错误处理机制,自己的应用程序隔离边界(AppDomains),自己的线程处理模型等. 随着多核计算机越来越普遍,线程处理,并发执行,并行结构,同步等方面的重要性日益凸显.   CLR的执行模型   公共语言运行时 CLR Common Language Runtime 是一个运行时环境,保证应用和底层操作系…
每个应用程序都要使用这样或者那样的资源,比如文件.内存缓冲区.屏幕空间.网络连接.数据库资源等.事实上,在面向对象的环境中,每个类型都代表可供程序使用的一种资源. 要使用这些资源,必须为代表资源的类型分配内存.   访问一个资源所需的具体步骤如下: #1,调用IL指令newobj, 为代表资源的类型分配内存.C#中使用new操作符,编译器就会自动生成该指令. #2,初始化内存,设置资源的初始状态,使资源可用.类型的实例构造器负责设置该初始状态. #3,访问类型的成员(可根据需要反复)来使用资源.…
面向对象编程一个好处就是“代码重用”,极大提高了开发效率.如是,可以派生出一个类,让它继承基类的所有能力,派生类只需要重写虚方法,或添加一些新的方法,就可以定制派生类的行为,使之满足开发人员的需求. 泛型(generic)是CLR和编程语言提供的一种特殊机制,它支持另一种形式的代码重用,即“算法重用”.   简单地说,开发人员先定义好一个算法,比如排序.搜索.交换.比较或转换等.但是,定义算法的开发人员并不设定该算法要操作什么数据类型:该算法可以广泛地应用于不同类型的对象.然后,另一个开发人员只…
事件处理实际上是一种具有特殊签名的delegate, 像这个样子:public delegate void EventHandler(object sender, EventArgs e);   类型定义事件成员,就可以通知其他对象发生了特定的事情.如果定义一个事件成员,意味着类型要提供一下能力: #1,方法可登记也可注销它对该事件的关注 #2,该事件发生时,登记了的方法会收到通知.   类型之所以能够提供事件通知功能,是因为类型维护了一个已经登记方法的列表.事件发生后,类型将通知列表中所有已登…
实例构造器和类(引用类型) 构造器(constructor)是允许将类型的实例初始化为良好状态的一种特殊方法.构造器方法在“方法定义元数据表”中始终叫.ctor. 创建一个引用类型的实例时: #1, 首先为实例的数据字段分配内存 #2, 然后初始化对象的附加字段(类型对象指针和同步块索引) #3, 最后调用类型的实例构造器来设置对象的初始状态   构造引用类型的对象时,在调用类型的实例构造器之前,为对象分配的内存总是先被归零.构造器没有显示重写的所有字段保证都有一个0或null值.和其它方法不同…
编程语言的基元类型   某些数据类型如此常用,以至于许多编译器允许代码以简化的语法来操纵它们. System.Int32 a = new System.Int32();  // a = 0 a = 1;   等价于: int a = 1; 这种语法不仅增强了代码的可读性,其生成的IL代码与使用System.Int32时生成的IL代码是完全一致的.   编译器直接支持的数据类型称为基元类型(primitive type).基元类型直接映射到Framework类库(FCL)中存在的类型.如C#中,i…
类型基础 所有类型都从System.Object派生   CLR要求所有对象都用new 操作符来创建. Employee e = new Employee("Constructor Parameters");   以下是 new 操作符所做的事情: #1, 计算类型及所有基类型(一直到System.Object, 虽然它没有定义自己的实例字段)中定义的所有实例字段需要的字节数. 堆上的每个对象还需要一些额外(overhead 开销成员)的成员 -- 即“类型对象指针”(type obj…
一.线程开销 操作系统创建线程是有代价的,其主要开销在下面列举出来了. 内存开销 线程内核对象 拥有线程描述属性与线程上下文,线程上下文占用的内存空间为 x86 架构 占用 700 字节.x64 架构 1240 字节 .ARM 架构 350 字节. 线程环境块(TEB) TEB 消耗一个内存页,占用 4KB内存. 用户模式栈. 用户模式栈存储传递给方法的局部变量与实参,并且还存储有一个地址用于当前方法返回的时候,线程应该从哪个地方继续执行.默认 Windows 分配保留 1MB 内存. 内核模式…
一.JavaScript中的基础概念 1.defer属性 一般我们在引用外部js文件的时候往往是将引用文件的位置放在标签当中,比如那么在标签中引入多个js文件时,浏览器会按照引入顺序加载执行这些引入的js文件,如果加载执行的这些js文件的时间比较长,那么页面就会处在等待期间.在下载引入的js文件时,现在的浏览器大多都是会并行下载的,不会去单线程的下载,这样提高了效率,但仍然会阻塞一些其他资源的下载比如说图片的下载,这样就因为js的下载执行而阻塞了UI渲染,会在页面上形成空白页面,这时我们可以有多…
前言 阿里云的云主机,采用的kvm,今天就花了点时间研究了下. 一.安装 官方文档参考:http://www.linux-kvm.org/page/HOWTO 二.快速建立一个基于vnc的虚拟机安装 桥接网卡 命令创建虚拟机 virt-install \ #--network bridge:br0 如果主机网卡不是桥接模式注释掉,默认走NAT模式 --name vm12 \ --ram= \ --vcpus= \ --disk path=./vm12.img,size= \ --graphics…
个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.基础概念 1.什么是事务 什么是事务?举个生活中的例子:你去小卖铺买东西,“一手交钱,一手交货”就是一个事务的例子,交钱和交货必须全部成功,事务才算成功,任一个活动失败,事务将撤销所有已成功的活动.   明白上述例子,再来看事务的定义:   事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败.   2.本地事务 在计算机系统中,更多的是通过关系型数据库来控制事务,…
认识CLR [<CLR via C#>读书笔记] <CLR via C#>读书笔记 什么是CLR CLR的基本概念 通用语言运行平台(Common Language Runtime,简称CLR)是微软为他们的.Net虚拟机所选用的名称.这是通用语言架构(简称CLI)的微软实现版本,它定义了一个代码运行的环境.CLR运行一种称为“通用中间语言”的字节码,这个是微软的通用中间语言实现版本.   CLR运行在微软的视窗操作系统上.查看通用语言架构可以找到该规格的实现版本列表.其中有一些版…
工作几年了才看,记录下笔记备忘. 章节 笔记 1.CLR的执行模型 公共语言运行时(Common Language Runtime,CLR) 源代码-->编译器检查语法和分析源代码-->托管模块(manged module)(含IL代码)-->运行时有JIT编译器生成cpu指令执行 托管模块由PE32|PE32+(64位).CLR头.元数据.IL代码(中间语言运行时转换成CPU指令) 组成 COM组件是一种规范,实现规范的DLL也可称为COM组件 . 托管模块中的元数据描述了模块中定义了…
<CLR via C#>读书笔记 什么是CLR CLR的基本概念 通用语言运行平台(Common Language Runtime,简称CLR)是微软为他们的.Net虚拟机所选用的名称.这是通用语言架构(简称CLI)的微软实现版本,它定义了一个代码运行的环境.CLR运行一种称为“通用中间语言”的字节码,这个是微软的通用中间语言实现版本. CLR运行在微软的视窗操作系统上.查看通用语言架构可以找到该规格的实现版本列表.其中有一些版本是运行在非Windows的操作系统中.(维基百科CLR) 以上定…
第十二章 泛型 2014-06-15 初始泛型 12.3 泛型基础结构 12.3.1 开放类型与封闭类型 12.3.2 泛型类型和继承 12.3.3 泛型类型同一性 12.3.4 代码爆炸 12.6 委托和接口的逆变和协变泛型类型实参 12.7 泛型方法 12.7.1 泛型方法和类型推断 12.9 可验证性合约束 12.9.1 主要约束 12.9.2 次要约束 12.9.3 构造器约束 参考 初识泛型[1][2] 返回 泛型(generic)是CLR和编程语言提供一种特殊机制,它支持另一种形式的…
<CLR via C#>读书笔记 之 计算限制的异步操作 2014-07-06 26.1 CLR线程池基础 返回 如25章所述,创建和销毁线程是一个比较昂贵的操作: 太多的线程也会浪费内存资源. 由于操作系统必须调度可运行的线程并执行上下文切换,所以太多的线程还有损于性能. 为了改善这个情况,CLR使用了代码来管理它自己的线程池.可将线程池想像成可由你的应用程序使用的一个线程集合.每个进程都有一个线程池,它在各个应用程序域(AppDomain)是共享的. 线程池是如何工作的: CLR初始化时,…
TCP-IP详解笔记8 TCP超时与重传 下层网络层(IP)可能出现丢失, 重复或丢失包的情况, TCP协议提供了可靠的数据传输服务. TCP启动重传操作, 重传尚未确定的数据. 基于时间重传. 基于确认信息. --- 比较高效. TCP在发送数据时会设置一个计时器, 若计时器超时仍未收到数据确认信息, 则会引起相应的超时或基于计时器的重传操作, 计时器超时称为重传超时(RTO). 快速重传推断出丢包. 经典方法: 平滑的RTT估计值. (加权移动平均, 低通滤波器) RTO超时重传时间. 快速…
TCP-IP详解笔记7 TCP: 传输控制协议(初步) 使用差错校正码来纠正通信问题, 自动重复请求(Automatic Repeat Request, ARQ). 分组重新排序, 分组复制, 分组丢失. 一个直接处理分组丢失的方法是重发分组, 直到它被正确接收. 对方是否已经收到分组. 接收放接收到 的分组是否与之前发送方发送的一样. 接收方给发送方发信号以确定自己已经接收到一个分组, 这种方法被称为确认(acknowledgment), 或ACK. 发送方发送一个分组, 然后等待一个ACK.…
TCP-IP详解笔记6 用户数据报协议和IP分片 UDP是一种保留消息边界的面向数据报的传输层协议. 不提供差错纠正, 队列管理, 重复消除, 流量控制和拥塞控制. 提供差错检测, 端到端(end-to-end)校验和. 使用UDP的应用程序需要做一些数据报发送和处理的控制工作. 每个被应用程序请求的UDP输出操作只产生一个UDP数据报, 发送一个IP数据报. UDP不提供差错纠正: 它把应用程序传给IP层的数据发送出去, 但并不保证它们能够到达目的地. UDP有可靠性和保护性的缺失. 无连接的…
TCP-IP详解笔记5 ICMPv4和ICMPv6: Internet控制报文协议 Internet控制报文协议(Internet Control Message Protocol, ICMP)与IP结合使用,以便提供与IP协议层配置和IP数据报处理相关的诊断和控制信息. ICMP即不属于网络层协议,也不属于传输层协议,而是属于两者之间. ICMP负责传递可能需要注意的差错和控制报文. ICMP报文是在IP数据报内被封装传输的. ICMP报文 ICMP报文可分为两大类: 有关IP数据报传递的IC…
TCP-IP详解笔记4 系统配置: DHCP和自动配置 每台主机和路由器需要一定的配置信息,配置信息用于为系统指定本地名称,及为接口指定标识符(如IP地址). 提供或使用各种网络服务,域名系统(DNS)和移动IP家乡代理. 手工获得信息,通过一个系统获得使用的网络服务,使用某种算法自动确定. TCP/IP网络中的每个接口都需要一个IP地址.子网掩码和广播地址(IPv4). 广播地址通常通过地址和掩码来确定. 系统只要有最基本的信息,就能与同一子网中的其他系统通信. 为了与本地子网之外的系统通信,…
TCP-IP详解笔记3 地址解析协议 IP协议的设计目标是为跨越不同类型物理网络的分组交换提供互操作. 网络层软件使用的地址和底层网络硬件使用的地址之间进行转换. 对于TCP/IP网络,地址解析协议(ARP)提供了一种在IPv4地址和各种网络技术使用的硬件地址之间的映射. ARP仅能用于IPv4,IPv6使用邻居发现协议,它被合并于ICMPv6. 网络层地址和链路层地址由不同部门分配的: 硬件地址,主地址由设备制造商定义,并存储在设备的永久性内存中,它不会改变. 网络接口的IP地址可能改变,是由…
http详解笔记 http,(HyperText Transfer Protocol),超文本传输协议,亦成为超文本转移协议   通常使用的网络是在TCP/IP协议族的基础上运作的,HTTP属于它的一个子集.   TCP/IP协议族的分层 TCP/IP 协议族按层次分别分 为以下 4 层:应用层.传输层.网络层和数据链路层. 应用层 应用层决定了向用户提供应用服务时通信的活动. TCP/IP 协议族内预存了各类通用的应用服务.比如,FTP(File Transfer Protocol,文件传输协…
TensorFlow学习笔记4-线性代数基础 本笔记内容为"AI深度学习".内容主要参考<Deep Learning>中文版. \(X\)表示训练集的设计矩阵,其大小为m行n列,m表示训练集的大小(size),n表示特征的个数: \(W\)表示权重矩阵,其大小是n行k列,n为输入特征的个数,k为输出(特征)的个数: \(\boldsymbol{y}\)表示训练集对应标签,其大小为m行,m表示训练集的大小(size): \(\boldsymbol{y'}\)表示将测试向量\(…
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 10------------------------------ tar与bzip2配套使用 方法:tar -cvf tarfile.tar.gz --use=bzip2 file   #注意,tar不能加z选项,否则冲突 功能:告诉tar使用某种压缩工具压缩归档文件 例子: [root@localhost tmp]tar cvf t…
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 9------------------------------ find命令 方法:find [路径] [选项] 表达式 说明:从指定路径开始向下搜素满足表达式的文件或目录,不指定目录路径时查找当前目录.当查找到用户不具有执行权限的目录时,屏幕将显示“权限不够”等提示信息. 主要表达式: -name 文件名 按文件名查找,可使用通配符…
[笔记]MySQL的基础学习 老男孩 MySQL  一 安装与配置 1 下载安装 官网:http://dev.mysql.com/downloads/mysql/ 下载相应版本的压缩包 解压压缩包至任意文件夹下,打开命令行端,切换至解压后的bin目录下,执行初始化命令. mysqld --initialize-insecure # 用户名 root 密码:空 此时要启动服务端需要在bin目录下面执行mysqld: E:\Program Files\mysql-8.0.11-winx64\bin\…
个人笔记,仅本人查阅使用,不保证正确. 零.微服务 微服务架构专注于应用解耦合,通过将应用彻底地组件化和服务化,每个微服务只包含一个非常小的功能,比如权限管理.日志收集等等.由这一组微服务组合起来,提供一个应用的完整功能. 这样的好处是: 开发更方便了.各微服务不再需要关注其他服务内的细节,直接调用 API 就行. 方便持续集成.升级只需要重新部署更新了的微服务,不需要更新整个应用. 方便拓展.遇到性能瓶颈时,只需要拓展瓶颈所在的微服务,不需要拓展整个应用. 当然,这也带来了一些难点: 业务型微…
第3章. 基础概念介绍 本章将介绍GStreamer的基本概念. 理解这些概念对于你后续的学习非常重要,因为后续深入的讲解我们都假定你已经完全理解了这些概念. 3.1. 元件(Elements) 元件(element)是GStreamer中最重要的概念. 你可以通过创建一系列的元件(Elements),并把它们连接起来,从而让数据流在这个被连接的各个元件(Elements)之间传输. 每个元件(Elements)都有一个特殊的函数接口,对于有些元件(Elements)的函数接口它们是用于能够读取…
前言 工作之中,我们习惯了碰到任务就直接去实现其业务逻辑,但是C#真正的一些基础知识,在我们久而久之不去了解巩固的情况下,就会忽视掉.我深知自己正一步步走向只知用法却不知原理的深渊,所以工作之余,一直想找一些能深入讲解C#基础知识和底层原理的书籍,有幸在网上看到了<.net之美>一书,(--张子阳作 )开始只是简单的做了阅读,但是越往下读,发现书中所述都是自己所薄弱或者是工作中遇到但是解释不清其原理的知识点,为了加深自己的印象,故萌生出写下读书笔记的想法,也是为自己的学习有个记录,方便日后查阅…