.NET面试基础知识

2016-08-30 来源: ぃ______゜笑颜 发布在  http://www.cnblogs.com/yuhangwang/p/5821613.html

1.    什么是Asp.Net?
答:Asp.Net是一种基于.NET平台下的动态web开发技术,它使用的是codebehind(代码后置技术),可以将前台呈现和后台代码进行有效的分离。
 
2.    什么是webservice?
答:webservice是一种跨平台的分布式技术,它采用的xml格式数据进行传递,使用了soap协议,可以穿越防火墙(因为是80端口)。
 
3.    Asp.Net和Asp的区别?
答:Asp.Net不仅仅是Asp的简单升级版;
Asp使用的是Vbscript语言进行开发,而Asp.net可以使用C#、Vb.Net等语言进行开发;
Asp使用innercode(代码内置)技术,而Asp.net使用codebehind(代码后置)技术;
Asp是解释型的编程框架,是一边解释一边执行,执行效率较低,而asp.net是编译型框架,服务器上运行的是已经编译好的代码,一次编译终身执行,因此执行效率较高。
 
4.    Asp.Net页面的生命周期?
答:对象初始化—Page_Init
        加载视图状态数据—LoadViewState
        处理回传数据—LoadPostData
     对象加载---Page_Load
        激发RaisePostDataChanged事件
     处理客户端回传事件—RaisePostBackEvent
     对象预呈现—Page_PreRender
     保存视图状态—SaveViewState
     呈现HTML—Page_Render
     释放—UnLoad
 
5.    Asp.Net的生命周期(运行机制)?
答:1.通过URL请求访问
2.IIS接到请求后交给ASPNETISAPI.dll执行
3.AaspnetIsapi.dll通过管道交给辅助进程
4.Asp.net生成Html等代码返回web服务器(IIs)
5.IIS返回Html到用户响应的浏览器
 
6.    Asp.Net中的Application、Session、Cookie、Viewstate区别?
答:由于Http协议是一种无状态的访问协议,是无法记录用户的状态,因此需要使用Application、Session、Cookie、Viewstate等来记录状态。
Application是全局变量,存在服务器端,整个应用程序有效,用于记录整个,吗应用程的信息;
Session和Cookie是全局会话级变量,用来记录会话信息。Session存在服务器端,服务器压力相对较大,而Cookie存在客户端,服务器压力相当较小;Session存储的数据量大,而且相当安全;而Cookie存储在客户端,数据量较小;
ViewState是页面级的,用于存储页面中控件状态的,同一页面有效
 
7.    Asp.Net的验证方式?
答:Windows认证、Form认证(表单认证)、Passport认证、None认证
 
1.    什么是Ajax?常用的Ajax框架有哪些?
答:
Ajax不是一门语言,它是多门语言组合在一起的一门技术;
Ajax是异步的javascript和xml;
它使用的是javascript中的xmlhttprequest对象进行数据传递的;
使用dom和css用来呈现,传递数据的格式是xml格式和josn格式。
常用的Ajax框架有:prototype、jQuery、ext-js、mootools、yui、dojo、gwt等。
 
2.    Javascript和jquery的区别?
答:jQuery是javascript的框架,它使用的是javascript语言开发的,也就是javascript的类库。
 
3.    Asp.net表单验证(窗体身份认证)的原理及配置过程?
答:Asp.net表单验证的原理是:当某一个用户用用户名和密码登录网站时,FormAuthentication(表单验证机制)将会创建一个身份验证的票据(Ticket),通过这个身份验证的票据就可以确认该用户是否有权访问。
配置过程:在项目中的web.config文件中<system.web>节点下的<authentication>中设置属性 mode=”Forms”,然后在配置节点<forms>节点属性。
同时还需要在<authorization>节点中配置用户访问权限。
页面权限可以使用继承页面方式或者管道配置方式(HttpModule)
 
4.    Asp.net有几种存储会话状态的方式?
答:web.config中<sessionState>节点一共有5种配置,分别为:Custom、InProc、Off、SQLServer、StateServer。
Custom也就是客户端的意思,即sessionState的状态存在客户端,也就是存到cookie中;
Off也就是关闭这种存储状态;
InProc是将Session的信息存储在IIS的进程中,当IIS关闭或者重启,这些信息都会消失。这种模式最大的好处就是性能最高,速度最快,但是不能跨多台服务器存储共享。sessionState模式的就这种方式。
SQLServer是将服务器Session的信息存储在SQLServer中,这个需要启动SQLServer的代理服务(SQLServer Agent),在SQLServer中执行一个叫做InstallSqlState.sql的脚步文件,会创建一个专门存储Session信息的数据库。这种方式存储的特点是,可以跨服务器来维护用户会话的信息,且信息不会丢失,但是工作负载较大。
StateServer是将Session信息存储在进程外,这种方式不仅可以将信息存储在本机的进程外,还可以讲信息存储在其他的服务器上(需要配置StateConnectionString中的相应参数,并在存储服务器上启动Asp.NET State Services服务)。这种方式的特点是:适用于需要跨服务器维护用户会话信息的情况,一旦存储状态服务器出现故障,信息将丢失。
 
5.    什么是LINQ?
答:LINQ是(Language Integrated Query)的缩写,语言级集成查询,可以借助LINQ技术,使用一种类似SQL的语法来查询任何形式的数据。目前有LINQ TO SQL、LINQ TO DATASET、LINQ TO XML等。
 
1.    如何在.NET项目中调用web service?
答:在.NET中可以使用内建类型Web Service和WebMethod特性来实现Web Service,在Asp.Net中可以添加一个新的web引用、输入其对应的Web Service的地址进而完成Web Service的调用。
 
2.    什么是异步请求web service?
答:(由于处理速度和网络传输速度等原因,会使用一个webservice从请求开始到获得响应结果之间等待一段时间,这时线程会处于阻塞状态,程序会等待请求结果导致客户端无法进行其他的动作或处理,这个时候就需要异步的使用webservice。)
异步调用其实就是调用者线程和被执行调用的线程并行执行的过程。
在asp.net异步调用的方法是使用webservice的方法名+Async()作为异步调用的方法名。调用的.aspx页面设置一个允许异步调用的属性 Async=”true”。
 
3.    如何缓存web service数据?
答:将WebMethod特性的BufferResponse设置为true,就会将web service方法的响应序列化到内存的缓存中,直到该响应被完全序列化或缓冲区已满为止,这样就实现了对web service的高速缓存。
 
4.    Web service的事务处理有哪些?
答:使用事务时,先引用System.EnterpriseServices.dll,然后可以使用TransactionOption。
Web service对于事务处理支持5个级别,分别为:Disabled、NotSupported、Support、Required和RequiresNew。
Disabled,指web service方法不在事务的范围内运行,当处理请求时,将在没有事务的情况下执行web service方法。
NotSupported,指web service方法不在事务的范围内运行,当处理请求时,将在没有事务的情况下执行web service的方法。
Support,指web service方法不在事务范围内运行,当处理请求时,将在没有事务的情况下创建web service。
Required,指web service方法需要事务,由于web service方法只能作为根对象参与事务,因此将为web service方法创建一个新的事务。
RequiresNew,指web service方法需要新事务,当处理请求时,将在新事务内创建web service。
 
5.    Web service的安全机制?
答:Web Service安全机制遵循asp.net安全机制的原则,如windows、Forms认证等。
可以Web Service服务器上配置SSL
可以利用SOAP标头自定义身份识别
可以在IIS上或者程序中设定IP地址
可以是电子证书,即CA认证
 
6.    你用过web Service么?什么情况下使用web service?
答:用过,web service可以做系统的API接口,可以整合不同平台,Ajax可以调用。(下面的内容不同人不一样,只是个事例,如电子商务-供货商接口使用的webservice,提供供货商所需要的商品数据)
 
1.    什么是进程?什么是线程?进程和线程的区别?
答:进程是一个具有独立功能的程序活动实体,实际上一个应用程序就是一个进程。
线程是执行进程的最小单位,也可以称为一个实体,线程是被系统独立调度和分派的基本单位,一个进程包含多个线程。
进程和线程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己执行的堆栈和程序计数器为其执行上下文。多线程主要是为了均衡CPU的使用时间,在同一时间合理地分配每个线程使用的资源,避免同时运行多个线程的程序时出现程序的等待或者假死现象。
 
2.    什么是多线程?什么是超线程?
答:多线程就是将一个独立的进程执行单位,分个多个不同的线程来执行,当一个线程在处理程序中的某个逻辑单元时,另外的线程也可以处理其他的逻辑单元,而当第一个线程被暂时闲置时,其他的线程可以继续处理该逻辑单元。多线程技术可以在支持多线程的操作系统和软件上,有效增强处理器在多任务、多线程方面上的处理能力。多线程的优点在于可以提高CPU的利用率。
超线程是2002年Intel发布的一项新技术,实际上就是利用特殊的硬件指令,把多线程处理器内部的两个逻辑内核模拟成两个物理芯片,从而使单个处理器就能“享用”线程级的并行计算的处理器技术。
 
3.    什么是反射?
答:反射是.NET中的重要机制,它实现依托于元数据,审查元数据并收集关于它的类型信息的能力。元数据详细记录了程序集或模块内部的结构、引用的类型和程序集和清单等。
 
4.    什么是堆?什么是栈?堆和栈的区别?
答:堆(heap)是从上往下分配,所以已用空间在自由空间的下面。C#中所有引用类型对象分配在托管堆,托管堆在内存中是连续分配的,并且内存对象的释放受垃圾收集机制管理,效率相对于堆栈来说低很多。
栈,又称堆栈(stack),实际上是自上向下进行填充,即由高内存地址指向低内存地址填充,并且堆栈的分配都是连续的。C#中的所有值类型对象和引用类型对象的引用都分配在堆栈中,堆栈根据对象的先进后出原则,依次分配和释放内存对象。堆栈根据一个指向栈尾的指针来分配内存,执行效率较高。
区别:堆是从下往上分配,所以已用空间在自由空间的下面。堆栈实际上是自上向下进行填充。堆的执行效率相对堆栈来说低许多。在C#中,栈具有自我维护性,栈的内存管理可以通过操作系统来完成。而堆的管理就需要GC来完成。
 
5.    什么死锁?
答:死锁是指两个或者两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,他们都将无法推进下去。此时系统处于死锁状态或系统产生了死锁,这些永远在互相等的进程称为死锁。
(简单的说,就是A等待B的状态为B1时才会将状态设为A1,而B等待A的状态为A1的时候才会将状态设为B1,这种逻辑一般是在多线程编程、且多线程共用同一资源的时候出现。)
 
1.    请介绍Queue的使用及特点?
答:Queue,队列,这个集合的特点是先进先出,一般用于处理邮件队列,可以均衡地利用服务器资源,避免当出现同一时间大量邮件发送时,服务器运行缓慢甚至丢失邮件。消息队列就是利用这个原理。
 
2.    请介绍Stack的使用及特点?
答:Stack,栈,这个集合的特点是先进后出原则。先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。
 
3.    如何在程序中控制.NET的线程池?
答:在.NET框架下,为每一个进程提供一个线程池,一个线程池有若干个等待操作状态,当一个等待操作完成时,线程池中的辅助线程会执行回调函数。多线程编程往往于基于用户界面的应用联系在一起,它们需要在不影响终端用户的情况下,执行一些耗时的操作。在.NET环境中,线程池的控制是通过ThreadPoolCallback()方法将传递给QueueUserWorkItem,并在线程池中分配一个可用线程来执行此方法。
 
4.    请解释多线程中的并发?
答:多线程编程中的并发执行并不是同时执行CPU,任意时刻还是只能有一个线程能够占用CPU。只不过因为多个线程之间CPU切换频率较快,给人的感觉是多线程同时在运行。
 
5.    什么是委托?什么是事件?
答:委托类似于C++中的函数指针,但比指针更安全,委托使用关键字delegate定义,委托要求传递方法的类型和参数列表必须与委托保持一致。
事件是.NET程序员经常使用的一个机制,事件是一种是对象或类能够提供通知的成员,客户端可以通过提供事件处理程序为相应的事件添加可执行代码,事件可以理解为一种特殊的委托。
 
6.    什么是多播委托?
答:多播委托是指一个由委托串成的链表,当链表上的一个委托被回调时,所有链表上该委托的后续委托将会被顺序执行。但要注意,多播委托必须是同类型的,返回值类型必须是void,并且不能带输出参数。
 
7.    类和结构的区别?
答:结构是值类型,而类是引用类型;
结构不能被继承,而类可以被继承;
结构没有默认的构造函数,也没有析构函数,并且不能有protected的修饰符,但可以不使用new进行初始化。而类有默认的构造函数,也有析构函数,可以使用protected修饰符,并且必须使用new进行初始化。
 
8.    请介绍C#中静态类的构造方法的特点?
答:C#中静态类构造方法主要有4大特点:
1.    只允许有一个无参的静态构造方法在一个类中存在
2.    静态的构造方法不会被继承
3.    在所有的静态成员被引用之前执行静态的构造方法
4.    在所有的构造方法中最先被执行的是静态的构造方法
静态构造方法最主要的特点是:静态的构造方法是最新被执行的构造方法,并且在一个类里只允许有一个无参的静态构造方法。
 
1.    简述C#派生类中的构造函数?
答:C#中继承分为两种,一种是隐身继承,一种是显示继承。当派生类继承基类时,派生的构造函数可以不指名继承那一个基类的构造函数,则继承默认的无参的构造函数。派生类也可以通过关键字base指定继承基类的某个构造函数,这种继承就是显示继承。
 
2.    什么是.NET中的私有程序集?
答:私有程序集是相对简单的一种程序集类型。私有程序集一般附带在某些软件上,并且也只能用于该软件中。当程序员在其他客户应用程序中使用这类程序集时,只需要添加引用即可进行调用。
 
3.    什么是.NET中的共享程序集?
答:共享程序集提供多个应用程序域访问同一个程序集的能力,在内存中只存在该程序集的同一份副本,这种非特定域的代码共享可以极大地节省占用内存资源。
 
4.    什么是单元测试?什么是自动化测试?什么是性能测试?
a)    单元测试:是在软件开发过程中要进行的最低级别的测试活动,他是针对最小的可测试软件元素进行的测试。
b)    自动化测试:是把以人为驱动的测试行为转化为机器执行的一种过程
c)    性能测试:是软件开发的一个重要的参考依据,性能测试通常利用一些自动化测试工具模拟软件运行中的多种伏在条件来对系统的各项性能指标进行测试。性能测试包括负载测试和压力测试
 
5.    类和接口的区别?
a)    类和接口都是引用类型,类使用关键字Class定义,接口使用interface定义;
b)    类中有默认的构造函数,而接口没有;
c)    类中可以有变量、属性、方法、索引、委托等,而接口中不能定义变量;
d)    类中定义的变量属性等可以使用访问修饰符修饰,而接口中的任意内容都不能有访问修饰符,同时接口中定义的内容不能有实现体;
e)    类和接口都被继承,但是由于C#是单继承机制,因此一个类只能继承一个类,但是可以实现多个接口;
f)    接口可以继承多个接口,接口的继承具有传递性。
6.    接口和抽象类的区别?
a)    两者表达概念不一样,抽象类是一类事物的高度聚合,接口是定义行为规范
b)    抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。
c)    继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和属性实现。
d)    在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。
 
7.    Ref和out的作用及使用区别?
答:Ref和out是将值方式传递转换成引用方式传递,即passbyvalue转换成passbyreference。Ref侧重输入,使用时需要初始化,out侧重输出,无需初始化。
 
1.    什么是里氏替换原则?
答:里氏替换原则发生在继承关系之后,其子类对象可以代替父类对象,但其父类对象不能代替子类对象.
 
2.    什么是属性?什么是特性?二者的区别?
a)    属性:属性是面向对象编程的基本概念,提供了对私有字段的访问封装
b)    特性:公共语言运行时允许添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型、字段、方法和属性等
c)    区别:属性是从设计类的角度用来修饰类的静态行为特点的,而特性是用来程序设计期或者是运行时信息的,如webservice中的webmethod特性就是如此。
 
3.    什么是迭代器?需要继承什么接口?
a)    迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象内部的表示。迭代器为遍历不同的聚集结构提供如开始、下一个、是否结束、当前哪一项等统一的接口。
b)    需要继承IEnumerable接口,并实现里面的全部方法
 
4.    什么是重载?什么是重写?重载和重写的区别?
答:重载是overload,是在同一个类下,方法名相同,参数列表不同,返回类型可同可不同,仅仅是参数列表不同的,不是重载。
重写是override,是发生在继承关系之后的,子类重写父类的抽象方法或虚方法。
区别:重载是在同一个类下,目的是便于开发者管理类的方法,而且也方便调用者调用;重写是发生在继承关系之后的,目的是为了多态。
 
5.    什么是静态方法?什么叫实例方法?静态方法和实例方法啥区别?
答:静态方法是使用static修饰的方法,生命周期是程序运行就存在。
实例方法是使用实例对象调用的方法叫做实例方法。
区别是:
a)    静态方法使用static修饰,而实例方法不需要;
b)    静态方法使用类名调用,而实例方法使用实例对象调用;
c)    静态方法不可以直接访问实例成员,而实例方法可以直接访问实例成员,静态方法和实例方法都可以访问静态成员;
d)    静态方法调用前初始化,而实例方法是在实例化对象的时候初始化。
 
6.    什么是值类型?什么是引用类型?二者的区别?
答:值类型是将数据存储在栈中的,如:int、enum、struct等;
引用类型是将数据存储在堆中,将地址存储在栈中的,如:class、string、interface等;
区别是:
a)    值类型的数据存储在栈中,引用类型的数据存储在堆中;
b)    值类型的数据读取速度快,而引用类型的数据读取的速度慢;
c)    值类型表示的是实际的数据,而引用类型表示的是内存中数据的地址或者指针;
d)    值类型继承自System.ValueType,而引用类型继承自System.Object;
e)    值类型数据在栈中,自动释放;而引用类型数据在堆中,需要GC回收;
通俗的说,值类型是现金,而引用类型是存折。
 
7.    泛型集合List<T>和ArrayList的区别?
a)    List<T>是只能添加T类型的数据,而ArrayList能添加任意类型的数据;
b)    List<T>操作无需装箱拆箱,而ArrayList需要装箱拆箱,所以List<T>执行效率相对高,而且安全;而ArrayList相对效率低,而且不安全。
c)    List<T>和ArrayList都可以使用索引添加和删除集合中的元素。
 
1.    泛型集合Dictionary<K,V>和HashTable的区别?
a)    Dictionary<K,V>添加数据时有类型约束,只能添加K,V类型的数据,而HashTable可以添加任意类型的数据;
b)    Dictionary<K,V>无需装箱和拆箱的操作,执行效率相对高,而且相对安全;而HashTable需要装箱和拆箱的操作,执行效率相对低,而且相对不安全。
c)    他们都可以通过Key值找到对应的Value的值,添加数据和便利数据方法相同。
 
2.    静态类和非静态类的区别?
a)    静态类使用关键字static修饰,而非静态类不使用关键字static修饰
b)    静态类只包含静态成员,而非静态类可以包含静态成员
c)    静态类不可以包含实例成员,而非静态类可以包含实例成员
d)    静态类可以使用类名调用静态成员,而非静态类使用实例成员调用非静态成员
e)    静态类不能被实例化,而非静态类可以被实例化
f)    静态类不包含实例构造函数,而非静态类包含实例构造函数
 
3.    什么是多态?
答:多态,指的是站在父类的角度,一个父类具有不同子类的行为。
 
4.    虚方法和抽象方法的区别?
虚方法和抽象方法都是用来被继承重写的,都是用来实现多态的。
虚方法使用关键字virtul修饰,可以有方法体,而抽象方法使用关键字asbstract修饰,不能有方法体。
抽象方法必须放在抽象类中,因为含有出现方法的类一定是抽象类,而虚方法不同。
 
5.    如何设计程序的底层?是用接口还是用抽象类?
答:一般在设计程序底层的时候,需要考虑程序的重构性、可扩展性及维护性。同时还要考虑“高内聚、低耦合”的设计原则。一般在抽取底层对象的时候,如果是一个可以清晰描述的有属性有行为的,可以考虑底层使用抽象类,如果低层的设计考虑的比较多的是规范或者对象间的关系,可以考虑使用接口作为底层的设计。
能使用接口设计就用接口,因为接口相对于抽象类而已则更为抽象。
 
6.    如何设计一个类?
答:一般设计类,我们将一组具有共同属性特点的,可以描述出来的一组对象,设计成类,将该组对象中的静态的可以描述的特征设计成类中的属性,将该组对象中的行为动作设计成方法。
 
7.    什么是序列化?什么是反序列化?
答:序列化是将对象的状态存储到特定介存储质中的过程。
反序列化是从特定介质中的数据重新构建对象的过程。
 
8.    什么是程序集?什么是应用程序域?
答:程序集(assembly),一般情况下我们认为一个项目就是一个程序集,但是项目并不代表程序集。程序集是一个由类型定义、数据文件和资源文件组成的逻辑集合(并不是物理集合),每个程序集都包含有一个程序的清单,该清单通常被附加在某个文件头上,也可以设置单独建立一个文件来包含该清单。
应用程序域(Application Domain),是CLR中提供代码运行范围、错误隔离和安全隔离的逻辑单元,功能类似于操作系统中的进程。
 
9.    什么是GC?
答:GC(Garbage Collector)垃圾回收器。是指在.NET清理托管堆上不会再被使用的对象(冬眠对象)所占用的内存,并且移动仍在被使用的活动对象,从而使他们所占有的空间保持连续。
 
1.    什么是索引?索引分哪几种及使用原则?
答:索引是对数据库表中一列或多列的值进行排序的一种结构
分为聚集索引,非聚集索引。
聚集索引是物理索引,非聚集索引是逻辑索引。
聚集索引能提高多行的检索的速度,而非聚集索引对于单行检索速度快。
一张表只能有一个聚集索引,而可以有多个非聚集索引。
使用索引的优点:
a)    创建唯一索引可以保证数据库表中的数据每一行数据的唯一性。
b)    可以大大提高数据的检索速度。
c)    可以加速表和表之间的连接。
d)    在使用分组和排序子句进行检索时,同样可以显著减少分组和排序的时间。
e)    通过使用索引可以在查询过程中使用隐藏优化器显著提高系统性能。
使用索引的缺点:
a)    创建索引和维护索引需要时间,这种时间随着数据的增加而增加。
b)    索引要占用一定的物理空间。
c)    当对表中的数据进行增加和修改时,索引也要动态的维护。
以下几种情况不适合建立索引:
d)    对于那些在查询中很少使用或者参考的列不应该创建索引
e)    对于那些只有很少数据值的列也不应该增加索引
f)    对于那些定义为text, image和bit数据类型的列不应该增加索引
g)    当修改性能远远大于检索性能时,不应该创建索引
 
2.    什么是游标?如何使用游标?
a)    数据库中的游标类似于c语言中的指针,实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。
b)     1)定义游标语句 Declare <游标名> Cursor For
 2)创建游标语句 Open <游标名>
3)提取游标列值、移动记录指针 Fetch <列名列表> From <游标名> [Into <变量列表>]
4)使用@@Fetch_Status利用While循环处理游标中的行
5)删除游标并释放语句 Close <游标名>/Deallocate <游标名>
 
3.    什么是触发器?什么情况下使用触发器?
答:触发器(trigger)是一种特殊的存储过程,它的执行不是由程序调用,也不是手工启动的,而是由事件来触发的。
当数据库中表中的数据发生变化时,包括insert,update,delete任意操作,如果我们对该表写了对应的DML触发器,那么该触发器自动执行。DML触发器的主要作用在于强制执行业 务规则,以及扩展Sql Server约束,默认值等。
Sql Server2005新增了DDL触发器,主要用于审核与规范对数据库中表,触发器,视图等结构上的操作。比如在修改表,修改列,新增表,新增列等。
触发器可通过数据库中的相关表实现级联更改,不过,通过级联引用完整性约束可以更有效地执行这些更改。
触发器可以强制比用CHECK约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。
滥用会造成数据库及应用程序的维护困难。对触发器过分的依赖,势必影响数据库的结构,同时增加了维护的复杂程度。
 
1.    什么是事务处理? 事务处理的原则是什么?你在什么情况下使用过事务处理?
答:Transaction是SQL Server中的一个逻辑工作单元,该单元将被作为一个整体进行处理。事务保证连续多个操作必须全部执行成功,否则必须立即返回回复到未执行任何操作的状态,即执行事务的结果要不全部将数据所要执行的操作完成,要不全部数据都不修改。
原则:原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持久性(Durability)
使用案例:如电子商务订单部分,订单主表和订单子表,就使用了事务处理等,只要是同时执行或者同时不执行的。
 
2.    如何处理数据库的并发问题?
a)    查看数据库的连接数、进程数、查看是否有死锁;
b)    查看数据库中的连接情况,如:并发连接数、最大连接数、不同用户的连接数;
c)    查看未使用的没有及时释放的连接;
d)    查看某个用户未及时释放的连接;
e)    Kill掉无效的连接对话;
f)    查看程序中的连接池,优化程序。
 
3.    数据库的优化原则
答:尽量使用存储过程;查询部分考虑使用索引;优化数据库的结构设计,减小数据冗余;尽量少用循环,少用游标;合理使用事务处理(注:事务处理对性能影响不大);
适当的时候可以考虑拆分数据库。
 
4.    什么是存储过程?你用过存储过程么?使用存储过程的优点?
答:存储过程类似于C#中的方法,把一组SQL语句放到一起来,用来执行管理任务或应用复杂的业务规则。
用过存储过程,一般我们开发的程序,都使用存储过程。
优点:执行速度快,允许模块化程序设计,提高了系统安全(因为可以防止SQL注入),减小网络的流通量。
 
5.    什么是SQL注入,如何防止?
答:SQL注入就是执行SQL语句的过程中,将SQL语句进行拼接时含有攻击性的敏感字符,导致数据泄露。
如select * from tablename where uid=’’ or 1=1 --’,这句话就可以把所有table中的数据取出来。
可以使用含有参数的SQL语句,可以使用存储过程,也可以在参数提交之间过滤掉敏感字符。
 
6.    什么内存泄露?如何防止?
答:内存泄露是指之前使用的一片内存,不需要使用或访问时,没有被释放掉。对于进程来说,内存相对减少,这个时候就会出现内存泄露。
一般是在数据类型转换的时候会出现内存泄露,尤其是从一个大数据转换成小数据格式的时候就会出现(内存泄露和内存溢出是一个意思)。
注意,在数据转换过程中,进行严格判断。
 
7.    如何防止网站挂”木马”?
答:在与网站发生文件交互的时候,尤其是用户上传文件,如上传图片等,会发生‘挂马’的现象。
防止:1.限制上传文件的格式;2.限制上传文件的大小;3.限制用户的权限(权限最小化原则)

相关文章