- Main函数是什么?
a) 程序入口函数
- 在程序中使用Main函数有什么需要注意的地方?
a) Main函数不能变,有且只有一个
- CLR是什么?
a) 公共语言运行时
b) Common Language RunTime
- 程序集是什么?
a) 编译后代码的集合。(包括exe和dll)。 加载项目里所有的类到内存,并找到其中的主函数,并作为默认的启动函数调用执行。
- 当运行一个程序集的时候,CLR做了什么事情?
a) 加载项目所有的类到内存,并找到其中的主函数作为默认的启动函数调用执行,但是,如果项目中,包含了一个以上的主函数时CLR不知道从那个开始,如果项目中,没有包含主函数的话,CLR也不知道如何启动
- 值类型的默认值是什么?(情况一:字段或全局静态变量;情况二:局部变量)
a) 如果没有赋值且是全局变量或字段
- Int 默认0
- Bool 默认false
- Eumn(枚举)
- 结构体
b) 如果是局部变量就必须赋值
- 声明一个变量时在内存中做了什么事情?
a) 在栈中开辟空间,并将变量放入空间中,默认值是null
- 初始化一个变量的时候又在内存中做了什么事情?
a) 如果值类型直接方法栈中
b) 如果引用类型,在堆中开辟空间,将堆中的地址指针放入栈中
- new关键字做的事情?
a) 开辟堆空间
b) 创建对象
c) 调用构造函数
d) 返回堆地址
- 数组一旦创建后,能不能修改数组的长度?
a) 不能,创建时在内存中开辟了一段连续的内存空间
- 如何声明一个多维数组?
a) string[,] str = { { "1", "1" }, { "1", "1" } };
- 如何获取多维数组的总长度?
a) 各个纬度元素的乘积
- 如何声明一个交错数组?
a) int[][] arr=new int[3][3];
- 交错数组的本质是什么?
a) 一个数组的数组,也就是数组的每个元素都是一个一维数组
0213
- 01.为什么要有方法?
a) 为了复用调用,封装具体实现
- 02.如何实现方法的重载?
a) 方法名形同,方法签名不同,和返回值无关
- 03.引用参数(ref)和输出参数(out)的相同点与不同点?
a) 相同点:传递的都是引用。
b) 不同点:out侧重于输出参数;ref侧重于修改;out必须方法返回之前赋值;ref必须在传入之前赋值。
- 04.在什么情况下使用引用参数(ref)和输出参数(out)?
a) 如果方法有多个返回值,则可以用out或者ref。只不过ref侧重于修改(即将值传进去修改后再拿出来);而out是为了从方法中获得一个值后拿到方法外使用。
- 05.可变参数与普通数组参数的区别?(params)
a) 必须放在参数列表最后
b) 每个方法中有且只有一个params
c) 如果没有给params赋值,就长度自动初始化为0
0215
- 01.面向对象的三大特征是什么?
a) 封装
b) 继承
c) 多态
- 02.类和对象的关系?
a) 类是抽象,对象是具体的
b) 类是用来描述实物的,是针对具体存在的一种描述;对象是这类事务存在的具体实现,按照类的描述来创建一个可供我们使用的实例
- 03.创建某一个类的对象的时候,在内存中做了什么事情?例如 Person p = new Person();
a) 开辟空间,创建对象,调用构造函数。(在内存的堆中开辟空间,创建Person对象,然后在内存的栈中开辟一个放一个p,然后将Person对象在堆中的引用地址赋值给对象p)
- 04.属性存在的目的是什么?
a) 封装字段
b) 为了对字段的操作设置规则。(本质是两个方法,一个get方法和一个set方法)
- 05.访问修饰符有哪些并分别每一个访问修饰符?
a) Public 公有的
b) Private 私有的
c) Internal 程序集内共享,如果不写修饰符默认是Internal
d) Protected 受保护的
e) Extern 供外部访问
- 为什么要有构造函数呢?
a) 主要方便程序员在实例化对象中一些属性字段初始化赋值
- 什么是封装?
a)
- 封装的目的是什么?
a) 隐蔽代码实现
b) 复用
c) 修改方便
- 08.类的命名规则是什么?
a) 帕斯卡方式,首字母大写
b) 变量,骆驼命名方式,首字母小写
0216
- 什么是类型?
a) 用来定义某一种数据在内存里开辟空间的大小
b) 还可以预置操作此种类型数据
- this关键字在方法中使用时,它代表什么?
a) 所在类的堆里面的对象
b) this指当前类的对象,或者他的父类的类对象。
c) base只能指向父类的对象。
- 值类型变量的初始化(内存分配)?(两种情况:一是类的成员变量,二是:方法的局部变量)
a) 当变量是一个类的成员变量的时候,那么该变量是跟随类的对象存在于堆内存,但对象引用断开时,等垃圾回收器进行清理时便销毁
b) 当变量是一个方法的局域变量时,那么该变量是在方法被调用时,存在于栈内存,方法执行完毕后被销毁
- 继承的好处?
a) 提高代码的复用
b) 实现多态
- 继承的单根性
a) 一个类只能有一个父类(只能继承一个父类)
- 继承的传递性
a) 指子类“获得”父类所有非私有的成员
- 当存在继承关系的时候,在子类中如何访问父类的非私有成员?
a) 当存在继承关系的时候 子类的this同时可以指向父类的非私有成员
base就是存在于子类对象里,用来指向父类对象的指针
- 什么是里氏替换原则?
a) 在声明的时候,子类替换父类的所在的位置
b) Base =new child
- 子类与父类对象之间的转换?
a) 子类可以强转为父类,反之则无法实现
- is 和 as 操作符的用处和区别?
a) is就是处于对类型的判断。返回true和false。如果一个对象是某个类型或是其父类型的话就返回为true,否则的话就会返回为false。另外is操作符永远不会抛出异常。
b) as关键字只能判断、转换引用类型;as 操作符首先测试转换是否合法,如果合法就转换,否则返回NULL。关键词NULL表示空引用,不会抛异常
- override可以重写哪些 "类型" 的方法?
a) 虚方法(virtual )
b) 抽象方法(abstract )
- 什么是多态?
a) 就是用某个子类来实例化父类,调用的是父类的抽象方法(虚方法),但实际执行的是子类实例重写的方法
- 抽象方法只能定义在抽象类中吗?
a) 抽象只能定义在抽象类中
b) 抽象方法必须放在子类中实现(除非子类也是抽象类)
c) 抽象成员不能是私有的(Private)
0217
- CLR什么时候加载类?
a) 是在第一次在代码中遇到这个类的时候才加载类的静态成员和信息
- 当存在继承关系的时候,创建子类对象的时候会不会创建父类对象呢?
a) Person c=new Student()
当我们new一个子类的时候,在内存中,只有一个子类对象
- 如果子类和父类存在同名但没有重写关系的方法的时候,那么会调用哪个方法?(两种情况:一是使用子类对象,而是使用父类对象)
a) 如果子类和父类存在同名但没有重写关系的方法,那么调用时,如果父类变量调用,则调用父类方法。如果是子类变量调用,则调用子类的方法
- 如果子类和父类存在同名且有重写关系的方法,那么会调用那个方法?(两种情况:一是使用子类对象,而是使用父类对象)
a) 果子类和父类存在同名且有重写关系的方法,那么不管变量是什么类型,调用的都是子类的方法
- 虚方法和抽象方法的相同点与不同点?
a) 相同点:
- 抽象方法和虚方法都可以被重写。
- 都不能为private(私有的)
b) 不同点:
- abstract 和virtual的关键字不同
- 抽象方法一定没有方法体,而虚方法必须有方法体。
- virtual方法的子类可以重写父类方法也可不重写,而抽象方法的所在的类的子类必须重写父类方
- 抽象方法必须在抽象类中声明,而虚方法可以存在于任何一个类里面
- virtual方法必须有现实(哪怕是空实现),而abstract方法必须没有实现
- 子类中的base关键字指向的是子类对象还是父类对象?
a) 子类对象
- 它本身的类型是子类类型还是父类类型呢?
a) 父类类型
b) base就是子类对象本身,只不过类型是父类
- 为什么要有抽象类?
a) 抽象类存在的目的就是制定规则,而不是具体实现,(为了约束子类的行为)具体的实现交给子类完成
- 使用多态的好处是什么?
a) 低耦合,代码之间关联小,便于维护(高内聚,职责单一)
b) 作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化
- 什么情况下的类不能被实例化?
a) 抽象类(abstract)
b) 静态类(static)
c) 构造函数私有化(private)
- 什么情况下抽象类的子类不需要实现父类的抽象成员?
a) 子类本身也是抽象类
- 虚方法(虚拟成员)和抽象方法(抽象成员)能不能被私有化?
a) 不能(编译报错)
b) 深层原因:他们两者存在的目的就是为了让子类去重写,如果私有化了,就没意义了。
- 静态成员能不能被标记为virtual、override 或 abstract?
a) 不能
- 接口的命名规则?
a) I开头
b) able结尾,表示有什么能里
- 什么是接口?
a) 特殊的抽象类
b) 完全是为了约束(统一)类的行为
- 接口能包含的成员有哪些?
a) 只能有方法、属性、索引和事件的声明
- 接口的访问权限修饰符只能是哪两种?
a) Public
b) Internal
- 接口能不能实现(继承)接口?
a) 能实现
- 如果一个抽象类继承了一个接口,那么将继承的方法设置为抽象方法,还是去实现该方法?
a) 都可以
0219
1、使用接口的注意事项
a) 接口的成员不能加访问修饰符
b) 接口中的成员不能有任何实现
c) 实现接口的子类必须实现接口的全部成员
d) 接口中只用有方法、属性、事件、索引器,不能有字段
e) 一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,并实现了接口IA,那么在语法上A必须写在IA的前面,因为类是单继承的,而接口可以实现多个。
f) 向上转型
g) 单一职责原则:避免定义体积庞大的接口,只把相关联的一组成员定义的接口中,如果不这样做会造成接口污染
2、显式接口和隐式接口
a) 类实现接口,可以显式的实现接口里的方法,但是注意:一旦使用显式实现接口里的方法后,那么该方法只能被接口变量调用
IFlyable fly = new Bird();
fly.Fly(); //正确
Bird fly = new Bird();
fly.Fly(); //错误
2、接口与抽象类的区别
a) 1) 抽象基类可以定义字段、属性、方法实现。接口只能定义属性、索引器、事件、和方法声明,不能包含字段。
b) 抽象类是一个不完整的类,需要进一步细化,而接口是一个行为规范。微软的自定义接
c) 口总是后带able字段,证明其是表述一类“我能做。。。”。
d) 接口可以被多重实现,抽象类只能被单一继承。
e) 抽象类更多的是定义在一系列紧密相关的类间, 而接口大多数是关系疏松但都实现某一
f) 功能的类中。
g) 抽象类是从一系列相关对象中抽象出来的概念, 因此反映的是事物的内部共性;接口是为了满足外部调用而定义的一个功能约定, 因此反映的是事物的外部特性。
h) 接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法。
i) 接口可以用于支持回调,而继承并不具备这个特点。
j) 抽象类实现的具体方法默认为虚的, 但实现接口的类中的接口方法却默认为非虚的, 当然您也可以声明为虚的。
k) 如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法
3、转换分类
a) 隐式转换
b) 强制转换
4、转换条件
5、ToString()方法
a) 是object对象的一个虚方法,如果不重写就返回类全名称
b) 可以重写该方法
6、Parse()和TryParse()方法
a) 相同点
i. 都是针对值string类型进行的值类型转换
b) 不同点
i. 返回值不一样。Parse返回转换成功的类型,TryParse返回Bool值
ii. Parse转换失败会抛异常,TryParse不会抛异常
iii. Parse通过返回值返回结果,TryParse通过out返回结果
5、什么时候加载静态成员
a) 在编译的
6、什么时候用静态成员
a) 在整个程序内部共享的数据,通常用做通用工具类,比如SQLHelper类
7、在普通类和静态类中的区别
a) 静态类用state修饰
b) 静态类不能被实例化
c) 静态类中只能包含静态成员
d) 静态成员属于类所有,非静态成员属于类的实例所有
e) 在是实例方法中可以直接调用静态成员,而静态方法中不能直接调用实例方法
f) 静态类和静态成员创建后始终使用同一块内存,而使用实例的方式会创建多块内存
a) 静态构造函数不能有参数,也不能有访问修饰符(默认是private)
5、静态类的继承
a) 不能被继承
b) 只能继承Object
6、类和成员的访问修饰符
a) 类的访问修饰符只有两种:public,internal(默认)
b) 成员的访问修饰符有:public,protected,private(默认)
7、结构本质是值类型
8、值类型和引用类型的选择
a) 值类型:主要是用来封装一组数据,并为数据提供一种简单的处理方式
b) 引用类型
- .主要用来封装数据和行为
- 使用面向对象的特征;
- 当类型中的成员比较多的时候(存在堆里)
9、new关键字的作用
a) 结构 在使用new关键字创建对象后,所有的成员变量都已经存在,并有默认值(值类型)如果没有用new关键字,则需要程序员手动为用到的成员变量赋值
8、类和结构的区别
a) 结构是值类型,是分配在内存的栈上的。而类是引用类型,是分配在内存的堆上的;
b) 结构不能被继承,因为结构是值类型,隐式继承自System.ValueType
c) 结构是值传递的(复制传递),而类是引用传递的。
9、值类型和引用类型作为参数传递的区别
a) 结构是值传递的(复制传递),而类是传递的是地址的引用。
10、访问级别约束
a) 子类的访问级别不能比父类的高;
b) 类中的属性或字段的访问级别不能比所对应的类型访问级别高;
c) 方法的访问级别不能不方法的参数和返回值的访问级别高。比如当方法的参数传递的是一个类对象时,那么此时这个类对象的访问级别要高于当前方法的访问级别
11、析构函数
a) 一个类只能有个析构函数
b) 无法继承和重载析构函数
c) 我们无法手动调用析构函数,因为他是被JC自动调用的
d) 析构函数没有访问修饰符也不能有参数
e) 不能在结构体中定义析构函数
f)
g) class MyDispose
h) {
i) ~MyDispose()
j) {
k) ......//在这里写释放资源的代码
l) }
m) }
12、为什么不能在结构体中定义析构函数
a) 因为结构是值类型,而值类型是存储在栈中的,栈中的数据在用完之后就立即销毁了,而析构函数的目的就是用来释放资源的,一般存储在堆中的引用类型才需要GC去释放,因为结构体中是不能定义析构函数的,只能对类使用析构函数。
12、字符串常用方法
a) (Last)IndexOf:用来查找某个字符或字符串,在一个特定字符串对象里的下标
b) SubString 截取
c) Split() 根据特定字符来分割字符串,并返回分割后的字符串的数组,可以用foreach读取
d) Join静态方法
e) Format() 静态方法
f) Replace(),替换完要接收,产生一个新的字符串
g) Trim()去首尾空格
13、==运算符和Equals()方法的区别
a) "=="如果比较的是值类型,则比较两个对象的值;如果比较的是引用类型,则比较两个对象的引用地址8是否相同
b) “equals”此方法是Object里的虚方法,默认用==进行比较,但是,大部分微软的类,及用户自定义的类,都重写了该虚方法,也就是微软和用户各自为自己编写的Object的子类 定义了相等比较规则。
14、字符串的恒定性
a) 当字符串在内存中已经被创建后,程序员在次创建相同值的字符串对象时,CLR做了优化,直接把第一个字符串的引用赋给了第二个变量,也就是说,前后两个字符串变量保存了相同的字符串对象引用
b) 注意:如果代码里是直接将两个字符串相加,那么在CLR编译IL的时候,就会直接将相加拼接后的新字符串作为变量的值。如果代码里是将两个字符串变量相加的话,那么 ,CLR会在编译IL时,调用string.Concat(string,string)方法来拼接两个字符串变量的值,最后返回一个新的字符串变量
15、StringBuilder 和 String 的区别?
a) String 在进行运算时(如赋值、拼接等)会产生一个新的实例,而 StringBuilder 则不会 。 所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder , 不要使用 String如果要操作一个不断增长的字符串,尽量不用 String 类 , 改用 StringBuilder 类。
b) 两个类的工作原理不同 :String 类是一种传统的修改字符串的方式 , 它确实可以完成把一个字符串添加到
另一个字符串上的工作没错 , 但是在 .NET 框架下 , 这个操作实在是划不来 。 因为系统先是把两个字符串写入内存 , 接着删除原来的 String 对象 , 然后创建一个 String 对象 , 并读取内存中的数据赋给该对象。这一来二去的,耗了不少时间。而使用 System.Text 命名空间下面 的StringBuilder 类就不是这样了,它提供的 Append 方法,能够在已有对象的原地进行字符串的修改 , 简单而且直接 。 当然 , 一般情况下觉察不到这二者效率的差异 , 但如果你要对某个字符串进行大量的添加操作 , 那么 StringBuilder 类所耗费的时间和 String 类简直不是一个数量级的
16、枚举本质是类
17、枚举项的相关问题
a) 如果为第一个枚举项赋了一个int值,那么后面的枚举项依次递增。
b) 可以将枚举强转成他所代表的int值
c) 因为枚举项都有对应的int值,所以Switch把他当成int看
d) C#的枚举项都是常量(可以去看IL 代码 literal)
e) 不能定义方法,属性,事件
f) 多个枚举有相同数值时。数值强转时,会返回其中最后一个枚举项
g) 枚举项的数值类型int ,long....
h) 值类型,因为继承valueType
18、IEnumerable接口
a) 只要实现该接口就可以使用foreach(封装了迭代器)
b) IEnumerable接口中主要包含GetEnumerable方法(获取迭代器对象),MoveNext方法(检查是否存在循环的下一个元素),GetCurrent方法(获得当前循环到的元素)
0220
1、集合
概念理解
常用方法
2、哈希表
内部机制
存取操作
3、泛型集合
System.Collections.Generic
List<T>
Dictionary<K, V>
4、List<T>和ArrayList的性能比较
5、应该使用try语句块的情况
0222
1、Windows Form程序相关文件
2、Path类
3、操作目录
4、操作文件
5、文件流
6、using语句的本质
7、序列化和反序列化
Serializable特性
二进制格式化器
0223
1、委托
概念理解
适用情形
委托作用
Delegate类
2、集合排序
3、匿名方法
4、多播委托
0224
1、事件
事件本质
内部机制
2、委托和事件的区别
-----------------------------------------------------------------
整理时间:4-14 整理人:周红军
课程日期:2-24,2-26,2-27,2-29,3-1
0224
知识点:(课程签名:事件)
1.1事件的定义
1.2事件和委托的关系
1.3事件出现的意义
1.4事件的简单使用
0226
知识点:(课程签名:SQL初级)
2.1数据库的概念
2.2数据库的简易流程(数据库客户端软件和数据库服务软件的执行流程)
2.3主键的概念
2.4业务主键,逻辑主键
2.5主外键关系的概念以及使用
2.6数据库的分离附加,脱机联机操作
2.7数据库的主要类型
2.8使用SQL语句来创建数据库和表(知道有这回事,不要求掌握)
2.9数据库的简单增删改查
2.10约束:(会使用)
2.10.1非空约束
2.10.2主键约束
2.10.3唯一约束
2.10.4默认约束
2.10.5检查约束
2.10.6外键约束
0227
知识点:(课程签名:SQL常见内置函数和关键字)
3.1 top的使用
3.2 Distinct的使用(去除重复数)
3.3 聚合函数:
3.3.1 Max
3.3.2 MIN
3.3.3 AVG
3.3.4 SUM
3.3.5 COUNT
3.4 between and 和 in 的使用
3.5 like, not like 通配符(%,_,[],^)
3.6 空值处理:null 是什么?(记住这句话,就记住了所有的变换)
3.7 排序(order by id asc / desc)(默认是哪一种排序?)
3.8 分组(group by ),单条件分组,多条件分组(分组时,要注意的事情[位
置,列])
3.9 筛选(Having的使用),它和where的区别
3.10 类型转换(CAST,CONVERT)
3.11 数据库的导入导出功能
3.12 union,union all
3.13 一次插入多条数据
3.14 字符串函数
3.14.1 LEN()
3.14.2 datalength()
3.14.3 LOWER()
3.14.4 UPPER()
3.14.5 LTRIM()
3.14.6 RTRIM()
3.14.7 LEFT()
3.14.8 RIGHT()
3.14.9 SUBSTRING(string,start,length)
0229
知识点(课程签名:ADO.NET)
4.1 什么是ADO.NET
4.2 连接数据库的相关类:
4.2.1 SqlConnection
4.2.2 SqlCommand
4.2.3 SqlDataReader
4.2.4 SqlDataAdapter
4.2.5 SqlDataSet
4.2.6 SqlParameter
4.2.7 DataTable
4.3 数据库连接字符串
4.4 SqlConnection类的State属性
4.5 SqlCommand类的方法:ExecuteNonQuery()
ExecuteScalar()
ExecuteReader()
4.6 StatementCompleted事件的触发
4.7 获得刚刚插入数据库的自增id
4.8 Sql注入攻击(避免方式?)
4.9 参数化查询
0301
(课程签名:ADO.NET练习)
5.1 打开文件选择框的类:OpenFileDialog以及判断用户是否点击确定
5.2 如何使用迭代生成树形菜单
5.3 文件读取类File,StreamReader的使用
0302
(课程签名:ADO.NET_SQL练习)
6.1 单例模式(单例模式的创建)
6.2 DataTable的使用
6.3 类SqlDataAdapter的使用(重点)
6.4 类SqlCommandBuilder的使用(注意:他必须操作的是有主键的数据库)
6.5 提取查询语句,封装SqlHelper类(不仅要会,而且要理解思想)
*难免有错误,如有,敬请指正。
请大家相信并坚持自己,一直走下去,等回头的时候,你会发现,你在别人眼中
,已经成功了。
----------------------------------------------------------------
何旭
1.简单SQL
1.1 T-SQL中的Switch语句
select *,
(case TotalMoney
when TotalMoney>6000 then ‘金牌‘
when TotalMoney>5000 then ‘银牌‘
else ‘普通‘
end)
from table
1.2 T-SQL中的子查询
在结果集的基础上,再次查询,注意:一定以要给结果集取别名
,否则会报错
select * from (selec * from bc) as temp
1.3 T-SQL中的Exists用法
1.3.1 先执行 的是主查询,然后再执行子查询,将匹配行的
数据显示出来
select * from tbl where exists(select * from phonTYpe
where tbl.pId = phonType.pId)
1.3.2 判断结果集是否存在(效率低)
if exists(select * from tbl where ptId)
select 1
else
select 2
1.4 T-SQL中的Any
/*Any or的意思*/
select * from PhoneNum where pTypeId = any(select
pTypeId from b)
select * from PhoneNum where pTypeId = 1 or pTypeId =
2 ....
1.5 T-SQL中的All
/*ALL and的意思*/
select * from PhoneNum where pTypeId = all(select
pTypeId from b)
select * from PhoneNum where pTypeId = 1 and pTypeId =
2 ....
2.SQL分页
2.1 SQL2008 微软官方推荐分页方式
select * from
(
select ROW_NUMBER() over (order by ar_id) as rnum,*
from Area
) as t
where runm between 10 and 14
3.SQL中表连接查询
3.1 等值连接(内连接) inner join
任何一方都必须满足连接条件,如果有一方不满足连接条件就不显示
select * from PhoneNum n inner join PhoneType t on n.pTypeId =
t.ptId
3.2 左连接(左外连接) left join
保证左边的数据都有,根据左边数据匹配
select * from PhoneNum n left join PhoneType t on n.pTypeId =
t.ptId
3.3 右连接(右外连接) right join
保证右边的数据都有,根据右边数据匹配
select * from PhoneNum n right join PhoneType t on n.pTypeId =
t.ptId
3.4 交叉连接(两张表的乘积)
select * from student cross join Score
3.5 全连接 full join
左右两边的数据都进行匹配,相当于左连接和右连接相加
和inner join刚好相反
select * from PhoneNum n full join PhoneType t on n.pTypeId =
t.ptId
4. SQL进阶
4.1 SQL中变量
4.1.1 声明变量
declare @age int
4.1.2 变量赋值
set @age=3
4.1.3 声明并赋值
select @age = 29
4.1.4 如果表数据出现多行,则将最后一行的列赋值给变量
select @age=age from Student
4.1.5 输出变量的值
print @age
5. SQL中的事务
begin transaction 开始事务
rollback transaction 回滚事务
commit transaction 提交事务
银行事务转账列子:
declare @err int
set @err = 0
begin transaction
begin
print ‘开始事务‘
update bank set balance=balance-1000 where cid=‘0001‘
set @[email protected][email protected]@ERROR
update bank set balance=balance + 1000 where
cid=‘0002‘
set @[email protected][email protected]@ERROR
if(@err>0)
begin
rollback transaction
print ‘回滚事务‘
end
else
begin
commit transaction
print ‘提交事务‘
end
end
6. SQL中存储过程
6.1 创建存储过程
create procedure usp_transferMoney
@intPerson varchar(20)
@outPerson varchar(20) ‘123‘ --可以给默认值,当参数有默认值的
时候,执行的时候可以不传该参数
@abcPerson varchar(20)
as
select @intPerson,@outPerson,@abcPerson
6.2 存储过程带输出参数
create procedure usp_outPut
@maxEnglish int output
as
begin
select * from Score
select @maxEnglish = Max(English) from Score
end
declare @maxEnglish int
select @maxEnglish = 0
exec usp_outPut @maxEnglish output
print @maxEnglish
6.3 调用存储过程
exec usp_transferMoney --不带参数
exec usp_transferMoney --带参数
exec usp_transferMoney @abcPerson=‘234‘ --指定参数
6.4 C#中如果参数是一个整型值,那么最好通过如下方式创建和赋值
SqlParameter p = new SqlParameter("@id",SqldbType.Int);
p.Direction = ParameterDirection.OutPut;
return p.value;
7. SQL中触发器
7.1 触发器定义
(1)触发器是一种特殊的 存储过程
(2)触发器不能传参数,通过事件进行触发执行
7.2 触发类型:
(1)after和for是在执行操作后触发
(2)instead of 是执行操作之前触发(替换触发器),但是不会
执行原语句
7.3 触发器触发条件:
(1)update
(2)insert
(3)delete
7.4 触发器实例
---针对tbL_abc表的新增之后的触发器
Create Trigger triggerName on tbL_abc
after
insert
as
begin
select * from inserted --保存了引发新增触发器的新增数
据,只能在触发器中访问
end
8. 索引
8.1 什么是索引
就是为某个表,某个列建立一个查找目录
如果没有目录,汉语词典就要一页一页的翻。
有了目录直接翻目录,快速定位到查找位置。
8.2 索引类型
8.2.1 聚集索引(拼音目录):
数据的排列顺序,按照聚集索引排列(控制表的物理顺序)
每个表只能建立一个聚集索引
8.2.2 非聚集索引(偏旁部首目录):
非聚集索引不会改变表的物理顺序
每个表可以建立多个非聚集索引
9. 填充因子
索引树的基本单位是索引页
填充因子 就是为每页索引设置预留空间,
在将来加入新索引的时候,就只需要更新
当前索引页,而不需要更新索引树
如每页索引 1M 大小,当填充因子设置为60%,
在每页只存放60%的数据,剩下40%留给将来加入索引
项使用。
10. 临时表
10.1 临时表是存在缓存中,而不是写在文件中
可以在系统数据库-->tempdb-->中查找
10.2 局部临时表
生命周期在当前会话,当前会话结束就销毁临时表
相当于C#的局部成员
创建时表名前加一个 ,#号
create table #tempUsers
(
id int identity(1,1),
name varchar(20)
)
10.3 全局临时表
多个用户可以共享这个全局临时表
当所有会话都退出的时候,这个全局临时表才会被销毁
相当于C#的static 静态成员
创建时表名前加两个 ,##号
create table ##tempUsers
(
id int identity(1,1),
name varchar(20)
)
11. 三层结构
11.1 什么是三层结构.
通常意义上的三层架构就是将整个业务应用划分为:表现层(
UI)、业务逻辑层(BLL)、数据访问层(DAL)。
11.2 三层结构的目的
区分层次的目的即为了“高内聚,低耦合”的思想。
11.3 具体的三层是哪三层
表现层(UI):通俗讲就是展现给用户的界面,即用户在使用
一个系统的时候的所见所得。
业务逻辑层(BLL):针对具体问题的操作,也可以说是对数
据层的操作,对数据业务逻辑处理。
数据访问层(DAL):该层所做事务直接操作数据库,针对数
据的增添、删除、修改、更新、查找等每层之间
11.4 三层之间的关系
是一种垂直的关系。
三层结构是N 层结构的一种,一般来说,层次之间是向下依赖
的,下层代码未确定其接口(契约)前,上层代
码是无法开发的,下层代码接口(契约)的变化将使上层的代
码一起变化。
11.5 三层结构的优缺点
优点: 分工明确,条理清晰,易于调试,而且具有可扩展性
。
缺点: 增加成本。
12. 邮件发送
//邮件发送方法
public void Send() {
//创建邮件对象
MailMessage mailMessage = new MailMessage();
//设置邮件字符集编码
mailMessage.SubjectEncoding = Encoding.Default;
mailMessage.BodyEncoding = Encoding.Default;
mailMessage.HeadersEncoding = Encoding.Default;
//设置邮件发件人
mailMessage.From = new MailAddress("[email protected]");
//设置邮件收件人
mailMessage.To.Add(new MailAddress
("[email protected]"));
//设置邮件主题
mailMessage.Subject = "主题";
//设置邮件正文
mailMessage.Body = "你好呀!";
//创建SMTP客户端
//SMTP服务端地址
SmtpClient smtpClient = new SmtpClient("127.0.0.1");
//SMTP客户端 通信凭证
smtpClient.Credentials = new NetworkCredential
("[email protected]", "123");
//发送
smtpClient.Send(mailMessage);
}
13. Excel导入导出
ExecelHelper 类帮助说明
1.将对象集合导出到Excel + void ObjectCollectionsToExcel<T>(List<T>
objectCollections, string path)
学要创建实体类对象集合,选中一个路径,导出即可
2.将Excel数据导入为对象集合 +List<T> ExcelToObjectCollections<T>
(string path)
将Excel文档导入为ObjectCollection对象集合,是采用反射方式,去调用实体
类 构造函数 ,以下为实体类写法
重点在public Person(IRow row)构造函数
using NPOI.SS.UserModel;
namespace MyLibrary.Test
public class Person
{
public Person(IRow row) {
this.A = row.GetCell(0).ToString();
this.B = row.GetCell(0).ToString();
this.C = row.GetCell(0).ToString();
}
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
}
源代码:
------------------------------------------------------------
王兴 3月9日
1.MD5加密
2.读取数据库后,判断dataset里列的值是否为空
3.B/S , C/S
4.WebForm 的 Visible属性
3月11日
1.可空值类型
非重点:
2.项目术语:CRM,OA,MIS,ERP
3.中文转拼音
4.Excel导出、写入、读取数据
5.邮件发送过程
6.C#发送邮件
3月12日
HTML部分:
1.静态页面 动态页面
2.URL:/ ../ ./ 分别代表什么目录
3.设置缩略图可以用width,height吗
3.有序列表,无序列表
4.表格
5.表单元素
6.input标签
7.select标签
8.textarea标签 label、fieldset标签
9.div span 及其区别
10.CSS常见样式
11.样式选择器:
11.1 标签选择器
11.2 class选择器
11.3 标签+class选择器
11.4 id选择器
11.5 伪选择器
12.DIV+CSS布局
JS部分
13.变量与全局变量
14.判断变量是否初始化
3月14日
JS基础语法部分
1.函数的声明与匿名函数
2.JS的面向对象
3.String对象
4.Array对象
5.JS中的Dictionary
6.Array的简化声明
7.遍历数组: for, for-in
DOM部分
8.事件注册,动态设置事件
9.window对象:
9.1 alert方法,confirm方法
9.2 重新导航到指定的地址:navigate方法
9.3 setInterval,clearInterval,setTimeout
3月15日
1.Window对象
1.1 window.onload事件
1.2 location
1.3 window.event
1.4 history操作历史记录
2.document
2.1 write方法
2.2 getElementById getElementByName getElementByTagName
2.3 dom的动态创建 createElement
3月16日
1.DOM元素的innerText innerHTML
2.事件冒泡机制,如果阻止事件冒泡
3.事件中的this
4.修改元素的样式是设置class属性,className属性?
5.动态修改元素的样式
6.控制层的显示:style.display
7.元素样式的position:各种值的含义和效果
8.设置元素的宽
9.parseInt方法
10.js显示居中的DIV
11.form对象
11.1 submit()/onsubmit
11.2 不同浏览器js差异
11.3 表单默认的提交方式
11.4 表单JS提交方式
----------------------------------------------------------------------
王伟 3.18-3.23 第一部分:jquery
一、 查:当你想在页面中找到某个元素的时候,就要想到他们
(^ω^)
1.1基本选择器:
Id选择器 ,Calss选择器,tag选择器,* ,组合选
择器
1.2层次选择器:
后代选择器,子代选择器,匹配选择器,~选择器
1.3节点遍历:
next(),nextAll(),prev(),prevAll(),siblings()
1.4过滤器:
:first,:last,:not,:even,:odd,:eq,:gt,:lt,
1.5属性过滤器:
$(“div[id]”),$(“div[title=text]”),
1.6表单对象过滤器:
#form1:enabled,#form1:disabled,input:checked,select
option:select,
1.7表单选择器
:input,:text,:password……
二、修改:修改页面元素就用我吧 (*^__^*) 嘻嘻……
2.1jqury对象的方法
html(),val(),text(),css(),attr(),removeAttr()
2.2样式操作:
attr(),addClass(),removeClass(),toggleClass(),hasClass()
2.3复制节点:
clone(),clone(true)
2.4替换
replaceWith(),replaceAll(),wrap(),
三、新增:当你要新增元素时就用它们吧!O(∩_∩)O哈哈~
3.1创建Dom节点 例:$(“<a href=’#’>传智播客官网</a>”)
3.2 append(),appendTo()
3.3外部插入节点
after,before,insertAfter,insertBefore
四、删除:你不要我们了吗? ( ^_^ )/~~ 拜拜
remove()
empty()
五、批量处理
5.1隐式迭代
5.2$.map,$.each
5.3元素的map和each
六、其他内容:
jquery动画
jquery cookie
第二部分:Dom补充
放在这里是不是有点莫名奇妙 (⊙_⊙?)
ChildNodes(NodeList类型-有序类数组对象),
length属性是实时的计算元素个数
insertBefore,appendChild,removeChild,replaceChild
parentNode(父元素),firstChild(第一个子元素),lastChild(最后一个子元
素),ownerDocument
nextSibling(下一个兄弟节点) , previousSibling(上一个兄弟节点)
cloneNode(bool)-复制节点(true-深拷贝,false-浅拷贝)
style.cssText设置元素的style属性值
第三部分:js高级
1. Js面向对象编程(继承)
2. 闭包
3. apply和call
4. 函数的属性(arguments)
5. Eval()方法
6. 数据类型(array,object,function(不是)……)
7. Instanceof,typeof
8. 声明式和表达式执行顺序
--------------------------------------------------------------
张连印 3.25-3.30
一:反射
1.同过反射动态调用方法 Invoke
2.Type.IsAssignableFrom(Type t);判断type是否是T的父类,可判断接口
3.Type.IsSubclassOf(Type T)//与上面方法的区别
4.通过反射获得Type的方法,如私有方法、共有方法、静态方法????
5.开发一个基于插件的记事本
6.特性,通过反射获得特性信息,如何定义特性。
二.多线程:
1.多线程的概念
2.多线程的实现
3.线程重入
4.前台线程和后台线程
5.线程的调度方式
三.
1.什么是socket?
2.Socket的常用两种通信协议:Tcp/Udp
3.Tcp、Udp的区别?
4.编写基于Socket Tcp协议的一个简单即使通信软件
5.Http服务器的运行方式。
6.长连接和短连接的区别?
7.Web服务器的工作过程
7.1.监听请求
7.2.处理请求
7.3.生成响应报文
7.4.关闭通信套接字Socket
四.一般处理程序
1.IIS Web服务器的处理过程:映射表、外部扩展程序、静态文件、动态文件、能处理、不能处理
2.HttpContext上下文对象的作用,其中包含哪些内容?
3.Asp.net系统对象:
Page、response、request、application、session、server、cookies
4.浏览器提交表单的两种方式
5.Get/Post的区别是什么?
6.使用一般处理程序制作用户登录程序。
7.Request获取Get、Post请求参数的方式分别是什么?Params
8.Response.Redirect() 方法作用。
9.Response中的写出器
10.浏览器能够提交表单需满足什么条件?
11.哪些Html标签的值能够被表单提交?
12.若Html标签的disabled属性有设置
13.读取Html模板文件,处理Html字符串
14.页面的跳转:window.location,window.parent.location,window.top.location
15.一般处理程序进行增删查改
-----------------------------------------------------------------
李荣壮 4.1-4.6
----------4.1 一般处理程序
1. 上传图片
2. 添加水印
3. 生成缩略图
4. 生成验证码
5. 设置浏览器打开文件打式为下载
----------4.2 - 4.5 WebForm和状态保持
1.Ashx与Aspx的关系
2.Aspx前台页与后台页的关系
CodeBehind(代码后置)
3.前台页与后台页之间传递数据
4.Aspx、cs、dll文件之间的关系
5.WebForm的运行流程
ASP.NET 运行图
控件树
6.Request
6.1 常用成员
UrlReferrer
UserHostAddress
MapPath(Server.MapPath调用的是Request.MapPath)
7.Response
7.1 常用成员
End()
ContentType
8.Servers
8.1 常用成员
8.2 Transfer与Redirect区别
Transfer不能内部重定向到ashx,否则会报错“执行子请求出错”
9.无状态Http
9.1 其根本原因 :Http协议是无状态的
9.2 对网站的影响
10.ASP.NET中的状态保持方案(有哪些,各自的特点,应用场景)
10.1 客户端:
10.1.1 ViewState
10.1.1.1 特点:WebForm特有,页面级的
10.1.1.2 两种使用方式
10.1.1.2.1 用户数据保存方式
10.1.1.2.2 非单值服务器控件的状态自动保存于ViewState
10.1.1.3 使用ViewState的前提
10.1.1.4 ViewState的禁用(WebForm的IsPostBack依赖于__ViewState)
10.1.2 HiddenField
10.1.3 Cokies
10.1.3.1 保存Cookie的两种方式
1. 保存于内在中
2. 保存于浏览器所在的电脑的硬盘中。
10.1.3.2 使用场景
10.1.3.3 原理
10.1.4 ControlState
10.1.5 QueryString
10.2 服务器:
10.2.1 Session
每个客户端的Session是独立的
开发场景
如何使用
一般处理程序如果使用Session需要 实现RequiresSessionState接口
与Cookies的区别
10.2.2 Application 服务器端保存共享数据的一种方式
10.2.3 Caching
10.2.4 Database
11. Web应用程序与网站的区别
12. Iframe
13. 控制父页跳转
14. 反射方式生成sql查询条件
15. MD5加密
--------4.5 AJAX
1. 优点
2. 使用步骤
3. 浏览器兼容方式创建异步对象
4. post 设置 ContentType
5. get 设置 不读取浏览器缓存
6. 地区级联选择
7. 服务器端与客户端通过json交换数据
8. 将对象序列化为json字符串。
---------------------------------------------------------------
姚羽 4.8-4.13
1.Ajax的使用
1.1四个步骤(核心!重要!)
1.1.1 创建异步对象:Create XMLHttpRequest
1.1.2 设置访问方式:open (...)---get 和 post (各自的
请求头设置语法)
1.1.3 设置回调函数:onreadystatechange = function()
{...}
1.1.4 发送请求:send (传参)
1.2处理ajax请求响应的结果responseText。 处理json格式的字符串,
注意引号问题
2.Ajax完成 增删改查 一套功能,注意一些细节
2.1 细节一:查询时Js创建表格
2.2 细节二:新增时Js创建行和删除行的操作
3.Ajax简单分页
3.1 自己利用row_number写一个简单的分页存储过程(带参数)
3.2 C#内部的事务操作(自己做成规范的方法自己将来在需要的时候可
以直接拿来用)
3.3 照片上传 和 异步上传(原理:利用Iframe)
3.4 JS自执行函数的使用和JS匿名函数的使用
4.服务器控件
4.1 三种控件的区别(html控件,有runat=server的html控件,服务器
控件)
4.2 Jsonp 的作用以及怎么实现跨域
4.3 主要掌握服务器控件的 Repeater (Eval和Bind的区别)
4.4 掌握服务器控件的ListView(各个模板的使用,以及内置分页功能
,高效分页做法)
4.5 页面生命周期 (表述这个过程和原理)
5. 缓存 (有哪几种缓存(页面级别缓存,数据源缓存,自定义缓存)---各自
用法,回忆)
5.1 缓存的条件 (为什么要有缓存?)
5.2 缓存的缺点(脏数据)
5.3 如何解决这个缺点 (缓存依赖) (原理)
5.4 Session和Cache的相同点 和 不同点
5.5 自定义缓存的 绝对失效时间 和 相对失效时间 (那两句代码,不
同的写法)
6.母版页
6.1 母版页的使用(占位符PlaceHolder),以及母版页和子页面的关系,
先执行母版页还是先执行子页面
6.2 关于这阶段的最重要的那张图(请求流行执行图),只要在面试过
程中设计到这阶段的问题,就可以想办法口述出那张图的流程,需要流利表达和
自信
C#知识回顾