深拷贝.浅拷贝 如果拷贝的时候共享被引用的对象就是浅拷贝,如果被引用的对象也拷贝一份出来就是深拷贝.(深拷贝就是说重新new一个对象,然后把之前的那个对象的属性值在重新赋值给这个用户) using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TestC…
1.  单元模式和Windows Forms 单元模式线程是一个自动线程安全机制, 非常贴近于COM——Microsoft的遗留下的组件对象模型.尽管.NET最大地放弃摆脱了遗留下的模型,但很多时候它也会突然出现,这是因为有必要 与旧的API 进行通信.单元模式线程与Windows Forms最相关,因为大多Windows Forms使用或包装了长期存在的Win32 API——连同它的单元传统. 单元是多线程的逻辑上的“容器”,单元产生两种容量——“单的”和“多的”.单线 程单元只包含一个线程:…
原文://http://www.cnblogs.com/miniwiki/archive/2010/06/18/1760540.html 文章系参考转载,英文原文网址请参考:http://www.albahari.com/threading/ 作者 Joseph Albahari,  翻译 Swanky Wu 中文翻译作者把原文放在了"google 协作"上面,GFW屏蔽,不能访问和查看,因此我根据译文和英文原版整理转载到园子里面. 本系列文章可以算是一本很出色的C#线程手册,思路清晰…
1.FluentApi简介 在这里提供了一个fluentapi基础的DEMO然后咱们在进一步的学习,直接上干货. 第一步在数据库创建一个表:person 第二步:新建控制台程序FluentAPI 第三步:创建person 类 第三步:创建pensonConfig 类 第四步:创建DBContext 第五步:应用 下面我们进行高级学习  什么是Fluent API? 官方答案:EF 中内嵌的约定将 POCO 类映射到表.但是,有时您无法或不想遵守这些约定,需要将实体映射到约定指示外的其他对象,所以…
Xml 简介(可扩展标记语言) XML优点:容易读懂:格式标准任何语言都内置了XML分析引擎,不用单独进行文件分析引擎的编写. Xml就是用一种格式化的方式来存储数据,我们可以通过用记事本打开. .net程序中的一些配置文件app.config.web.config文件都是xml文件. XML语法规范:标签/节点(Tag/Node).嵌套(Nest).属性.标签要闭合,属性值要用""包围,标签可以互相嵌套 XML树,父节点.子节点.兄弟节点(siblings) xml编写完成以后可以用…
1.同步要领 下面的表格列展了.NET对协调或同步线程动作的可用的工具:                       简易阻止方法 构成 目的 Sleep 阻止给定的时间周期 Join 等待另一个线程完成                       锁系统 构成 目的 跨进程? 速度 lock 确保只有一个线程访问某个资源或某段代码. 否 快 Mutex 确保只有一个线程访问某个资源或某段代码.可被用于防止一个程序的多个实例同时运行. 是 中等 Semaphore 确保不超过指定数目的线程访问某…
.net framework的类库中提供了三个可以用于序列化和反序列化的类,分别为BinaryFormatter.SoapFormatter和XmlSerializer. BinaryFormatter的命名空间为System.Runtime.Serialization.Formatters.Binary,位于程序集mscorlib.dll中. SoapFormatter的命名空间为System.Runtime.Serialization.Formatters.Soap,位于程序集System.…
Func.Action 一.如果不是声明为泛型委托 委托的类型名称不能重载,也就是不能名字相同类型参数不同 二..Net中内置两个泛型委托Func.Action(在“对象浏览器”的mscorlib的System下),日常开发中基本不用自定义委托类型了. 三.Func是有返回值的委托:Action是没有返回值的委托 四..Action<T>是.NET Framework内置的泛型委托,可以使用Action<T>委托以参数形式传递方法,而不用显示声明自定义的委托.封装的方法必须与此委托…
字符串不可变性,字符串的‘暂存池’两个特性 字符串是引用类型,程序中会存在大量的字符串对象,如果每次都创建一个字符串对象,会比较浪费内存.性能低,因此CLR做了“暂存池”(拘留池,缓冲池,暂存池),在一些情况下对于字符串对象进行了重用. string s1 = "rupeng"; string s2 = "rupeng"; string s3 = "ru" + "peng"; string s4 = new string(s1…
查看判断两个对象是否是同一个对象要用:object.ReferenceEquals(); 因为“==”默认值是比较两个对象是不是同一个对象.所以有时候两个对象的内容相等,但是比较后还是false. Object的Equals方法也比较两个变量指向的是否同一个对象:对象如果override 了Equals方法,就可以进行内容的相同比较. 默认情况下==不是调用Equals方法,需要重载==运算符: String等这些类是重写了Equals方法. 面试题:下面的代码有几个字符串对象 String s…
正则表达式 正则表达式是对字符串进行匹配的语法,像name like '%李%'一样,定义了一些特殊的“元字符”,用来判断一个字符串是否满足某个规则.正则表达式非常深,编译器都是基于正则表达式,掌握基本使用即可. 基本元字符 字 符 描 述 \ 转义字符,将一个具有特殊功能的字符转义为一个普通字符,或反过来 ^ 匹配输入字符串的开始位置 $ 匹配输入字符串的结束位置 * 匹配前面的零次或多次的子表达式 + 匹配前面的一次或多次的子表达式 ? 匹配前面的零次或一次的子表达式 {n} n是一个非负整…
两个现实中的例子:1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的生理情况.这是如何做到的呢?B超是B型超声波,它可以透过肚皮通过向你体内发射B型超声波,当超声波遇到内脏壁的时候就会产生一定的“回音”反射,然后把“回音”进行处理就可以显示出内脏的情况了(我不是医生也不是声学专家,不知说得是否准确^_^).2.地球内部结构:地球的内部结构大体可以分为三层:地壳.地幔和地核.地壳是固体,地核是液体,地幔则是半液半固的结构(中学地理的内容,大家还记得吧?).如何在地球表面不用深…
案例:定一个Person类,定一个监听年龄变化的事件,当本命年的时候祝贺一下.触发事件的地方要判断一下是不是事件null 事件语法:event Mydelegate mdl; 加了event关键字实现事件机制的好处:用了event事件,不可以修改事件已经注册的值:不可以冒充进行事件通知了.只能+=.-=! using System; using System.Collections; using System.Collections.Generic; using System.Linq; usi…
最近由于项目需要,刚刚学完了Action委托和Func<T>委托,发现学完了委托就必须学习lambda表达式,委托和Lambda表达式联合起来,才能充分的体现委托的便利.才能使代码更加简介.优雅. 函数式编程,在Entity framework编程中用的很多 1.Action<int> a1 = delegate(int  i) { Console.WriteLine(i); }; 可以简化成(=>读作goes to): 2.Action<int> a2 = (i…
委托是一种可以指向方法的数据类型,可以声明委托类型变量. 声明委托的方式:delegate返回值类型   委托类型名(参数) 比如delegate void MyDel(int n) 注意这里的除了前面的delegate,剩下部分和声明一个函数一样,但是Mydel不是函数名,而是委托类型名 如何创建委托类型的对象:MyDel sp = new Mydel (SayHello)//SayHello需要和MyDel的参数返回值一样:sp这个委托变量就指向SayHello这个方法.注意不要写成new…
普通参数是“值类型传递拷贝,引用类型传递引用”,但是都不能在函数内部修改外部变量的指向(p.Age=5不是可以吗?),这时候要用ref或者out(相当于把变量都传进去了),他们的作用不同:ref的作用“方法内部修改外部变量的引用”:out的作用“方法内部给外部变量初始化,相当于一个函数多个返回值”. 1.使用ref型参数时,传入的参数必须先被初始化,方法中可以不赋值.对out而言,必须在方法中对其完成初始化,方法外部不用初始化,初始化也没用. 2.使用ref和out时,在方法的参数和执行方法时,…
拆箱.装箱 值类型赋值给Object类型变量的时候,会发生装箱:包装成Object.ValueType不也是继承自Object吗(CLR内部处理): Object类型变量赋值给值类型赋值的时候会发生拆箱,需要做显式转换. 下面几句代码有没有错,解释一下内存是怎么变化的 int i=10; object obj = i;//装箱 内存由栈内存转为堆内存 int j = obj;//错误 long j = (long)obj;//错误 拆箱的时候要和装箱时的数据类型一样 int j = (int)o…
CTS.CLS.CLR 1. .Net平台下不只有C#语言,还有VB.Net.F#等语言.IL是程序最终编译的可以执行的二进制代码(托管代码),不同的语言最终都编译成标准的IL(中间语言,MSIL):这样C#可以调用VB.Net写的程序集(Assembly,dll.exe).在.Net平台下:不同语言之间可以互联互通.互相调用 2.不同语言中的数据类型各不相同,比如整数类型在VB.Net中是Integer.C#中是int..Net平台规定了通用数据类型(CTS,Common Type Syste…
结构体 在平时的开发中很少自己去写结构体,他是一种值类型的数据.对于结构,不像类那样存在继承,一个结构体不能从另一个结构或类继承.但是结构体从基类Object继承. 语法: //struct是定义结构体的关键字 Struct MyStruct { Public string Name{get;set;} Public int Age{get;set;} }     值类型和引用类型 什么是“引用类型”:引用类型派生自System.Object 什么是“值类型”:值类型均隐式派生自System.V…
1.密闭类是修饰为sealed的类, sealed不能有子类.一般只有系统中的一些基本类声明为sealed.面试题:是否可以编写一个类继承自String类? 答:不能,因为string被声明为了sealed了 2.静态类:声明为static的类,不能实例化,只能定义static成员.通常用他定义扩展方法 3.C#3.0特性:扩展方法.声明静态类,增加一个静态方法,第一个参数是被扩展类型的标记为this,然后在其他类中可以直接调用,本质上还是对静态方法调用提供的一个“语法糖”,也可以用普通静态方法…
基础知识补充 索引 器 没有名字 ,索引器的内部本质 (ILSpy的IL模式下看)类型 this[参数]{get;set;} 可以是只读或者只写(在get或者set前加上private) 字符串是只读索引,因此不能对字符串中的某个字符进行从新赋值,即只能char ch = s[5];不能s[5]=‘a’. 开发中自己写的机会很少,一道面试题:C#中索引器是否只能根据数字进行索引?是否允许多个索引器参数?答案:可以进行非数字索引,可以允许多个参数进行索引 using System; using S…
1. 深拷贝 1.1 类型1 注意: d没有改变, 因为d所拷贝的数据没有改变, 而是c往后添加数据. 1.2 类型2: 元组 如果copy.copy拷贝的是元组是深拷贝! 不会进行浅拷贝, 仅仅是指向, 因为元组是不可变类型, 因此用copy.copy的时候会自动判断. 2. 浅拷贝 2.1 类型1 2.2 类型2 如果 用copy.copy, copy.deepcopy对一个全部是不可变类型的数据进行拷贝, 那么他们结果相同, 都是引用指向 如果 拷贝的一个拥有 可变类型的数据, 即使元组是…
引用类型的深拷贝.浅拷贝在前端领域一直是个很重要的知识点,不仅在业务中频繁使用,也是面试官们喜欢考的的知识点之一.本篇将封装引用类型的深拷贝.浅拷贝方法,并解决在封装过程中出现的问题. 一.浅拷贝 浅拷贝一般比较简单,缺点也很明显,引用类型的属性并不是真正的拷贝,而是拷贝的引用地址,改变一个当中的属性值,另一个也跟着变化. 方法封装: /** * 浅拷贝 * @param {*} target * @returns */ export function clone (target) { if (…
注:本文是[ASP.NET Identity系列教程]的第三篇.本系列教程详细.完整.深入地介绍了微软的ASP.NET Identity技术,描述了如何运用ASP.NET Identity实现应用程序的用户管理,以及实现应用程序的认证与授权等相关技术,译者希望本系列教程能成为掌握ASP.NET Identity技术的一份完整而有价值的资料.读者若是能够按照文章的描述,一边阅读.一边实践.一边理解,定能有意想不到的巨大收获!希望本系列博文能够得到广大园友的高度推荐. $(document).rea…
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary { display: block } audio,canvas,progress,video { display: inline-block; vertical-align: baseline } audio:not([co…
任何一个复杂的系统,用户感知到的都只是冰山一角,数据库也不例外. 前两篇文章介绍了 TiKV.TiDB 的基本概念以及一些核心功能的实现原理,这两个组件一个负责 KV 存储,一个负责 SQL 引擎,都是大家看得见的东西.在这两个组件的后面,还有一个叫做 PD(Placement Driver)的组件,虽然不直接和业务接触,但是这个组件是整个集群的核心,负责全局元信息的存储以及 TiKV 集群负载均衡调度. 本篇文章介绍一下这个神秘的模块.这部分比较复杂,很多东西大家平时不会想到,也很少在其他文章…
在这我们将关系模型简单理解为 Table 和 SQL 语句,那么问题变为如何在 KV 结构上保存 Table 以及如何在 KV 结构上运行 SQL 语句. 假设我们有这样一个表的定义: CREATE TABLE User { ID int, Name varchar(20), Role varchar(20), Age int, PRIMARY KEY (ID), Key idxAge (age) }; SQL 和 KV 结构之间存在巨大的区别,那么如何能够方便高效地进行映射,就成为一个很重要的…
From http://blog.csdn.net/sunstone/article/details/5282666 DataSnap高级技术(7)—TDSServerClass中Lifecycle生命周期三种属性说明 Lifecycle 三种属性: Session.Invocation.Server 这三种属性都用在什么情况,有什么要注意的事项,Delphi2010中罕有说明. 如果乱用这三种属性,你的服务程序有可能崩溃,数据混乱,内存占用大,效率低等问题! 下面我对这三种属性的使用环境逐一介…
引言 数据库.操作系统和编译器并称为三大系统,可以说是整个计算机软件的基石.其中数据库更靠近应用层,是很多业务的支撑.这一领域经过了几十年的发展,不断的有新的进展. 很多人用过数据库,但是很少有人实现过一个数据库,特别是实现一个分布式数据库.了解数据库的实现原理和细节,一方面可以提高个人技术,对构建其他系统有帮助,另一方面也有利于用好数据库. 研究一门技术最好的方法是研究其中一个开源项目,数据库也不例外.单机数据库领域有很多很好的开源项目,其中 MySQL 和 PostgreSQL 是其中知名度…
第三阶段:高级阶段 (高级PHP程序员)重点:除了基本的LNMP程序,还能够在某个方向或领域有深入学习.(纵深维度发展)目标:除了能够完成基本的PHP业务开发,还能够解决大部分深入复杂的技术问题,并且可以独立设计完成中大型的系统设计和开发工作:自己能够独立hold深入某个技术方向,在这块比较专业.(比如在MySQL.Nginx.PHP.Redis等等任一方向深入研究) 1. Linux:除 了第二阶段的能力,在Linux下面除了常规的操作和性能监控跟踪,还能够使用很多高级复杂的命令完成工作(wa…