C# 知识点复习

什么是表达式树:
    是一个二叉树,数据结构,可以用Lambda表达式快速声明,是用来动态拼装表达式 目录树。

堆和栈:
    栈是编译期间就分配好的内存空间,因此代码中必须就栈的大小有明确的定义;局部值类型变量、值类型参数等都是在栈内存中。堆是程序运行期间动态分配的内存空间,可以根据程序运行情况确定分配堆内存的大小。

Ajax调用的时候,get、post的区别:
    Get和Post都是向服务器发送请求,只是发送机制不同。
    Get请求会将参数跟在URL后进行传递,Post请求是作为HTTP消息的实体内容发送给WEB服务器。在Ajax请求中这种区别对用户是不可见的。
    get请求传输数据容量小,不安全;post请求传输数据内容大,更加安全
    (get请求一般用来获取数据,post请求一般用来提交数据)

属性和特性:
    属性是面向对象编程的基本概念,提供了对私有字段的访问封装,在C#中以get和set访问器方法实现对可读写属性的操作。提供了安全和灵活的数据访问封装。
    特性可以有效的将元数据或声明性信息与代码(程序集、类型、方法、属性等)相关联,将特性与程序实体相关联后,可以在运行时使用反射这项技术查询特性。
    特性有以下属性:
    1.特性向程序添加元数据。元数据是程序中定义的类型相关信息。所有.NET程序集都包含一组指定的元数据,用于描述程序集中定义的类型和类型成员。可以添加自定义特性来指定所需的其他任何信息。
    2.可以将一个或者多个特性应用于整个程序集、模块或较小的程序元素(类和属性)。
    3.特性可以像方法和属性一样接受自变量。
    4.程序可以使用反射来检查自己的元数据或其他程序中的元数据。
    自定义特性:
    可以通过定义特性类创建自己的自定义特性,特性类是直接或间接派生自Attribute的类,可快速轻松的识别元数据中的特性定义。

委托和事件:
    委托是一个类,定义了方法的类型,使得可以将方法当做另一个方法的参数来传递,这种方法动态的赋给参数的做法,可以避免在程序中大量使用IF-ELSE(SWITCH)语句,同时使得程序具有更好的可扩展性。
    事件是委托的一种封装,声明一个事件像是声明一个私有的委托类型变量,以防止其他对象从外部任意修改委托。

事务和锁:

         事务:事务是指一个工作单元,包含了一组数据操作命令,所有命令作为一个整体一起向系统提交或者撤销请求操作。(要么这组命令都执行,要么都不执行)
    事务具有4个特征,分别是原子性、一致性、隔离性和持久性,简称事务的ACID特性;

    一、原子性(atomicity)

    一个事务要么全部提交成功,要么全部失败回滚,不能只执行其中的一部分操作,这就是事务的原子性。

    二、一致性(consistency)

    事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态。如果数据库系统在运行过程中发生故障,有些事务尚未完成就被迫中断,这些未完成的事务对数据库所作的修改有一部分已写入物理数据库,这是数据库就处于一种不正确的状态,也就是不一致的状态

    三、隔离性(isolation)

    事务的隔离性是指在并发环境中,并发的事务时相互隔离的,一个事务的执行不能不被其他事务干扰。不同的事务并发操作相同的数据时,每个事务都有各自完成的数据空间,即一个事务内部的操作及使用的数据对其他并发事务时隔离的,并发执行的各个事务之间不能相互干扰。

    在标准SQL规范中,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同,分别是:未授权读取,授权读取,可重复读取和串行化

    1、读未提交(Read Uncommited),该隔离级别允许脏读取,其隔离级别最低;比如事务A和事务B同时进行,事务A在整个执行阶段,会将某数据的值从1开始一直加到10,然后进行事务提交,此时,事务B能够看到这个数据项在事务A操作过程中的所有中间值(如1变成2,2变成3等),而对这一系列的中间值的读取就是未授权读取

    2、授权读取也称为已提交读(Read Commited),授权读取只允许获取已经提交的数据。比如事务A和事务B同时进行,事务A进行+1操作,此时,事务B无法看到这个数据项在事务A操作过程中的所有中间值,只能看到最终的10。另外,如果说有一个事务C,和事务A进行非常类似的操作,只是事务C是将数据项从10加到20,此时事务B也同样可以读取到20,即授权读取允许不可重复读取。

    3、可重复读(Repeatable Read)

    就是保证在事务处理过程中,多次读取同一个数据时,其值都和事务开始时刻是一致的,因此该事务级别禁止不可重复读取和脏读取,但是有可能出现幻影数据。所谓幻影数据,就是指同样的事务操作,在前后两个时间段内执行对同一个数据项的读取,可能出现不一致的结果。在上面的例子中,可重复读取隔离级别能够保证事务B在第一次事务操作过程中,始终对数据项读取到1,但是在下一次事务操作中,即使事务B(注意,事务名字虽然相同,但是指的是另一个事务操作)采用同样的查询方式,就可能读取到10或20;

    4、串行化

    是最严格的事务隔离级别,它要求所有事务被串行执行,即事务只能一个接一个的进行处理,不能并发执行。

    四、持久性(durability)

    一旦事务提交,那么它对数据库中的对应数据的状态的变更就会永久保存到数据库中。--即使发生系统崩溃或机器宕机等故障,只要数据库能够重新启动,那么一定能够将其恢复到事务成功结束的状态。

    锁:实在多用户环境中对数据的访问限制,以维护数据安全或者防止并发数据操作问题,锁可以保证事务的完整性和并发性。
    从锁的粒度划分,可以将锁分为表锁、行锁以及页锁。

    行级锁:是锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。
行级锁开销大,加锁慢,且会出现死锁。但锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

    表级锁:是粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分MySQL引擎支持。

    页级锁:是粒度介于行级锁和表级锁中间的一种锁。表级锁速度快,但冲突多,行级冲突少,但速度慢。所以取了折中的页级,一次锁定相邻的一组记录。

    开销和加锁时间界于表锁和行锁之间,会出现死锁。锁定粒度界于表锁和行锁之间,并发度一般。

    从使用性质划分,可以分为共享锁、排它锁以及更新锁。

    共享锁(Share Lock):S 锁,又称读锁,用于所有的只读数据操作。
S 锁并非独占,允许多个并发事务对同一资源加锁,但加 S 锁的同时不允许加 X 锁,即资源不能被修改。S 锁通常读取结束后立即释放,无需等待事务结束。

    排他锁(Exclusive Lock):X 锁,又称写锁,表示对数据进行写操作。
X 锁仅允许一个事务对同一资源加锁,且直到事务结束才释放,其他任何事务必须等到 X 锁被释放才能对该页进行访问。

    使用 select * from table_name for update; 语句产生 X 锁。

    更新锁:U 锁,用来预定要对资源施加 X 锁,允许其他事务读,但不允许再施加 U 锁或 X 锁。
当被读取的页将要被更新时,则升级为 X 锁,U 锁一直到事务结束时才能被释放。故 U 锁用来避免使用共享锁造成的死锁现象。

    从主观上划分,又可以分为乐观锁和悲观锁。

    乐观锁(Optimistic Lock):顾名思义,从主观上认定资源是不会被修改的,所以不加锁读取数据,仅当更新时用版本号机制等确认资源是否被修改。
乐观锁适用于多读的应用类型,可以系统提高吞吐量。

    悲观锁(Pessimistic Lock):正如其名,具有强烈的独占和排它特性,每次读取数据时都会认为会被其它事务修改,所以每次操作都需要加上锁。


索引:
    索引像书的目录,索引使数据程序无需扫描整个表,就可以在其中找到所需的数据。
    索引包含:聚集索引(主键索引)
          非聚集索引(就是给普通字段加上索引)
          聚合索引(好几个字段组成的索引)
    优点:
    1.索引使查询数据效率快
    2.可以保证数据表中的每一行数据的唯一性
    缺点:
    1.创建索引和维护索引消耗时间(随着数据量的增多而增多)
    2.索引需要占物理空间

存储过程:
    存储过程是一组预编译的sql语句
    优点:更快的执行,减少网络流量,更好的安全机制(可以设定只有某用户才具有对指定的存储过程的使用权)。

    

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值