赞
踩
# 数据库
1,什么是事务?什么是锁
事务指一个工作单元,它包含了一组数据操作命令,并且所有的命令作为整体一起向系统提交或撤销请求操作,即这组命令要么全部执行,要么都不执行
事务的属性 (ACID)
A 原子性 一个事务是一个不可分割的工作单元,事务包含的操作要么都做要么不做
C 一致性 一个事务执行之前和执行之后数据库都必须处于一致性状态
I 隔离性 一个事务的执行不能被其他事务干扰()
D 持久性 一个事务一旦提交,它对数据库中数据的改变是永久性的
``` sql
BEGIN TRANSACTION tran1 --事务开始
SAVE TRANSACTION tran1 --保存事务
SELECT * from DncUser --数据操作
COMMIT TRANSACTION tran1 --提交事务
IF(@@ERROR<>0) --错误个数
BEGIN
RAISERROR ('查询错误',16,1) --自定义错误输出
ROLLBACK TRANSACTION tran1 --事务回滚
END
IF(@@TRANCOUNT>0) --判断事务是否大于0
BEGIN
ROLLBACK TRANSACTION tran1 --事务回滚
END
GO
```
2,什么是锁
1. 锁是在多用户环境中对数据的访问进行限制
2. 锁分为两类 (悲观锁和乐观锁)
* 悲观锁 它对数据被外界修改持保守态度,认为数据随时会修改,所以整个数据处理需要加锁
* 悲观锁按性质分为三种
* 1. 共享锁(S锁)(读锁)事务A对对象T加S锁,其他事务也只能对T加S锁,多个事务可以同时读,但不能有写操作,直到A释放S锁
2. 排它锁(X锁)(写锁) 事务A对对象T加X锁以后,其他事务不能对T加任何锁,只有事务A可以读写对象T直到A释放X锁 (X锁和U锁不能加在同一子资源上)
3. 更新锁 (U锁) (防止死锁) 用预定要对此对象施加X锁,它允许其他事务读,但不允许再施加U锁和X锁,当被读取的页将要被更新时,则升级为X锁,U锁一直到事务结束才能被释放 (乐观锁和更新锁是可以加在同一子资源下)
* 悲观锁按作用范围分为2种
* 1. 行锁 锁的作用范围是行级别的,数据库能够确定那些行需要锁的情况下加行锁。
2. 表锁 锁的作用范围是整张表
* 乐观锁 每次自己操作数据的时候认为没有人会来修改它,所以不去加锁,但是在更新的时候会去判断在此期间数据有没有被修改,需要用户自己去实现
* 乐观锁实现方式:
* 1. 对记录加版本号.
* 2. 对记录加时间戳.
* 3. 对将要更新的数据进行提前读取、事后对比。
3. 什么是索引 索引就是如同书的目录
* 有无索引的最大区别就是查询的方式不一样 (无索引是线性查找,有索引的查找是二叉树查找)
* 作用:提交查询速度,确保数据的唯一性,使用分组和排序自居进行数据检索时,可以减少分组和排序的进行搜索优化
* 主键索引,唯一索引,常规索引,全文索引
4. 什么是视图
* 视图是一种虚拟表,虚拟表具有和物理表相同的功能,可以对虚拟表进行增改查操作
* 视图通常是一个或多个表的行或列的子集
* 查询语句不能包含order by ,compute 或者compute关键字,也不能包含into关键字
5. 什么是游标
6. 数据库隔离级别
* Read Uncommitted () 读取未提交内容 =》引发脏读
可以看到其他未提交事务的执行结果
* Read Committed(读取提交内容) =》不可重复读
一个事务只能看见已经提交事务所做的改变
* Repeatable Read(可重读) =》幻读
确保同一事务的多个实例在并发读取数据时,会看到同样的数据行
* Serializable(可串行化) =》超时和锁竞争
它是在每个读的数据行上加上共享锁。
# C#
1. 值类型和引用类型
* 值类型 struct,enum,int,float,char,bool,decimal
* 引用类型 class,delegate,interface,array,object,string=>(字符串是引用类型)
* 值类型和引用类型的区别
1. 值类型的数据存储在内存的栈中,引用类型的数据保存在内存的堆中,而内存单元中只存放堆中的对象地址;
2. 值类型存取速度要快,引用类型存储数据要慢
3. 值类型表示实际数据,引用类型表示只想存储在内存堆中的数据的指针或引用
4. 栈的内存分配是自动释放,堆在.net中会有GC来释放
5. 值类型变量直接存放实际的数据,而引用类型的变量把实际的地址保存在堆栈中,实际数据则保存到堆中
2. get 和post的区别
* 从http协议下来说post和get是没什么区别的
* 从html协议下来说
* 1. get (获取数据)post (提交数据)
2. get 提交时,参数会显示在网址后面以&连接 post会直接以表单的形式提交,数据保存在body中
3. get对长度有限制,post没有限制
4. post要比get安全
3. Ado.Net的五大对象
* 1. Command对象 (执行语句)
2. Connection对象 (连接对象)
3. DataReader对象 (读取数据库)
4. DataSet对象 (数据集)
5. DataAdapter对象 (填充)
4. C#中的委托是什么?,事件是不是一种委托
* 委托就是一个类,也可以实例化通过委托的构造函数来把方法赋值给委托实列
* 委托就是把方法当成参数给另外一个方法调用
* 触发委托有两种方法,委托实例.Invoke(参数列表),委托实例(参数列表)
* 事件是一种特殊的委托
* 委托可以+= ,-=
5. 重载和重写的区别(实现多态的方式
* 重写是对基类的方法进行重写(Override) (运行时的多态性)
* 重载是方法名称相同,参数个数或者参数类型不同(Overload)(编译时的多态性)
6. 面向对象的思想包括什么?
* 继承,封装,多态
7. 接口和抽象类的异同
* 接口强调你必须实现,接口中的方法不能使用public关键字
* 抽象类不能实例化,接口也不能实例化
* 接口不能包含定义字段,属性,常量,构造函数,析构函数,静态方法
* 在抽象类中,子类必须实现父类定义的抽象方法
* 抽象类可以有构造方法,接口不能有
* 一个类可以实现多个接口,但只能继承一个抽象类
* 接口可以多实现,只能单继承
8. Orm的原理
* 利用反射,配置将对象和数据库表进行映射
9. 结构和类的异同
* 结构不能从类和其他结构继承
* 结构是值类型,类是引用类型
* 结构不能声明默认构造函数(没有参数的构造函数)或析构函数
* 结构的实例化可以不使用new 运算符,
10. 接口和类的异同
异:不能直接实例化接口,
接口不包含方法的实现
接口,类,结构可以从多个接口继承
同:接口、类和结构可从多个接口继承。
接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。
接口可以包含事件、索引器、方法和属性。
11. B/S传值的方式
session,cookie,application,cache,Querystring,this.server.Transfer
12. 线程和进程的区别
* 一个程序至少有一个进程,一个进程至少一个线程
* 进程系统进行资源分配和调度的一个独立单位 (一块包含了某些资源的内存区域)
* 线程是Cpu调度和分派的基本单位,(进程中所包含的一个或多个执行单元)
13. base的用法
* base用户从派生类访问**基类的成员(方法)等**
* 在已被另一个方法重写的基类上调用方法
* 指定在派生类的实例时应调用哪个基类构造函数
* 基类访问只能在**构造函数,实例方法,或实例属性访问器**
* base不能在静态方法上使用
14. virtual的用法(虚拟的)
* 用于修改方法,属性,索引器,或事件声明,并允许在派生类中重写它,
基类使用virtual虚方法 ,派生类重写必须使用override关键字
* **任何继承此方法的类都可以重写此方法**
15. 锁语句(lock)
* 获取给定对象的互斥锁执行语句块,然后释放该锁
* 持有锁时,持有锁的线程,可以再次获取并释放,任何其他线程被阻止获取锁并等待直到释放
* 避免使用以下内容作为锁定对象
1. 避免对不同的共享资源使用相同的锁对象实例,因为它可能会导致死锁或锁争用
2. this,因为它可能被调用方用作锁
3. 键入实例,因为这些实例可能由类型运算或反射获取
4. 字符串实例,包括字符串文本,因为这些实例可能被暂留
5. 不能在锁的正文使用await 关键字
16. 过滤器
* MVC过滤器主要包含四种类型 Authorization(授权)Action(行为)Result(结果)Exception(异常)
* | 过滤器类型 | 接口 | 描述 |
| :-------:| ---- | ------ |
| Authorization(授权) | IAuthorizationFilter | 此类型(或过滤器)用于限制控制器或者控制器的某个行为 |
| Exception | IExceptionFilter | 用于指定一个行为,这个被指定的行为处理某个行为方法或某个控制器里面抛出的异常 |
| Action | IActionFilter | 用于进入方法前的或者之后的处理 |
| Result | IResultFilter | 用于返回结果之前或之后的处理 |
* 默认实现的过滤器只有三种 Authorize(授权)ActionFilter(),HandleError
* | 过滤器 | 类名 | 实现接口 | 描述 |
| ------------ | --------------------- | ---------------------------- | ------------------------------------------------------------ |
| ActionFilter | AuthorizeAttribute | IAuthorizationFilter | 此类型(或过滤器)用于限制进入控制器或控制器的某个行为方法 |
| HandleError | HandleErrorAttribute | IExceptionFilter | 用于指定一个行为,这个被指定的行为处理某个行为方法或某个控制器里面抛出的异常 |
| 自定义 | ActionFilterAttribute | IActionFilter和IResultFilter | 用于进入行为之前或之后的处理或返回结果的之前或之后的处理 |
* 过滤器的四种方法
| **OnActionExecuting** | 在行为方法执行之前 |
| --------------------- | ---------------------- |
| **OnActionExecuted** | 在行为方法执行之后 |
| OnResultExecuting | 在行为方法返回结果之前 |
| OnResultExecuted | 在行为方法返回结果之后 |
17. 获取controller或者action
* RouteData.Values["controller"]
* RouteData.Values["action"]
* 在视图中获取控制器或者方法
* ViewContext.RouteData.Values["controller"]
18. web service
* 基于web的服务,使用web(http)方式,接收和响应外部系统的请求
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。