.Net方向理论知识点
1、C#的委托是什么,事件是不是一种委托?
答:委托可以把一个方法作为参数代入另一个方法。
委托可以理解为指向一个函数的引用。
委托也可以理解为指向一个函数的指针。
委托和事件没有可比性,因为委托是类型,事件是对象,但事件又可以理解为是一种特殊的委托。
2、什么是GC,为什么会有GC?
答:GC,就是一种自动回收内存的机制,释放已经不再使用的对象的内存空间。GC可以在创建新对象时开辟内存空间,在使用完后释放出内存,这样就避免了内存冗余的现象,大大提高性能,避免了操作人员直接操作内存,提高了安全性。
3、概述反射和序列化。
答:反射能将某个程序集(包括对象 模块等)内的几乎所有信息解析出来。序列化是将某个对象改写成某种信息格式 然后存储存于某种介质上的过程 。
Sql Server数据库
1、维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑?为什么?
答:触发器:触发器是一种特殊类型的存储过程,触发器主要是通过事件进行触发被自动调用执行的。而存储过程可以通过存储过程的名称被调用。
尽可能用约束(包括CHECK、主键、唯一键、外键、非空字段)实现,这种方式的效率最好;其次用触发器,这种方式可以保证无论何种业务系统访问数据库都能维持数据库的完整性、一致性;最后再考虑用自写业务逻辑实现,但这种方式效率最低、编程最复杂,当为下下之策。
触发器的缺点是:当数据库之间导入导出的时候会引起不必要的触发逻辑。也会影响执行速度。
---2014-08-28--------
1、UDP模式与TCP模式有何区别
区别:
1).基于连接与无连接 (TCP当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据,TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。;UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
2).对系统资源的要求(TCP较多,UDP少)
3).UDP程序结构较简单
4).流模式与数据报模式。TCP---传输控制协议,提供的是面向连接、可靠的字节流服务;UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。
2、Override与重载的区别?
重载:在同一个作用域中,方法名称相同,参数列表不同(类型、个数、顺序)
重写:在继承的前提下,子类的方法名称、返回类型、参数列表和父类一致,访问修饰符>=父类,不能声明抛出比父类更多的检查异常
重写的意义是什么?
有选择性的继承,代码的优化机制
为什么子类方法不能声明抛出比父类更多的检查异常?
代码优化机制要求减少异常的发生
--2014-8-29
1、线程和进程的区别?
进 程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个 进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序 健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
1)一个程序至少有一个进程,一个进程至少有一个线程.
2) 线程的划分尺度小于进程,使得多线程程序的并发性高。
3) 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
4) 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
5) 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。
2、 谈谈这final finally finalize的区别?
答:final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载
finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally
块(如果有的话)
finalize—方法名。Java 技术允许使用
finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize()
方法是在垃圾收集器删除对象之前对这个对象调用的。
一、预备知识―程序的内存分配
一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)― 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) ― 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)―,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
二、什么是XML
unmanaged type* identifier;
void* identifier;
全局程序集缓存(Global Assembly Cache, GAC)
计算机范围内的代码缓存,它存储专门安装的程序集,这些程序集由计算机上的许多应用程序共享。在全局程序集缓存中部署的应用程序必须具有强名称。
.Net提供的命令行工具gacutil.exe用于支持这一功能。gacutil.exe可以将具有强名称的程序集添至全局程序集缓存。
1、什么是Code-Behind技术
将ASP.NET程序需要呈现的一个网页分为*.aspx和*.cs这两个文件,即代码分离技术,实现了HTML代码和服务器逻辑代码的分离,这样更方便于代码编写、整理及调试。
2、请列举CLR(公共语言运行时)的任意五个功能
CLR的主要功能如下
- 基类库支持 Base Class Libray Support
- 存储器管理 Memory Management
- 线程管理 Thread Management
- 存储器自动回收 Garbage Collection
- 安全性 Security
- 类型检查 Type Checker
- 例外管理 Exception Manager
- 除错管理 Debug Engine
- 中间码(MSIL)到机器码(Native)编译
- 类型装载 Class Loader
浙公网安备 33010602011771号