1. 底层基础概念

CIL(Common Intermediate Language) 中间语言(C# VB 最终编译成CIL语言)

BCL(Base Class Library) 基础类库 (System 类库这样的最基层类库)

FCL (Framework Class Library) 微软类库 (包括基层类库等微软提供的所有类库)

CTS(Class Type System) 公共类型规范 (最基本的语言规定,比如string class 这些蓝色关键字)

CLS(Common Language Specification)公共语言规范 (基于CIL语法的规范做法)

CLR(Common Language Runtime).net运行托管(.net程序的虚拟机,基于window上)

资料参考:

http://www.tracefact.net/CLR-and-Framework/DotNet-Framework.aspx

2. 泛型简单理解

泛型集合List<T>

泛型的意义何在?类型安全和减少装箱、拆箱并不是泛型的意义,而是泛型带来的两个好处而已(或许在.net泛型中,这是最明显的好处了)。泛型的意义在于 ——把类型作为参数,它实现了代码之间的很好的横向联系,我们知道继承为代码提供了一种从上往下的纵向联系,但泛型提供了方便的横向联系(从某种程度上说,它和AOP在思想上有相通之处)。在PersonCollection例子中,我们知道Add()方法和Remove()方法的参数类型相同,但我们明确无法告诉我们的程序这一点,泛型提供了一种机制,让程序知道这些。道理虽然简单,但这样的机制或许能给我们的程序带来一些深远的变化吧。

泛型的Where能够对类型参数作出限定。有以下几种方式。

l         where T : struct   限制类型参数T必须继承自System.ValueType。

l         where T : class    限制类型参数T必须是引用类型,也就是不能继承自System.ValueType。

l         where T : new()   限制类型参数T必须有一个缺省的构造函数

l         where T : NameOfClass 限制类型参数T必须继承自某个类或实现某个接口。

以上这些限定可以组合使用,比如:

public class Point<T> where T : class, IComparable, new()

//泛型应用
public class Person<T>//创建泛型类
{
private T temp;
public Person(T nameAge)
{
this.temp = nameAge;
}
public void Read()
{
Console.WriteLine(temp);
}
}
static void Main(string[] args) {
Person<string> personName = new Person<string>("jack");
//string类型名字
Person<int> personAge = new Person<int>();
//int类型名字
personName.Read();//输出jack
personAge.Read();//输出15
for (;;) ;
}
//泛型类集合
public class Person
{
private string name;
public Person(string oneName)//构造函数
{
name = oneName;
}
public void SayHello(){
Console.WriteLine("Hello" + name);
}
}
static void Main(string[] args) {
List<Person> colPerson = new List<Person>();
//创建集合类
colPerson.Add(new Person("jack"));
colPerson.Add(new Person(“jhon”));//添加集合类
foreach (Person aPerson in colPerson)
aPerson.SayHello();//输出Hellojack Hellojhon
Person smith = new Person("smith");
colPerson.Add(smith);
Console.WriteLine(colPerson.Contains(smith));//输出true
for (;;) ;
}

3.数据库索引

参考资料:http://www.cnblogs.com/huangxincheng/p/4243080.html

1.主键建立的时候 会自动创建唯一索引 类型是聚集

2.插入三百万数据 查询 like 某一个字符需要7秒 (返回一百多万条数据)

3.加入 非聚集索引 速度提升到5秒(返回一百多万条数据)

CREATE NONCLUSTERED  INDEX  Index_USer_Name  ON [dbo].[User]  (Name)

4.索引的语法

CREATE [UNIQUE][CLUSTERED | NONCLUSTERED]  INDEX  index_name

ON {table_name | view_name} [WITH [index_property [,....n]]

说明:

UNIQUE: 建立唯一索引。

CLUSTERED: 建立聚集索引。

NONCLUSTERED: 建立非聚集索引。

Index_property: 索引属性。

UNIQUE索引既可以采用聚集索引结构,也可以采用非聚集索引的结构,如果不指明采用的索引结构,则SQL Server系统默认为采用非聚集索引结构。

1.42 删除索引语法:

DROP INDEX table_name.index_name[,table_name.index_name]

说明:table_name: 索引所在的表名称。

index_name : 要删除的索引名称。

1.43 显示索引信息:

使用系统存储过程:sp_helpindex 查看指定表的索引信息。

执行代码如下:

Exec sp_helpindex book1;

测试代码

--truncate table [dbo].[User]
--DECLARE @i int
--Set @i = 1
--WHILE @i < 3000000
--BEGIN
--Set @i =@i +1
--insert into [dbo].[User] values(('A'+Convert(nvarchar,@i)),18,('A'+Convert(nvarchar,@i)))
--End

select * from [dbo].[User] where id=168

dbcc dropcleanbuffers
set statistics io on
select Name from [dbo].[User] where Name like 'A1%'
set statistics io off

select Count(1) from [dbo].[User]

CREATE NONCLUSTERED INDEX Index_USer_Name ON [dbo].[User] (Name)

Exec sp_helpindex [User];

没加索引IO次数对比

加了索引

顺便补充下 数据库存储知识,数据库存储是由页组成的 一页等于8k

查询数据存在哪一页

dbcc ind 命令 (DBCC  数据库控制台命令)

5.数据库锁

  学习锁之前,必须要知道锁大概有几种???通常情况下作为码农我们只需知道如下几个锁即可。。。

1.S(Share)锁

  为了方便理解,我们可以直接这么认为,当在select的时候在表,数据页,记录上加上共享锁。

2.X(Exclusive) 锁

  我们在delete数据的时候会在记录上附加X锁,我们知道X锁并不与其他的锁兼容。如果其他的锁与其遭遇,就会处于等待,后续我们再说。

3.U(Update)锁

  顾名思义,我们在Update的时候,在寻找记录的过程中,会逐一的给记录附加U锁,如果找到了目标记录的话,则会将U锁转化为X锁。。。

4.I (Intent)锁

  这个就是所谓的意向锁,一般都是给表和数据页附加的锁,好处就是防止被其他连接修改表结构。

总得来说,每个操作SQLSERVER都会自动的加入锁定机制。

最常见的是当某一条件下的数据在被查询的时候,另一个相关的数据请求会导致等待,原因是SQL为了防止脏读

,但是我们的业务逻辑经常是允许脏读,然后在后台做最后的判断,针对10:1的读写,很多码农可能都会遇到类似神乎其神的死锁,卡住,

读不出来,插不进入等等神仙的事情导致性能低下,这个时候 我们的查询语句就要指定解锁动作

比如 上面的情况  有两种优化方案

1.加入索引

2.加入解锁语句

SELECT * FROM xx 表 WITH(NOLOCK) where 条件

操作锁的动作种类如下

粒度锁:PAGLOCK(数据页锁), TABLOCK(表锁), TABLOCKX(表X锁), ROWLOCK(行锁), NOLOCK(无锁模式)

模式锁:HOLDLOCK(整个事务中持有锁), UPDLOCK(加了UPDATE就得等), XLOCK(排斥X锁)

.net修炼笔记的更多相关文章

  1. Coding Ninja 修炼笔记 (1)

    大家好啊~我又回来了. 这次主要是给大家带来一些提升 Coding 效率的建议. 效率都是一点一滴优化出来的,虽然每一条建议给你带来的提升可能都不大,但是积累起来,仍然是一股不可忽视的力量. 第一条 ...

  2. Windows Phone开发人员必看资料

    win phone开发必看资料,下载地址收藏啦!收藏后可有选择性的下载,希望大家喜欢! 完整附件下载:http://down.51cto.com/data/414417 附件预览: Windows E ...

  3. 《编写高质量代码--Web前端开发修炼之道》读书笔记

    前言 这两周参加公司的新项目,采用封闭式开发(项目成员在会议室里开发),晚上加班到很晚,所以没时间和精力写原创博客了,今天就分享下这篇<编写高质量代码--Web前端开发修炼之道>读书笔记吧 ...

  4. 《程序员思维修炼》读书笔记——week4

    <程序员思维修炼>读书笔记——week4 PB16061441 陈昶金 这周读的是Andy Hunt的著作<程序员思维修炼>,这本书对于我这种刚刚入门的新手很友好,大多是讲一些 ...

  5. 高效程序员的45个习惯·敏捷开发修炼之道(Practices of an Agile Developer)读书笔记

    首先,这本书值得再看一遍——这次的阅读,有很多东西都是知其“形”,不知其“神”的,这导致了我对其中某些建议持怀疑态度,接受了的建议也有待商榷. 总之,先记录本书的一些信息: Practices of ...

  6. postgresql修炼之道学习笔记(1)

    好好学习吧. 本笔记 仅作为摘要记录 前两章,主要是数据库对比和安装等. 对比,就比多说了,总是和别人比较,会显得自己身价低,呵呵. 安装也有很多文章,不多说. 第二章提到了一些简单的配置, 其在 d ...

  7. [读书笔记] Web 前端开发修炼之道

    原创地址:http://www.cnblogs.com/bnbqian/p/3735565.html 转载请注明出处 今天我们要读的书是Web 前端开发修炼之道 第1章 从网站重构说起 1.1 糟糕的 ...

  8. 《编写高质量代码:Web 前端开发修炼之道》 笔记与读后感

    编写高质量代码:Web 前端开发修炼之道/曹刘阳著. —北京:机械工业出版社,2010.5 第一版 涉及到的知识点: 1. CSS Sprites 在国内很多人叫css精灵,是一种网页图片应用处理方式 ...

  9. 开发工作之外的修炼Live笔记

    “开发工作之外的修炼”这期Live分享了下列话题: [1] 如何发现自己的兴趣 [2] 财富.资源与被动收入 [3] 目标管理 [4] 快速做选择 [5] 时间管理 [6] 如何投资自己 >&g ...

随机推荐

  1. office2010激活 错误代码0X8007000D,KMS激活0x8007000D错误解决办法,亲测成功激活

    只针对VL版本 注意:此方法只对VL版本的,或者是MSDN版本通过替换文件转为VL版本的Office2010有效.零售版本的就别指望KMS激活了. 怎么看自己是不是VL版本的,只要看帮助里面激活的地方 ...

  2. 学习Git---20分钟git快速上手

    学习Git-----20分钟git快速上手  在Git如日中天的今天,不懂git都不好意思跟人说自己是程序猿.你是不是早就跃跃欲试了,只是苦于没有借口(契机). 好吧,机会就在今天. 给我20分钟,是 ...

  3. mybatis 框架动态传入参数${}和#{}之间的区别

    动态SQL是mybatis的强大特性之一,mybatis在对sql语句进行预编译之前,会对sql进行动态解析,解析为一个BoundSql对象,也是在此处对动态sql进行处理.下面让我们先来熟悉下myb ...

  4. Mac OSX 快捷键&命令行

    一.Mac OSX 快捷键 ctrl+shift                                    快速放大dock的图标会暂时放大,而如果你开启了dock放大Command+Op ...

  5. 【Unity】7.4 游戏外设输入

    分类:Unity.C#.VS2015 创建日期:2016-04-21 一.简介 Unity可以处理摇杆.游戏手柄.方向盘等标准游戏外设的输入,使用的方法如下图所示: 虚拟按键需要在输入管理器中配置,把 ...

  6. 使用sqoop将MySQL数据库中的数据导入Hbase

    使用sqoop将MySQL数据库中的数据导入Hbase 前提:安装好 sqoop.hbase. 下载jbdc驱动:mysql-connector-java-5.1.10.jar 将 mysql-con ...

  7. tar.xz文件格式的压缩与解压

    从网上下载了一个man的安装文件,格式为tar.xz,默认下载到当前目录下 //下载man源码并以原文件名保存,如果要指定保存的文件名用小写-o name指定 curl -O https://www. ...

  8. C++类中的成员函数和构造函数为模板函数时的调用方法

    所谓模板函数其实就是建立一个通用函数,这个通用函数的形参类型不具体指定,用一个虚拟类型来代表,这个通用函数就被称为函数模板. 例: #include <iostream> using na ...

  9. elasticsearch 索引延迟 一致性问题等

    https://www.elastic.co/guide/en/elasticsearch/guide/current/near-real-time.html https://www.elastic. ...

  10. Nexus 搭建maven 私有仓库

    nexus如果没有私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载和浪费了外网带宽,如 ...