C#面试常见问题及答案



1 (1)面向对象的语言具有__继承性_性、_封装性_性、_多态性 性。
(2)能用foreach遍历访问的对象需要实现 _ IEnumerable 接口或声明_ GetEnumerator 方法的类型。1.c#中的三元运算符是__?
:__
2.当整数a赋值给?个object对象时,整数a将会被__装箱___?
3.类成员有__3__种可访问形式?
4.public static const int A=1;这段代码有错误么?是什么? const成员都是static所以应该去掉static
5.float f=-123.567F;
int i=(int)f;
i的值现在是_-123____?
6.利用operator声明且仅声明了==,有什么错误么? 要同时修改Equale和GetHash() ? 重载了"==" 就必须重载 "!="
7.委托声明的关键字是___ delegate ___?
8.用sealed修饰的类有什么特点?不可被继承
9.在Asp.net中所有的自定义用户控件都必须继承自_ System.Web.UI.UserControl _______?
10.在.Net中所有可序列化的类都被标记为__[serializable]___?
11.在.Net托管代码中我们不用担心内存漏洞,这是因为有了_ gC __?
12.下面的代码中有什么错误吗?_ abstract override 是不可以?起修饰______
using System;
class A
{
public virtual void F(){
Console.WriteLine("A.F");
}
abstract class B:A
{
public abstract override void F();
}
13.当类T只声明了私有实例构造函数时,则在T的程序文本外部,_不可以_(可以 or 不可以)从T派生出新的类,_不可以_(可以 or
不可以)直接创建T的任何实例。
14.下面这段代码有错误么?case():不行 default;
switch (i){
case():
CaseZero();
break;
case 1:
CaseOne();
break;
case 2:
dufault;
CaseTwo();
break;
}
15.在.Net中,类System.Web.UI.Page 可以被继承么?可以
2. 不定项选择:
(1) 以下叙述正确的是: B C
A. 接口中可以有虚方法。B. ?个类可以实现多个接口。 C. 接口不能被实例化。 D. 接口中可以包含已实现的方法。
(2) 从数据库读取记录,你可能用到的方法有:B C D
A. ExecuteNonQuery B. ExecuteScalar C. Fill D. ExecuteReader
2.对于?个实现了IDisposable接口的类,以下哪些项可以执行与释放或重置非托管资源相关的应用程序定义的任务?(多选) ( 
ABC ) 
A.Close B.Dispose C.Finalize 
D.using E.Quit 
3.以下关于ref和out的描述哪些项是正确的?(多选) ( ACD ) 
A.使用ref参数,传递到ref参数的参数必须最先初始化。 
B.使用out参数,传递到out参数的参数必须最先初始化。 
C.使用ref参数,必须将参数作为ref参数显式传递到方法。 
D.使用out参数,必须将参数作为out参数显式传递到方法。 
1.在对SQL Server 数据库操作时应选用(A)。
a)SQL Server .NET Framework 数据提供程序;
b)OLE DB .NET Framework 数据提供程序;
c)ODBC .NET Framework 数据提供程序;
d)Oracle .NET Framework数据提供程序;
2.下列选项中,(C)是引用类型。
a)enum类型 b)struct类型 c)string类型 d)int类型
3.关于ASP.NET中的代码隐藏文件的描述正确的是(C)
a)Web窗体页的程序的逻辑由代码组成,这些代码的创建用于与窗体交互。编程逻辑唯?与用户界面不同的文件中。该文件称
作为“代码隐藏”文件,如果用C#创建,该文件将具有“.ascx.cs”扩展名。
b)项目中所有Web窗体页的代码隐藏文件都被编译成.EXE文件。
c)项目中所有的Web窗体页的代码隐藏文件都被编译成项目动态链接库(.dll)文件。
d)以上都不正确。
4.以下描述错误的是(A)
a)在C++中支持抽象类而在C#中不支持抽象类。
b)C++中可在头文件中声明类的成员而在CPP文件中定义类的成员,在C#中没有头文件并且在同?处声明和定义类的成员。
c)在C#中可使用 new 修饰符显式隐藏从基类继承的成员。
d)在C#中要在派生类中重新定义基类的虚函数必须在前面加Override。
5.C#的数据类型有(A)
a)值类型和调用类型; b)值类型和引用类型;c)引用类型和关系类型;d)关系类型和调用类型;
6.下列描述错误的是(D)
a)类不可以多重继承而接口可以;
b)抽象类自身可以定义成员而接口不可以;
c)抽象类和接口都不能被实例化;
d)?个类可以有多个基类和多个基接口;
7.在DOM中,装载?个XML文档的方法(D)
a)save方法 b)load方法 c)loadXML方法 d)send方法
8.下列关于构造函数的描述正确的是(C)
a)构造函数可以声明返回类型。
b)构造函数不可以用private修饰
c)构造函数必须与类名相同
d)构造函数不能带参数
9.以下是?些C#中的枚举型的定义,其中错误的用法有()
a)public enum var1{ Mike = 100, Nike = 102, Jike }
b)public enum var1{ Mike = 100, Nike, Jike }
c)public enum var1{ Mike=-1 , Nike, Jike }
d)public enum var1{ Mike , Nike , Jike }
10.int[][] myArray3=new int[3][]{new int[3]{5,6,2},new int[5]{6,9,7,8,3},new int[2]{3,2}}; myArray3[2][2]的值是(D)。
a)9 b)2 c)6 d)越界
11.接口是?种引用类型,在接口中可以声明(A),但不可以声明公有的域或私有的成员变量。
a)方法、属性、索引器和事件; b)方法、属性信息、属性; c)索引器和字段; d)事件和字段;
12.ASP.NET框架中,服务器控件是为配合Web表单工作而专门设计的。服务器控件有两种类型,它们是(A )
a)HTML控件和Web控件 b)HTML控件和XML控件 c)XML控件和Web控件 d)HTML控件和IIS控件
13.ASP.NET中,在Web窗体页上注册?个用户控件,指定该控件的名称为”Mike”,正确的注册指令为( D)
a)<%@Register TagPrefix = “Mike” TagName = “Space2” Src = “myX.ascx”%>
b)<%@Register TagPrefix = “Space2” TagName = “Mike” Src = “myX.ascx”%>
c)<%@Register TagPrefix = “SpaceX” TagName = “Space2” Src = “Mike”%>
d)以上皆非
14.在ADO.NET中,对于Command对象的ExecuteNonQuery()方法和ExecuteReader()方法,下面叙述错误的是(C)。
a)insert、update、delete等操作的Sql语句主要用ExecuteNonQuery()方法来执行;
b)ExecuteNonQuery()方法返回执行Sql语句所影响的行数。
c)Select操作的Sql语句只能由ExecuteReader()方法来执行;
d)ExecuteReader()方法返回?个DataReder对象;
15.下列ASP.NET语句(b)正确地创建了?个与SQL Server 2000数据库的连接。
a)SqlConnection con1 = new Connection(“Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB”);
b)SqlConnection con1 = new SqlConnection(“Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB”);
c)SqlConnection con1 = new SqlConnection(Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB);
d)SqlConnection con1 = new OleDbConnection(“Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB”);
16.Winform中,关于ToolBar控件的属性和事件的描述不正确的是(D)。
a)Buttons属性表示ToolBar控件的所有工具栏按钮
b)ButtonSize属性表示ToolBar控件上的工具栏按钮的大小,如高度和宽度
c)DropDownArrows属性表明工具栏按钮(该按钮有?列值需要以下拉方式显示)旁边是否显示下箭头键
d)ButtonClick事件在用户单击工具栏任何地方时都会触发
17.在ADO.NET中执行?个存储过程时,如果要设置输出参数则必须同时设置参数的方向和(B ),必要时还要设置参数尺寸。
a)大小; b)上限; c)初始值; d)类型;
18.如果将窗体的FormBoderStyle设置为None,则( B)。
a)窗体没有边框并不能调整大小; b)窗体没有边框但能调整大小;
c)窗体有边框但不能调整大小; d)窗体是透明的;
19.如果要将窗体设置为透明的,则( B)
a)要将FormBoderStyle属性设置为None; b)要将Opacity属性设置为小于100%得值;
c)要将locked 属性设置为True; d)要将 Enabled属性设置为True;
20.下列关于C#中索引器理解正确的是(B/C )
a)索引器的参数必须是两个或两个以上 b)索引器的参数类型必须是整数型
c)索引器没有名字 d)以上皆非
21.下面描述错误的是( C/D)。
a)窗体也是控件; b)窗体也是类; c)控件是从窗体继承来的; d)窗体的父类是控件类;
22.要对注册表进行操作则必须包含( D)。
a)System.ComponentModel命名空间; b)System.Collections命名空间;
c)System.Threading命名空间; d)Microsoft.Win32命名空间;
23.要创建多文档应用程序,需要将窗体的(D )属性设为true。
a)DrawGrid; b)ShowInTaskbar; c)Enabled; d)IsMdiContainer;
24.如果设treeView1=new TreeView(),则treeView1.Nodes.Add("根节点")返回的是?个 ()类型的值。
a)TreeNode;
b)int;
b)int;
c)string;
d)TreeView;
25.下面关于XML的描述错误的是(D)。
a)XML提供?种描述结构化数据的方法;
b)XML 是?种简单、与平台无关并被广泛采用的标准;
c)XML文档可承载各种信息;
d)XML只是为了生成结构化文档;
1.装箱、拆箱操作发生在: ( C )
A.类与对象之间 B.对象与对象之间
C.引用类型与值类型之间 D.引用类型与引用类型之间
2.用户类若想支持Foreach语句需要实现的接口是: ( A )
A.IEnumerableB.IEnumerator
C.ICollectionD.ICollectData
3..Net Framework通过什么与COM组件进行交互操作?( C )
A.Side By SideB.Web Service
C.InteropD.PInvoke
4..Net依靠以下哪?项技术解决COM存在的Dll Hell问题的?( A )
A.Side By SideB.Interop
C.PInvokeD.COM+
5.装箱与拆箱操作是否是互逆的操作?( B )
A.是B.否
6.以下哪个是可以变长的数组?( D )
A.Array B.string[]
C.string[N] D.ArrayList
7.用户自定义异常类需要从以下哪个类继承:( A )
A.Exception B.CustomException
C.ApplicationException D.BaseException
8.以下代码段中能否编译通过?请给出理由。
try
{
}
catch(FileNotFoundException e1)
{
}
catch(Exception e2)
{
}
catch(IOException e3)
{
}
catch
{

9.对于?个实现了IDisposable接口的类,以下哪些项可以执行与释放或重置非托管资源相关的应用程序定义的任务?(多选)
( ABC )
A.Close B.DisposeC.Finalize
D.using E.Quit
10.Net依赖以下哪项技术实现跨语言互用性?( C )
A.CLR B.CTS C.CLS D.CTT
11.请问: String类与StringBuilder类有什么区别?为什么在.Net类库中要同时存在这2个类?(简答)
如果要操作?个不断增长的字符串,尽量不用String类,改用StringBuilder类。两个类的工作原理不同:String类是?种传统的修改
字符串的方式,它确实可以完成把?个字符串添加到另?个字符串上的工作没错,但是在.NET框架下,这个操作实在是划不来。因
为系统先是把两个字符串写入内存,接着删除原来的String对象,然后创建?个String对象,并读取内存中的数据赋给该对象。这
?来二去的,耗了不少时间。而使用System.Text命名空间下面的StringBuilder类就不是这样了,它提供的Append方法,能够在已
有对象的原地进行字符串的修改,简单而且直接。当然,?般情况下觉察不到这二者效率的差异,但如果你要对某个字符串进行
大量的添加操作,那么StringBuilder类所耗费的时间和String类简直不是?个数量级的。 
12.以下哪个类是int的基类?( )
A.Int32 B.Object C.ValueType D.Int16

二、C# 部分*
13.以下哪些可以作为接口成员?(多选) ( ABDE )
A.方法B.属性C.字段D.事件E.索引器
F.构造函数G.析构函数
14.以下关于ref和out的描述哪些项是正确的?(多选) (   ACD     )
A.使用ref参数,传递到ref参数的参数必须最先初始化。
B.使用out参数,传递到out参数的参数必须最先初始化。
C.使用ref参数,必须将参数作为ref参数显式传递到方法。
D.使用out参数,必须将参数作为out参数显式传递到方法。
15.“访问范围限定于此程序或那些由它所属的类派生的类型”是对以下哪个成员可访问性含义的正确描述?(   )
A.public        B.protected            C.internal         D.protected internal
16.class Class1
{
    private static int count = 0;
    static Class1()
    {
        count++;
    }
    public Class1()
    {
        count++;
    }
}
Class1 o1 = new Class1();
Class1 o2 = new Class1();
请问,o1.Count的值是多少?(  )
A.1         B.2             C.3             D.4
17.abstract class BaseClass
{
    public virtual void MethodA()
    {
    }
    public virtual void MethodB()
    {
    }
}
class Class1: BaseClass
{
    public void MethodA(string arg)
    {
    }
    public override void MethodB()
    {
    }
}
class Class2: Class1
{
    new public void MethodB()
    {
    }
}
class MainClass
{
    public static void Main(string[] args)
    {
        Class2 o = new Class2();
        Console.WriteLine(o.MethodA());
    }
}
请问,o.MethodA调用的是: (  )
A.BaseClass.MethodAB.Class2.MethodA
C.Class1.MethodAD.都不是
18.请叙述属性与索引器的区别。
属性索引器    
  通过名称标识。通过签名标识。    
  通过简单名称或成员访问来访问。通过元素访问来访问。    
  可以为静态成员或实例成员。必须为实例成员。    
  属性的   get   访问器没有参数。索引器的   get   访问器具有与索引器相同的形参表。    
  属性的   set   访问器包含隐式   value   参数。除了   value   参数外,索引器的   set   访问器还具有与索引器相同的形参表。
19.请叙述const与readonly的区别。
每一个class至多只可以定义一个static构造函数,并且不允许增加访问级别关键字,参数列必须为空。
        为了不违背编码规则,通常把static数据成员声明为private,然后通过statci property提供读写访问。
        const 关键字用于修改字段或局部变量的声明。它指定字段或局部变量的值不能被修改。常数声明引入给定类型的一个或多个常数。
        const数据成员的声明式必须包含初值,且初值必须是一个常量表达式。因为它是在编译时就需要完全评估。
        const成员可以使用另一个const成员来初始化,前提是两者之间没有循环依赖。
        readonly在运行期评估赋值,使我们得以在确保“只读访问”的前提下,把object的初始化动作推迟到运行期进行。
        readonly 关键字与 const 关键字不同: const 字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。另外,const 字段是编译时常数,而 readonly 字段可用于运行时常数。
  readonly 只能在声明时或者构造函数里面初始化,并且不能在 static 修饰的构造函数里面。
21.您需要创建一个ASP.NET应用程序,公司考虑使用Windows身份认证。
  所有的用户都存在于AllWin这个域中。您想要使用下列认证规则来配置这个应用程序:
    a、匿名用户不允许访问这个应用程序。
    b、所有雇员除了Tess和King都允许访问这个应用程序。
  请问您应该使用以下哪一个代码段来配置这个应用程序?(  )
A. <authorization>
   <deny users=”allwin\tess, allwin\king”>
   <allow users=”*”>
   <deny users=”?”>
 </authorization>
B. <authorization>
   <allow users=”*”>
   <deny users=”allwin\tess, allwin\king”>
   <deny users=”?”>
 </authorization>
C. <authorization>
   <deny users=”allwin\tess, allwin\king”>
   <deny users=”?”>
   <allow users=”*”>
 </authorization>
D. <authorization>
   <allow users=”allwin\tess, allwin\king”>
   <allow users=”*”>
 </authorization>
E.<authorization>
   <allow users=”*”>
   <deny users=”allwin\tess, allwin\king”>
 </authorization>
22.您要创建一个显示公司员工列表的应用程序。您使用一个DataGrid控件显示员工的列表。您打算修改这个控件以便在这个Grid的Footer显示员工合计数。请问您应该怎么做?(  C?  )
  A.重写OnPreRender事件,当Grid的Footer行被创建时显示合计数。
  B.重写OnItemCreated事件,当Grid的Footer行被创建时显示合计数。
  C.重写OnItemDataBound事件,当Grid的Footer行被创建时显示合计数。
  D. 重写OnLayout事件,当Grid的Footer行被创建时显示合计数。
23.您要创建ASP.NET应用程序用于运行AllWin公司内部的Web站点,这个应用程序包含了50个页面。您想要配置这个应用程序以便当发生一个HTTP代码错误时它可以显示一个自定义的错误页面给用户。您想要花最小的代价完成这些目标,您应该怎么做?(多选)(  CD   )
  A.在这个应用程序的Global.asax文件中创建一个Application_Error过程去处理ASP.NET代码错误。
  B.在这个应用程序的Web.config文件中创建一个applicationError节去处理ASP.NET代码错误。
  C.在这个应用程序的Global.asax文件中创建一个CustomErrors事件去处理HTTP错误。
  D.在这个应用程序的Web.config文件中创建一个CustomErrors节去处理HTTP错误。
  E.在这个应用程序的每一页中添加一个Page指示符去处理ASP.NET 代码错误。
  F. 在这个应用程序的每一页中添加一个Page指示符去处理ASP.NET HTTP错误。
24.您的公司有一个DB Server,名为AllWin,其上装了MS SQLSERVER 2000。现在需要您写一个数据库连接字符串,用以连接AllWin上SQL SERVER中的一个名为PubBase实例的Test库。请问,应该选择下面哪一个字符串?(  )
  A. “Server=AllWin;Data Source=PubBase;Initial Catalog=Test;Integrated Security=SSPI”
  B. “Server= AllWin;Data Source=PubBase;Database=Test;Integrated Security= SSPI”
  C. “Data Source= AllWin \PubBase;Initial Category=PubBase;Integrated Security= SSPI”
  D. “Data Source= AllWin \ PubBase;Database=Test;Integrated Security= SSPI”
25.您为AllWin公司创建了一个ASP.NET应用程序。这个应用程序调用一个 Xml Web Service。这个 Xml Web Service 将返回一个包含了公司雇员列表的DataSet对象。请问您该如何在这个程序中使用这个 Xml Web Service?(  )
  A.在“引用”对话框的.Net标签中选择 System.Web.Services.dll。
  B.在“Web引用”对话框中输入这个 XML Web service 的地址。
  C.在您的 Global.asax.cs 中添加一条 using 语句并指定这个 XML Web service 的地址。
  D.在您的 Global.asax.cs 中写一个事件处理器导入这个 Xml Web Service 相应的 .wsdl 和 .disco 文件。
26.您要创建一个ASP.NET应用程序在DataGrid控件中显示一个经过排序的列表。产品数据被存放于一个名为PubBase的Microsoft SQL Server 数据库。每个产品的主键是ProductID,Numeric型并且每个产品有一个字母描述字段,名为ProductName。您使用一个SqlDataAdapter对象和一个SqlCommand对象通过调用一个存储过程从数据库中获取产品数据。您将SqlCommand对象的CommandType属性设置为CommandType.StoredProcedure,并将它的CommandText属性设置为procProductList。您成功的获取了一个DataTable对象,其中是已经按ProductID降序排列的产品列表。您打算显示以相反的字母顺序排列的ProductName,请问该怎么做? (  )
  A. 将SqlCommand对象的CommandType属性修改为CommandType.Text,将CommandText属性修改为”SELECT * FROM procProductList ORDER BY ProductName DESC”。然后将这个DataTable对象绑定到DataGrid控件。
  B. 创建一个基于这个DataTable对象的新的DataView并将这个DataView的Sort属性设置为“ProductName DESC”。然后将这个DataView对象绑定到DataGrid控件。
  C. 将DataGrid控件的AllowSorting属性设置为True,并将DataGridColumn的SortExpression属性设置为 “ProductName DESC”.以显示ProductName。然后将这个DataTable对象绑定到DataGrid控件。
  D. 将DataTable对象的DisplayExpression属性设置为 “ORDER BY ProductName DESC”.。然后将这个DataTable对象绑定到DataGrid控件。
76.C#代码实现,确保windows程序只有一个实例(instance)
 
        ///<summary>
        ///应用程序的主入口点。
        ///</summary>
        [STAThread]
        staticvoid Main()
        {
            //防止程序多次运行
            if(!OneInstance.IsFirst("GetPayInfo"))
            {
                MessageBox.Show ("警告:程序正在运行中! 请不要重复打开程序!可在右下角系统栏找到!","程序错误提示:",MessageBoxButtons.OK,MessageBoxIcon.Stop);
                return;
            }
            Application.Run(new Form1());
        }
        // ******************* 防止程序多次执行 **************************
        publicabstractclass OneInstance
        {
            ///<summary>
            ///判断程序是否正在运行
            ///</summary>
            ///<param name="appId">程序名称</param>
            ///<returns>如果程序是第一次运行返回True,否则返回False</returns>
            publicstaticbool IsFirst(string appId)
            {
                bool ret=false;
                if(OpenMutex(0x1F0001,0,appId)==IntPtr.Zero)
                {
                    CreateMutex(IntPtr.Zero,0,appId);
                    ret=true;
                }
                return ret;
           
            [DllImport("Kernel32.dll",CharSet=CharSet.Auto)]
            privatestaticextern IntPtr OpenMutex(
                uint dwDesiredAccess, // access
                int bInheritHandle,    // inheritance option
                string lpName          // object name
                );
 
            [DllImport("Kernel32.dll",CharSet=CharSet.Auto)]
            privatestaticextern IntPtr CreateMutex(
                IntPtr lpMutexAttributes, // SD
                int bInitialOwner,                       // initial owner
                string lpName                            // object name
                );
        }
3. 简述 private、 protected、 public、 internal 修饰符的访问权限。
private : 私有成员, 在类的内部才可以访问。protected : 保护成员,该类内部和继承类中可以访问。public : 公共成员,完全公开,没有访问限制。internal: 在同一命名空间内可以访问。
4. 写出一条Sql语句:取出表A中第31到第40记录(SQLServer, 以自动增长的ID作为主键,  注意:ID可能不是连续的。)
select top 10 * from A where id not in (select top 30 id from A)
解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)
5 .列举ASP.NET 页面之间传递值的几种方式。
1.     使用QueryString, 如....?id=1; response. Redirect()....
2.使用Session变量
3.使用Server.Transfer
2。请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。
session(viewstate) 简单,但易丢失
application 全局
cookie 简单,但可能不支持,可能被伪造
input ttype="hidden" 简单,可能被伪造
url参数简单,显示于地址栏,长度有限
数据库稳定,安全,但性能相对弱
2.override与重载的区别
Override用来重写父类的方法,重载使用相同名的方法或操作符拥有不同类型的参数
3、.net的错误处理机制是什么
.net错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止。
4、C#中接口和类的异同
接口和类都是类,不同的事,接口只包含方法或属性的声明,不包含具体实现方法的代码,接口可以实现多继承,而类只能是单继承,继承接口的类必须实现接口中声明的方法或属性。接口主要定义一种规范,统一调用方法,在大型项目中接口正发挥日益重要的作用。
4、DataReader和DataSet的异同
DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection,在线操作数据库..任何对SqlConnection的操作都会引发DataReader的异常..因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的..因为DataReader的特殊性和高性能.所以DataReader是只进的..你读了第一条后就不能再去读取第一条了..
DataSet则是将数据一次性加载在内存中.抛弃数据库连接..读取完毕即放弃数据库连接..因为DataSet将数据全部加载在内存中.所以比较消耗内存...但是确比DataReader要灵活..可以动态的添加行,列,数据.对数据库进行回传更新操作...



1.     在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?
Using 引入一个名子空间,或在使用了一个对像后自动调用其IDespose,New 实例化一个对像,或修饰一个方法,表此方法完全重写此方法
2.在下面的例子里
using System;
class A
{
public A(){
PrintFields();
}
public virtual void PrintFields(){}
}
class B:A
{
int x=1;
int y;
public B(){
y=-1;
}
public override void PrintFields(){
Console.WriteLine("x={0},y={1}",x,y);
}
当使用new B()创建B的实例时,产生什么输出?X=1,Y=0
3.下面的例子中
using System;
class A
{
public static int X;
static A(){
X=B.Y+1;
}
}
class B
{
public static int Y=A.X+1;
static B(){}
static void Main(){
Console.WriteLine("X={0},Y={1}",A.X,B.Y);
}
}
产生的输出结果是什么?x=1,y=2
4.谈谈类和结构的区别?
最大区别一个是引用类型,一个是值类型默认成员访问为public是另外一个区别
1. 在.net(C# or vb.net)中如何获得当前窗体或控件的句柄,特别是控件本身的句柄(请列举)。
this(C#) Me(vb.net).
2在.net(C# or vb.net)中如何用户自定义消息,并在窗体中处理这些消息。
在form中重载DefWndProc函数来处理消息:
protected override void DefWndProc ( ref System.WinForms.Message m )
{
switch(m.msg)
{
case WM_Lbutton :
 ///string与MFC中的CString的Format函数的使用方法有所不同
 string message = string.Format("收到消息!参数为:{0},{1}",m.wParam,m.lParam);
 MessageBox.Show(message);///显示一个消息框
 break;
case USER:
处理的代码
default:
 base.DefWndProc(ref m);///调用基类函数处理非自定义消息。
 break;
}
}
3. 在.net(C# or vb.net)如何启动另一个程序。process
4. 在.net(C# or vb.net)中如何取消一个窗体的关闭
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel=true;
}
5. 在.net(C# or vb.net)中,Appplication.Exit 还是 Form.Close有什么不同?
答案:一个是退出整个应用程序,一个是关闭其中一个form
6. 在C#中有一个double型的变量,比如10321.5,比如122235401.21644,作为货币的值如何按各个不同国家的习惯来输出。比如美国用$10,321.50和$122,235,401.22而在英国则为£10 321.50和£122 235 401.22
答案:
System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-US");
//System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-GB");为英国货币类型
decimal y = 9999999999999999999999999999m;
string str = String.Format(MyCulture,"My amount = {0:c}",y);
7. 某一密码仅使用K、L、M、N、O共5个字母,密码中的单词从左向右排列,密码单词必须遵循如下规则:
(1)密码单词的最小长度是两个字母,可以相同,也可以不同
(2) K不可能是单词的第一个字母
(3) 如果L出现,则出现次数不止一次
(4) M不能使最后一个也不能是倒数第二个字母
(5) K出现,则N就一定出现
(6) O如果是最后一个字母,则L一定出现
问题一:下列哪一个字母可以放在LO中的O后面,形成一个3个字母的密码单词?
A) K B)L C) M D) N
答案:B
问题二:如果能得到的字母是K、L、M,那么能够形成的两个字母长的密码单词的总数是多少?
A)1个 B)3个 C)6个 D)9个
答案:A
问题三:下列哪一个是单词密码?
A) KLLN B) LOML C) MLLO D)NMKO
答案:C
8. 62-63=1 等式不成立,请移动一个数字(不可以移动减号和等于号),使得等式成立,如何移动?
答案:62移动成2的6次方
new有几种用法
第一种:new Class();
第二种:覆盖方法
public new XXXX(){}
第三种:new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。
2.如何把一个array复制到arrayList里
foreach( object o in array )arrayList.Add(o);
3.datagrid.datasouse可以连接什么数据源 [dataset,datatable,dataview]
dataset,datatable,dataview , IList
4.概述反射和序列化
反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性
序列化:序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。在另一端,反序列化将从该流重新构造对象。
5.概述o/r mapping 的原理
利用反射,配置 将类于数据库表映射
7.用sealed修饰的类有什么特点
sealed 修饰符用于防止从所修饰的类派生出其它类。如果一个密封类被指定为其它类的基类,则会发生编译时错误。
密封类不能同时为抽象类。
sealed 修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。具体说来,由于密封类永远不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。
11.详述.NET里class和struct的异同!
class:放在 ? struct放在?
struct值传递
类与结构有很多相似之处:结构可以实现接口,并且可以具有与类相同的成员类型。然而,结构在几个重要方面不同于类:结构为值类型而不是引用类型,并且结构不支持继承。结构的值存储在“在堆栈上”或“内联”。细心的程序员有时可以通过聪明地使用结构来增强性能。
12.概述.NET里对 remoting 和 webservice 两项技术的理解和实际中的应用。
远程逻辑调用,remoing接口只能用在.net中
13.什么是code-behind技术   aspx and cs
14.概述三层结构体系        web/business/dataaccess
15.asp.net如何实现MVC模式,举例说明! web/business/dataaccess
2.什么是ASP.net中的用户控件
答:用户控件就是.ascx扩展名的东西喽,可以拖到不同的页面中调用,以节省代码.比如登陆可能在多个页面上有,就可以做成用户控件,但是有一个问题就是用户控件拖到不同级别的目录下后里面的图片等的相对路径会变得不准确,需要自已写方法调整.
3.什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
答:装箱就是把值类型转成引用类型,从MS IL角度看好像是boxing,没记错的话是把值从堆栈转到堆中.拆箱相反,重载就是指一个方法名同,参数个数不同,返回值可以相同的方法.CLR是通用语言运行时,其它的不清楚.
4.列举一下你所了解的XML技术及其应用
答:XML可是好东西,保存配置,站与站之间的交流,WEB SERVICE都要用它.
5.值类型和引用类型的区别?写出C#的样例代码。
答:结构是值类型,类是引用类型,所以传结构就是值类型的应用啦,传对象或类就是引用类型的,这个不用多写了吧.
6.ADO.net中常用的对象有哪些?分别描述一下。
答:connection command sqladapter dataset datatable dataview等等.写不完了.
7.如何理解委托?
答:据说相当于函数指针,定义了委托就可以在不调用原方法名称的情况下调用那个方法.
msdn2005中是这样解释的:
委托具有以下特点:
委托类似于 C++ 函数指针,但它是类型安全的。
委托允许将方法作为参数进行传递。
委托可用于定义回调方法。
委托可以链接在一起;例如,可以对一个事件调用多个方法。
方法不需要与委托签名精确匹配。有关更多信息,请参见协变和逆变。
C# 2.0 版引入了匿名方法的概念,此类方法允许将代码块作为参数传递,以代替单独定义的方法。
8.C#中的接口和类有什么异同。
答:接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!
而类是负责功能的具体实现!
在类中也有抽象类的定义,抽象类与接口的区别在于:
抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化。
但接口是一个行为的规范,里面的所有东西都是抽象的!
一个类只可以继承一个基类也就是父类,但可以实现多个接口
9.。net中读写数据库需要用到哪些类?他们的作用
答:这个类自已可以写的啊,你是指基类吗?那configuration,sqlconnection,sqlcommand等都要用到.
10.UDP连接和TCP连接的异同。
答:前者只管传,不管数据到不到,无须建立连接.后者保证传输的数据准确,须要连结.
11.ASP.net的身份验证方式有哪些?分别是什么原理?
答:form认证,windows集成认证等,原理不清楚.
13.什么是code-Behind技术。
答:代码分离,这是个明智的东西,像ASP这样混成一堆很不爽.或者可以理解成HTML代码写在前台,C#代码写在后台.当然前台也有脚本,类的调用等,其实写在一起也是可以的.
15..net中读写XML的类都归属于哪些命名空间?
答:System.Xml
16.解释一下UDDI、WSDL的意义及其作用。
答:
17.什么是SOAP,有哪些应用。
答:SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的协议,是一个基于XML的协议。使用SOAP,不用考虑任何特定的传输协议(最常用的还是HTTP协议),可以允许任何类型的对象或代码,在任何平台上,以任何一直语言相互通信。这种相互通信采用的是XML格式的消息,具体请看:http://playist.blogchina.com/2521621.html
20.常用的调用webservice方法有哪些?
答:
可以从浏览器、ASP页或其他WEB服务调用可以使用HTTP-GET   HTTP-POST访问WEB服务也可以从ASP页或其他WEB服务向其他WEB服务发出SOAP请求HTTP-GET   HTTP-POST  SOAP  使用WEB服务代理
6.  私有程序集与共享程序集有什么区别?
一个私有程序集通常为单个应用程序所使用,并且存储于这个应用程序所在的目录之中,或此目录下面的一个子目录中。共享程序集通常存储在全局程序集缓存(Global Assembly Cache)之中,这是一个由.NET运行时所维护的程序集仓库。共享程序集通常是对许多应用程序都有用的代码库,比如.NET Framework类。
7.  请解释进程与线程的区别?进程与程序的区别?
一般,一个应用程序对应于一个或多个进程,可以把进程看作是该应用程序在*作系统中的标识;而一个进程通常由多个线程组成,而线程是*作系统为该应用程序分配处理时间的最小单元。
8.  CLR与IL分别是什么含义?
CLR:公共语言运行时,类似于Java中的JVM,Java虚拟机;在.Net环境下,各种编程语言使用一种共同的基础资源环境,这就是CLR,CLR将直接与*作系统进行通信,而编程语言如C#.NET将尽量避免直接与*作系统直接通信,加强了程序代码的执行安全性,可以这样看:CLR就是具体的编程语言如:C#.NET与*作系统之间的翻译,同时它为具体的编程语言提供了许多资源:
IL,中间语言,也称MSIL,微软中间语言,或CIL,通用中间语言;所有.NET源代码(不管用哪种语言编写)在进行编译时都被编译成IL。在应用程序运行时被即时(Just-In-Time,JIT)编译器处理成为机器码,被解释及执行。
10 .请解释ASP。NET中以什么方式进行数据验证
       Aps.net 中有非空验证,比较验证,取值范围验证,正则表达式验证及客户自定义验证五大控件,另还有一个集中验证信息处理控件
11.  WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回。
在web控件发生事件时,客户端采用提交的形式将数据交回服务端,服务端先调用Page_Load事件,然后根据传回的状态信息自动调用服务端事件自动传回是当我们在点击客户端控件时,采用提交表单的形式将数据直接传回到务端
只有通过自动传回才能实现服务端事件的机制,如果没有自动回传机制就只能调用客户端事件,而不能调用服务端事件
12.  WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用?
可以调用
例如:<asp:TextBox id="TextBox1" οnclick="clientfunction();" runat="server">
</asp:TextBox>
<INPUT id="Button2" value="Button" name="Button2"
runat="server" οnclick="clientfunction();">
13.  请解释web.config文件中的重要节点
appSettings包含自定义应用程序设置。
system.web 系统配置
compilation动态调试编译设置
customErrors自定义错误信息设置
authentication身份验证,此节设置应用程序的身份验证策略。
authorization授权, 此节设置应用程序的授权策略.
14.  请解释ASP。NET中的web页面与其隐藏类之间的关系?
一个ASP.NET页面一般都对应一个隐藏类,一般都在ASP.NET页面的声明中指定了隐藏类例如一个页面Tst1.aspx的页面声明如下
<%@ Page language="c#" Codebehind="Tst1.aspx.cs" Inherits="T1.Tst1" %>
Codebehind="Tst1.aspx.cs" 表明经编译此页面时使用哪一个代码文件
Inherits="T1.Tst1" 表用运行时使用哪一个隐藏类
15.  什么是viewstate,能否禁用?是否所用控件都可以禁用?
Viewstate是保存状态的一种机制,EnableViewState属性设置为false即可禁用
16.  当发现不能读取页面上的输入的数据时很有可能是什么原因造成的?怎么解决
很有可能是在Page_Load中数据处理时没有进行Page的IsPostBack属性判断
17.  请解释什么是上下文对象,在什么情况下要使用上下文对象
上下文对象是指HttpContext类的Current 属性,当我们在一个普通类中要访问内置对象(Response,Request,Session,Server,Appliction等)时就要以使用此对象
18.  请解释转发与跳转的区别?
转发就是服务端的跳转A页面提交数据到B页面,B页面进行处理然后从服务端跳转到其它页面
跳转就是指客户端的跳转
1.请简述一下用Socket进行同步通讯编程的详细步骤
1、在应用程序和远程设备中使用协议和网络地址初始化套接字
2、在应用程序中通过指定端口和地址建立监听
3、远程设备发出连接请求
4、应用程序接受连接产生通信scoket
5、应用程序和远程设备开始通讯(在通讯中应用程序将挂起直到通讯结束)
6、通讯结束,关闭应用程序和远程设备的Socket回收资源
1、在C#中,string   str    null   与   string   str    “”   请尽量使用文字或图象说明其中的区别。  
  string   str    null   是不给他分配内存空间,而string   str    “”给它分配长度为空字符窜的内存空间.      
  2、请详述在dotnet中类(class)与结构(struct)的异同:(10分)  
  Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.      
  3、根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写:(10)    
  namespace   test  
  
  public   delegate   void   OnDBOperate();  
  public   class   UserControlBase    System.Windows.Forms.UserControl    
  
  public   event   OnDBOperate   OnNew;  
  privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs   e)  
  
  if(e.Button.Equals(BtnNew))  
  
        //请在以下补齐代码用来调用OnDBOperate委托签名的OnNew事件。                                                                                                         
  
  
  
  
  ____________________________________________________________________  
  if(   OnNew   !=   null   
  OnNew(   this,    );      
  4、分析以下代码,完成填空(10分)  
  string   strTmp    "abcdefg某某某";  
  int   i=   System.Text.Encoding.Default.GetBytes(strTmp).Length;  
  int   j=   strTmp.Length;  
  以上代码执行完后,i=                                   j=   i还真的不知道,   j=10      
  5、SQLSERVER服务器中,给定表   table1   中有两个字段   ID、LastUpdateDate,ID表示更新的事务号,   LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号。(10)  
  select   top   ID   from   table1   order   by   LastUpdateData   desc     
  8、简要谈一下您对微软.NET   构架下remoting和webservice两项技术的理解以及实际中的应用。(10)  
  remoting是.net   中用来跨越machine,   process,   appdomain   进行方法调用的技术,对于三成结构的程序,就可以使用remoting技术来构建.它是分布应用的基础技术.相当于以前的DCOM  Web   Service是一种构建应用程序的普通模型,并能在所有支持internet网通讯的操作系统上实施。Web   Service令基于组件的开发和web的结合达到最佳,基于组件的对象模型 
9.什么叫做SQL注入,如何防止?请举例说明。
利用sql关键字对网站进行攻击。过滤关键字'等
所谓SQL注入(SQL Injection),就是利用程序员对用户输入数据的合法性检测不严或不检测的特点,故意从客户端提交特殊的代码,从而收集程序及服务器的信息,从而获取想得到的资料。
http://localhost/lawjia/show.asp?ID=444 and user>0,这时,服务器运行Select * from 表名 where 字段=444 and user>0这样的查询,当然,这个语句是运行不下去的,肯定出错,错误信息如下:
  ·错误类型:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][ODBC SQL Server Driver][SQL Server]将 nvarchar 值 'sonybb' 转换为数据类型为 int 的列时发生语法错误。
a 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
int[] intArr=new int[100];
ArrayList myList=new ArrayList();
Random rnd=new Random();
while(myList.Count<100)
{
int num=rnd.Next(1,101);
if(!myList.Contains(num))
myList.Add(num);
}
for(int i=0;i<100;i++)
intArr[i]=(int)myList[i];
       20.请叙述类与结构的区别。
  1)、结构是值类型;
  2)、结构不支持继承;
  3)、结构不能定义默认的构造函数;
  4)、结构不能定义析构函数;
  5)、结构不能使用初始值设置域值。


1.简述 private protected public internal修饰符的访问权限。

. private :  私有成员,在类的内部才可以访问。

    protected : 保护成员,该类内部和继承类中可以访问。

    public :    公共成员,完全公开,没有访问限制。

    internal:   在同一命名空间内可以访问。

 

2 .列举ASP.NET页面之间传递值的几种方式。

. 1.使用QueryString, ....?id=1; response. Redirect()....

   2.使用Session变量

3.使用Server.Transfer

4.使用Application

5.使用Cache

6使用HttpContextItem属性

7.使用文件

8.使用数据库

9.使用Cookie

 

3.一列数的规则如下: 112358132134...... 求第30位数是多少,用递归算法实现。

答:public class MainClass

   {

       public static void Main()  

       {

           Console.WriteLine(Foo(30));

       }

       public static int Foo(int i)

       {

           if (i <= 0)

               return 0;

           else if(i > 0 && i <= 2)

               return 1;

           else return Foo(i -1) + Foo(i - 2);

       }

   }

 

4.C#中的委托是什么?事件是不是一种委托?

     

 委托可以把一个方法作为参数代入另一个方法。

 委托可以理解为指向一个函数的引用。

 是,是一种特殊的委托

 

5.override与重载的区别

 override与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要

 Override是进行基类中函数的重写。实现多态。

 

6.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用SessionCookieApplication,您有几种方法进行处理?

同第2

 

7.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty

答:

     foreach (System.Windows.Forms.Control control in this.Controls)

     {

 if (control is System.Windows.Forms.TextBox)

 {

    System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ;

    tb.Text = String.Empty ;

 }

     }

 

8.请编程实现一个冒泡排序算法?

答:

       int [] array = new int [*] ;

 int temp = 0 ;

 for (int i = 0 ; i < array.Length - 1 ; i++)

 {

 for (int j = i + 1 ; j < array.Length ; j++)

 {

  if (array[j] < array[i])

  {

   temp = array[i] ;

   array[i] = array[j] ;

   array[j] = temp ;

  }

 }

 }

 

9.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?(索引器是对属性的封装,具体查看msdn)

答:不是。可以用任意类型。

 

10.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m

答:

   int Num = this.TextBox1.Text.ToString() ;

 int Sum = 0 ;

 for (int i = 0 ; i < Num + 1 ; i++)

 {

 if((i%2) == 1)

 {

  Sum += i ;

 }

 else

 {

  Sum = Sum  - I ;

 }

 }

 System.Console.WriteLine(Sum.ToString());

 System.Console.ReadLine() ;

 

11..netB/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?

答:使用MVC模式分层

一般为3

       数据访问层,业务层,表示层。

 数据访问层对数据库进行增删查改。

 业务层一般分为二层,业务表观层实现与表示层的沟通,业务规则层实现用户密码的安全等。

 表示层为了与用户交互例如用户添加表单。

优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。

缺点: 增加成本。

 

12.在下面的例子里

    using System;

    class A

    {

         public A()

          {

               PrintFields();

          }

         public virtual void PrintFields(){}

     }

     class B:A

     {

          int x=1;

          int y;

          public B()

   {

              y=-1;

          }

          public override void PrintFields()

          {

              Console.WriteLine("x={0},y={1}",x,y);

          }

当使用new B()创建B的实例时,产生什么输出?

答:X=1,Y=0;x= 1 y = -1

 

13.什么叫应用程序域?

答:应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小。

 

14.CTSCLSCLR分别作何解释?

答:CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。

 

15.什么是装箱和拆箱?

答:从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。

 

16.什么是受管制(托管)的代码?

答:

      托管代码是运行.NET公共语言运行时CLR的代码

unsafe:非托管代码。不经过CLR运行。程序员自行分配和释放内存空间

 

17.什么是强命名程序集?

答:程序集需要经过加密签名,强命名程序集可以部署到全局程序集缓存中,成为公共程序集

 

18.net中读写数据库需要用到那些类?他们的作用?

答:DataSet:数据集。

   DataCommand:执行语句命令。

DataAdapter:数据的集合,用语填充。

DataReader:数据只读器

 

19.ASP.net的身份验证方式有哪些?分别是什么原理?

答:

  Windwos(默认)IIS控制

From(窗体)用帐户

Passport(密钥)

 

20.什么是Code-Behind技术?

答:代码后置。

 

21..net中,配件的意思是?

答:程序集。(中间语言,源数据,资源,装配清单)

 

22.常用的调用WebService的方法有哪些?

答:1.使用WSDL.exe命令行工具。

   2.使用VS.NET中的Add Web Reference菜单选项

 

23..net Remoting的工作原理是什么?

答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。

 

24.C#中,string str = null string str = “”请尽量使用文字或图象说明其中的区别。

答:string str = null是不给他分配内存空间,string str = ""给它分配长度为空字符串的内存空间。

 

25.请详述在dotnet中类(class)与结构(struct)的异同?

答:class可以被实例化,属于引用类型,class可以实现接口和单继承其他类,还可以作为基类型,是分配在内存的堆上的

struct属于值类型,不能作为基类型,但是可以实现接口,是分配在内存的栈上的.

 

26.根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写:

namespace test

{

public delegate void OnDBOperate();

public class UserControlBase : System.Windows.Forms.UserControl

{

 public event OnDBOperate  OnNew

 

privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs e)

{

if(e.Button.Equals(BtnNew))

{

//请在以下补齐代码用来调用OnDBOperate委托签名的OnNew事件。

}

}

}

答:if( OnNew != null )

   OnNew( this, e );

 

27.分析以下代码,完成填空

string strTmp = "abcdefg某某某";

int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;

int j= strTmp.Length;

以上代码执行完后,i= j=

答:i=13,j=10

 

28.SQLSERVER服务器中,给定表 table1中有两个字段 IDLastUpdateDateID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号

答:Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)

 

29.根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。

public void test(int i)

{

  lock(this)

 {

  if (i>10)

  {

    i--;

    test(i);

  }

 }

}

答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)

 

30.简要谈一下您对微软.NET构架下remotingwebservice两项技术的理解以及实际中的应用。

答:webservice主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。

 

31.公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路

答:根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中。

 

32.给定以下XML文件,完成算法流程图。

<FileSystem>

< DriverC >

<Dir DirName=”MSDOS622”>

<File FileName =” Command.com” ></File>

</Dir>

<File FileName =”MSDOS.SYS” ></File>

<File FileName =” IO.SYS” ></File>

</DriverC>

</FileSystem>

请画出遍历所有文件名(FileName)的流程图(请使用递归算法)

答:

void FindFile( Directory d )

{

  FileOrFolders = d.GetFileOrFolders();

  foreach( FileOrFolder fof in FileOrFolders )

  {

    if( fof is File )

    You Found a file;

    else if ( fof is Directory )

    FindFile( fof );

   }

}

 

33.写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。

答:解1: select top 10 * from A where id not in (select top 30 id from A)

   2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)

 

34.面向对象的语言具有________性、_________性、________

答:封装、继承、多态。

 

35.能用foreach遍历访问的对象需要实现 ________________接口或声明________________方法的类型。

答:IEnumerable GetEnumerator

 

36.GC是什么?为什么要有GC?

答:GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:

 System.gc()

 Runtime.getRuntime().gc()

 

37.String s = new String("xyz");创建了几个String Object?

答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s

 

38.abstract classinterface有什么区别?

答:

声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof运算符可以用来决定某对象的类是否实现了接口。

 

39.启动一个线程是用run()还是start()?

答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

 

40.接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实体类(concrete class)?

答:接口可以继承接口。

抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

 

41.构造器(构造函数)Constructor是否可被override?

答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading

 

42.是否可以继承String?

答:String类是密封类故不可以继承。

 

43.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

答:会执行,在return前执行。

 

44.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

答:不对,有相同的hash code

 

45.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String?

答:switchexpr1)中,expr1是一个整数表达式。因此传递给 switch case语句的参数应该是 int short char 或者 bytelong,string都不能作用于swtich

 

47.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

不能,一个对象的一个synchronized方法只能由一个线程访问。

 

48.abstractmethod是否可同时是static,是否可同时是native,是否可同时是synchronized?

答:都不能。

 

49.List, Set, Map是否继承自Collection接口?

答:ListSetMap不是

 

50.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?

答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。

equals()==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

 

51.数组有没有length()这个方法? String有没有length()这个方法?

答:数组没有length()这个方法,有length的属性。String没有length()这个方法,有length属性。

 

52.sleep() wait()有什么区别?

答:sleep()方法是使线程停止一段时间的方法。在sleep时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来的线程具有更高的优先级

(b)正在运行的线程因为其它原因而阻塞。

wait()是线程交互时,如果线程对一个同步对象x发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

 

53.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

答:short s1 = 1; s1 = s1 + 1;有错,s1short型,s1+1int,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) short s1 = 1; s1 += 1正确。

 

54.谈谈final, finally, finalize的区别。

答:

final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此    一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中    不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为    final的方法也同样只能使用,不能重载

finally—再异常处理时提供 finally块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch子句就会    执行,然后控制就会进入 finally块(如果有的话)。

finalize—方法名。Java技术允许使用 finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理    工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object类中定义的    ,因此所有的类都继承了它。子类覆盖 finalize()方法以整理系统资源或者执行其他清理工作。finalize()     方法是在垃圾收集器删除对象之前对这个对象调用的。

 

55.如何处理几十万条并发数据?

答:用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取.

 

56.Session有什么重大BUG,微软提出了什么方法加以解决?

答:是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate  serverSQL  Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获SessionEND事件。

 

57.进程和线程的区别?

答:进程是系统进行资源分配和调度的单位;线程是CPU调度和分派的单位,一个进程可以有多个线程,这些线程共享这个进程的资源。

 

58.堆和栈的区别?

答:

   栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。

   堆:一般由程序员分配释放。用newmalloc等分配内存函数分配得到的就是在堆上。

 

59.成员变量和成员函数前加static的作用?

答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。分别用来反映类的状态。比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作。

 

60.ASPNETASP相比,主要有哪些进步?

答:asp解释形,aspx编译型,性能提高,有利于保护源码。

 

61.产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。

int[] intArr=new int[100];

ArrayList myList=new ArrayList();

Random rnd=new Random();

while(myList.Count<100)

{

 int num=rnd.Next(1,101);

 if(!myList.Contains(num))

 myList.Add(num);

}

 for(int i=0;i<100;i++)

  intArr[i]=(int)myList[i];

 

62.请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。

答:session(viewstate)简单,但易丢失

   application        全局

   cookie             简单,但可能不支持,可能被伪造

   input ttype="hidden"     简单,可能被伪造

   url参数                 简单,显示于地址栏,长度有限

   数据库                  稳定,安全,但性能相对弱

 

63.请指出GAC的含义?

答:全局程序集缓存。

 

64.向服务器发送请求有几种方式?

答:get,postget一般为链接方式,post一般为按钮方式。

 

65.DataReaderDataset有什么区别?

答:一个是只能向前的只读游标,一个是内存中的表。

 

66.软件开发过程一般有几个阶段?每个阶段的作用?

答:可行性分析(风险控制),需求分析,架构设计,代码编写,测试,部署,维护

 

67.c#usingnew这两个关键字有什么意义,请写出你所知道的意义?using指令语句 new创建实例 new隐藏基类中方法。

答:using引入名称空间或者使用非托管资源,使用完对象后自动执行实现了IDisposable接口的类的Dispose方法

   new 新建实例或者隐藏父类方法

 

68.需要实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中间还有连续空格的话,仅保留一个空格,即允许字符串中间有多个空格,但连续的空格数不可超过一个.

答:string inputStr=" xx  xx  ";

inputStr=Regex.Replace(inputStr.Trim()," *"," ");

 

69.下面这段代码输出什么?为什么?

int i=5;

int j=5;

if (Object.ReferenceEquals(i,j))

Console.WriteLine("Equal");

else

Console.WriteLine("Not Equal");

答:不相等,因为比较的是对象

 

70.什么叫做SQL注入,如何防止?请举例说明。

答:利用sql关键字对网站进行攻击。过滤关键字'

 

71.什么是反射?

答:动态获取程序集信息

 

72.Singleton如何写设计模式

答:static属性里面new ,构造函数private

 

73.什么是Application Pool

答:Web应用,类似Thread Pool,提高并发性能。

 

74.什么是虚函数?什么是抽象函数?

答:虚函数:没有实现的,可由子类继承并重写的函数。抽象函数:规定其非虚子类必须实现的函数,必须被重写。

 

75.什么是XML

答:XML即可扩展标记语言。eXtensible Markup Language.标记是指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,即可以选择国际通用的标记语言,比如HTML,也可以使用象XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML是从SGML中简化修改出来的。它主要用到的有XMLXSLXPath等。

 

76.什么是Web ServiceUDDI

答:Web Service便是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。

  UDDI 的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。

 

77.什么是ASP.net中的用户控件?

答:用户控件一般用在内容多为静态,或者少许会改变的情况下..用的比较大..类似ASP中的include..但是功能要强大的多。

 

78.列举一下你所了解的XML技术及其应用

答:xml用于配置,用于保存静态数据类型.接触XML最多的是web Services..config,存储经常使用但是不经常修改的数据

 

79.ADO.net中常用的对象有哪些?分别描述一下。

答:Connection数据库连接对象

   Command 数据库命令

   DataReader 数据读取器

DataSet数据集

DataAdaprer数据适配器

 

80.什么是code-Behind技术。

答:ASPX,RESXCS三个后缀的文件,这个就是代码分离.实现了HTML代码和服务器代码分离.方便代码编写和整理.

 

81.什么是SOAP,有哪些应用。

答:simple object access protocal,简单对象接受协议.xml为基本编码结构,建立在已有通信协议上(http,不过据说ms在搞最底层的架构在tcp/ip上的soap)的一种规范Web Service使用的协议..

 

82.C# property attribute的区别,他们各有什么用处,这种机制的好处在哪里?

答:一个是属性,用于存取类的字段,一个是特性,用来标识类,方法等的附加性质

 

83.XML HTML的主要区别

答:1. XML是区分大小写字母的,HTML不区分。

   2. HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略</p>或者</li>之类的结束      标记。在XML中,绝对不能省略掉结束标记。

   3. XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。这样分析器就知道不用      查找结束标记了。

   4. XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。

   5. HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。

 

84.c#中的三元运算符是?

答:?:。

 

85.当整数a赋值给一个object对象时,整数a将会被?

答:装箱。

 

86.类成员有_____种可访问形式?

答:this.;new Class().Method;

 

87.public static const int A=1;这段代码有错误么?是什么?

答:const不能用static修饰。

 

88.float f=-123.567F; int i=(int)f;i的值现在是_____?

答:-123

 

89.委托声明的关键字是______?

答:delegate.

 

90.sealed修饰的类有什么特点?

答:密封,不能继承。

 

91.Asp.net中所有的自定义用户控件都必须继承自________?

答:Control

 

92..Net中所有可序列化的类都被标记为_____?

答:[serializable]

 

93..Net托管代码中我们不用担心内存漏洞,这是因为有了______?

答:GC

 

94.下面的代码中有什么错误吗?_______

    using System;

    class A

    {

         public virtual void F(){

             Console.WriteLine("A.F");

          }

     }

     abstract class B:A

      {

          public abstract override void F();  答:abstract override是不可以一起修饰.

      }                                           // new public abstract void F();

 

95.当类T只声明了私有实例构造函数时,则在T的程序文本外部,___可以___(可以 or 不可以)从T派生出新的类,不可以____(可以 or 不可以)直接创建T的任何实例。

答:不可以,不可以。

 

96.下面这段代码有错误么?

   switch (i){

   case():        答://case()条件不能为空

       CaseZero();

       break;

   case 1:

       CaseOne();

       break;

   case 2:

       dufault;   答://wrong,格式不正确

       CaseTwo();

       break;

  }

 

97..Net中,类System.Web.UI.Page可以被继承么?

答:可以。

 

98..net的错误处理机制是什么?

答:.net错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止。

 

99.利用operator声明且仅声明了==,有什么错误么?

答:要同时修改EqualeGetHash() ?重载了"=="就必须重载 "!="

 

100..netC# or vb.net)中如何用户自定义消息,并在窗体中处理这些消息。

答:在form中重载DefWndProc函数来处理消息:

protected override void DefWndProc ( ref System.WinForms.Message m )

{

 switch(m.msg)

 {

   case WM_Lbutton :

  ///stringMFC中的CStringFormat函数的使用方法有所不同

  string message = string.Format("收到消息!参数为:{0},{1}",m.wParam,m.lParam);

  MessageBox.Show(message);///显示一个消息框

  break;

   case USER:

   处理的代码

   default:

  base.DefWndProc(ref m);///调用基类函数处理非自定义消息。

  break;

 }

}

 

101..netC# or vb.net)中如何取消一个窗体的关闭。

答:private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)

  {

     e.Cancel=true;

  }

 

102..netC# or vb.net)中,Appplication.Exit还是 Form.Close有什么不同?(winform题目非asp.net题目)

答:一个是退出整个应用程序,一个是关闭其中一个form

 

103.C#中有一个double型的变量,比如10321.5,比如122235401.21644,作为货币的值如何按各个不同国家的习惯来输出。比如美国用$10,321.50$122235401.22而在英国则为£10 321.50和£122 235  401.22

答:System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-US");

   //System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-GB");为英    货币类型

   decimal y = 9999999999999999999999999999m;

   string str = String.Format(MyCulture,"My amount = {0:c}",y);

 

104.某一密码仅使用KLMNO5个字母,密码中的单词从左向右排列,密码单词必须遵循如下规则:

1      密码单词的最小长度是两个字母,可以相同,也可以不同

2      K不可能是单词的第一个字母

3      如果L出现,则出现次数不止一次

4      M不能使最后一个也不能是倒数第二个字母

5      K出现,则N就一定出现

6      O如果是最后一个字母,则L一定出现

问题一:下列哪一个字母可以放在LO中的O后面,形成一个3个字母的密码单词?

 A) K   B)L   C) M   D) N

答案:B

 

问题二:如果能得到的字母是KLM,那么能够形成的两个字母长的密码单词的总数是多少?

 A)1 B)3 C)6 D9

答案:A

 

问题三:下列哪一个是单词密码?

 A) KLLN   B) LOML   C) MLLO  D)NMKO

答案:C

 

8. 62-63=1等式不成立,请移动一个数字(不可以移动减号和等于号),使得等式成立,如何移动?

答案:62移动成26次方

 

105.对于这样的一个枚举类型:

enum Color:byte

{

 Red,

 Green,

 Blue,

 Orange

}

答:string[] ss=Enum.GetNames(typeof(Color));

   byte[] bb=Enum.GetValues(typeof(Color));

 

106. C#property attribute的区别,他们各有什么用处,这种机制的好处在哪里?

答:attribute:自定义属性的基类;property :类中的属性

 

107.C#可否对内存进行直接的操作?

答:在.net下,.net引用了垃圾回收(GC)功能,它替代了程序员 不过在C#中,不能直接实现Finalize方法,而是在析构函数中调用基类的Finalize()方法

 

108.ADONET相对于ADO等主要有什么改进?

答:1:ado.net不依赖于ole db提供程序,而是使用.net托管提供的程序,2:不使用com3:不在支持动态游标和服务器端游 4:,可以断开connection而保留当前数据集可用 5:强类型转换 6:xml支持

 

109.写一个HTML页面,实现以下功能,左键点击页面时显示您好,右键点击时显示禁止右键。并在2分钟后自动关闭页面。

答:<script language=javascript>

 setTimeout('window.close();',3000);

 function show()

 {

 if (window.event.button == 1)

 {

  alert("");

 }

 else if (window.event.button == 2)

 {

  alert("");

 }

 }

</script>

 

110.大概描述一下ASPNET服务器控件的生命周期

答:初始化 加载视图状态 处理回发数据 加载 发送回发更改通知 处理回发事件 预呈现 保存状态 呈现 处置 卸载

 

111.Anonymous Inner Class (匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

答:不能,可以实现接口

 

112.Static Nested Class Inner Class的不同,说得越多越好

答:Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。

 

113.&&&的区别。

&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and.

 

114.HashMapHashtable的区别。

答:HashMapHashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key,由于非线程安全,效率上可能高于Hashtable.

 

115.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

答:short s1 = 1; s1 = s1 + 1;s1+1运算结果是int型,需要强制转换类型)

short s1 = 1; s1 += 1;(可以正确编译)

 

116.Overloaded的方法是否可以改变返回值的类型?

答:Overloaded的方法是可以改变返回值的类型。

 

117.errorexception有什么区别?

答:error表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。

exception表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

 

118.<%# %> <% %> 有什么区别?

答:<%# %>表示绑定的数据源

   <% %>是服务器端代码块

 

119.你觉得ASP.NET 2.0VS2005)和你以前使用的开发工具(.Net 1.0或其他)有什么最大的区别?你在以前的平台上使用的哪些开发思想(pattern / architecture)可以移植到ASP.NET 2.0 (或者已经内嵌在ASP.NET 2.0)

答:1 ASP.NET 2.0 把一些代码进行了封装打包,所以相比1.0相同功能减少了很多代码.

   2  同时支持代码分离和页面嵌入服务器端代码两种模式,以前1.0版本,.NET提示帮助只有在分离的代码文件,      在页面嵌入服务器端代码获得帮助提示,

   3 代码和设计界面切换的时候,2.0支持光标定位.这个我比较喜欢

   4 在绑定数据,做表的分页.UPDATE,DELETE,等操作都可以可视化操作,方便了初学者

   5 ASP.NET中增加了40多个新的控件,减少了工作量

 

120.重载与覆盖的区别?

答:1、方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系

   2、覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系。

   3、覆盖要求参数列表相同;重载要求参数列表不同。

   4、覆盖关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)来决定;重载关系,是根据调      用时的实参表与形参表来选择方法体的。

 

121.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?

答:不是。可以用任意类型。

 

122.C#中,string str = null string str = " "请尽量使用文字或图象说明其中的区别。

答:null是没有空间引用的;

   " " 是空间为0的字符串;

 

123.分析以下代码,完成填空

string strTmp = "abcdefg某某某";

int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;

int j= strTmp.Length;

以上代码执行完后,i= j=

答:i=13.j=10

 

124.SQLSERVER服务器中,给定表 table1中有两个字段 IDLastUpdateDateID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号

答:Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)

 

125.分析以下代码。

public static void test(string ConnectString)

 

{

 

System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();

conn.ConnectionString = ConnectString;

try

 

{

conn.Open();

…….

}

catch(Exception Ex)

{

MessageBox.Show(Ex.ToString());

}

finally

{

 

if (!conn.State.Equals(ConnectionState.Closed))

conn.Close();

}

}

请问

 

1)以上代码可以正确使用连接池吗?

 

答:回答:如果传入的connectionString是一模一样的话,可以正确使用连接池。不过一模一样的意思是,连字符的空格数,顺序完全一致。

 

2)以上代码所使用的异常处理方法,是否所有在test方法内的异常都可以被捕捉并显示出来?

 

答:只可以捕捉数据库连接中的异常吧.finally中,catch中,如果有别的可能引发异常的操作,也应该用try,catch。所以理论上并非所有异常都会被捕捉。)

 

126.公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路:

答:根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView

 

127.什么是WSE?目前最新的版本是多少?

答:WSE (Web Service Extension)包来提供最新的WEB服务安全保证,目前最新版本2.0

 

128.在下面的例子里

    using System;

    class A

    {

         public A(){

               PrintFields();

          }

         public virtual void PrintFields(){}

     }

     class B:A

     {

          int x=1;

          int y;

          public B(){

              y=-1;

          }

          public override void PrintFields(){

              Console.WriteLine("x={0},y={1}",x,y);

          }

当使用new B()创建B的实例时,产生什么输出?

答:X=1,Y=0

 

129.下面的例子中

 

    using System;

    class A

    {

         public static int X;

         static A(){

              X=B.Y+1;

         }

     }

     class B

     {

          public static int Y=A.X+1;

          static B(){}

          static void Main(){

               Console.WriteLine("X={0},Y={1}",A.X,B.Y);

          }

      }

产生的输出结果是什么?

答:x=1,y=2

 

130.abstract classinterface有什么区别?

答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof运算符可以用来决定某对象的类是否实现了接口。

 

这些是C#,ASP.NET,数据库面试题,全部从网上收集而来,经整理而发表,希望给大家带来帮助,有错误的地方还请各位高手指出,在下倾听指教。

 

 

以下是083月新增面试题

1asp.netweb应用程序获取数据的流程:

A.Web Page B.Fill C.Sql05  D.Data Sourse  E.DataGrid F.DataSet  G.Select and Connect

Commands H.Sql Data Adapter

 

答案:a,e,d,f,h,g,b,c

 

2Asp.net执行模式中各组件填入到对应位置:

A.Output Cache B.Parser  C.Assembly Cache  D.IE E.Memory  F.Compiler

WebPage被第一次请求时:

D->__->__->__->__->D

WebPage被第二次请求时:

D->__->__->D

WebPage的页面输出缓存被打开时:

D->__->D

 

答案:

WebPage被第一次请求时:

D->_b_->_f_->_a_->_e_->D

WebPage被第二次请求时:

D->_b_->_e_->D

WebPage的页面输出缓存被打开时:

D->_a_->D

 

3.两个数组 [n] [m]  n>m  第一个数组的数字无序排列第二个数组为空取出第一个数组的最小值放到第二个数组中第一个位置,依次类推.不能改变A数组,不能对之进行排序,也不可以倒到别的数组中。

  int[] a = { -20, 9, 7, 37, 38, 69, 89, -1, 59, 29, 0, -25, 39, 900, 22, 13, 55 };

           int[] b = new int[10];

           int intTmp = a[0], intMaxNum;

           for (int i = 0; i < a.Length; i++)

           {

               intTmp = a[i] > intTmp ? a[i] : intTmp;

           }

           intMaxNum = intTmp;

           for (int j = 0; j < b.Length; j++)

           {

 

               for (int i = 0; i < a.Length; i++)

               {

                   if (j == 0)

                       intTmp = a[i] < intTmp ? a[i] : intTmp;

                   else

                   {

                       if (a[i] > b[j - 1])

                           intTmp = a[i] < intTmp ? a[i] : intTmp;

                   }

               }

               b[j] = intTmp;

               intTmp = intMaxNum;

           }

           foreach (int bb in b)

           {

               Console.WriteLine(bb);

 

           }

           Console.ReadLine();

 

4.请将字符串"I am a student"按单词逆序输出"student a am I"

string S = "I am a student";

           char[] C = new char[] { ' '};

           string[] n =S.Split(C);

           int length = S.Length;

           for (int i =length-1 ; i >=0; i--)

           {

               Console.Write(n[i]);

               if (i != 0)

               {

                   Console.Write(" ");

               }

           }


SQL分类:

DDL—数据定义语言(CREATEALTERDROPDECLARE)

DML—数据操纵语言(SELECTDELETEUPDATEINSERT)

DCL—数据控制语言(GRANTREVOKECOMMITROLLBACK)首先,简要介绍基础语句:

1、说明:创建数据库

CREATE DATABASE database-name

 

2、说明:删除数据库

drop database dbname

 

3、说明:备份sql server

---创建备份数据的 device

USE master

EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat'

---开始备份

BACKUP DATABASE pubs TO testBack

 

4、说明:创建新表

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)根据已有的表创建新表:

Acreate table tab_new like tab_old (使用旧表创建新表)

Bcreate table tab_new as select col1,col2 from tab_old definition only

 

5、说明:删除新表drop table tabname

 

6、说明:增加一个列

 

Alter table tabname add column col type注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。

 

7、说明:添加主键: Alter table tabname add primary key(col) 说明:删除主键: Alter table tabname drop primary key(col)

 

8、说明:创建索引:create [unique] index idxname on tabname(col.)删除索引:drop index idxname注:索引是不可更改的,想更改必须删除重新建。

 

9、说明:创建视图:create view viewname as select statement 删除视图:drop view viewname

 

10、说明:几个简单的基本的sql语句选择:select * from table1 where 范围插入:insert into table1(field1,field2) s(1,2)删除:delete from table1 where 范围更新:update table1 set field1=1 where范围查找:select * from table1 where field1 like%1% ---like的语法很精妙,查资料!排序:select * from table1 order by field1,field2 [desc]总数:select count * as totalcount from table1求和:select sum(field1) as sum from table1平均:select avg(field1) as avg from table1最大:select max(field1) as max from table1最小:select min(field1) as min from table1

 

11、说明:几个高级查询运算词

A UNION运算符

UNION运算符通过组合其他两个结果表(例如 TABLE1 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL UNION一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2

B EXCEPT运算符

EXCEPT运算符通过包括所有在 TABLE1中但不在 TABLE2中的行并消除所有重复行而派生出一个结果表。当 ALL EXCEPT一起使用时 (EXCEPT ALL),不消除重复行。

C INTERSECT运算符

INTERSECT运算符通过只包括 TABLE1 TABLE2中都有的行并消除所有重复行而派生出一个结果表。当 ALL INTERSECT一起使用时 (INTERSECT ALL),不消除重复行。注:使用运算词的几个查询结果行必须是一致的。

 

12、说明:使用外连接

Aleft outer join左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。

SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

Bright outer join:右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。

Cfull outer join全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

 

不错的sql语句

1、说明:复制表(只复制结构,源表名:a新表名:b) (Access可用)法一:select * into b from a where 1<>1法二:select top 0 * into b from a

 

2、说明:拷贝表(拷贝数据,源表名:a目标表名:b) (Access可用)

insert into b(a, b, c) select d,e,f from b;

 

3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)

insert into b(a, b, c) select d,e,f from b in‘具体数据库’ where条件例子:..from b in '"&Server.MapPath(".")&"data.mdb" &"' where..

 

4、说明:子查询(表名1a表名2b)

select a,b,c from a where a IN (select d from b )或者: select a,b,c from a where a IN (1,2,3)

 

5、说明:显示文章、提交人和最后回复时间

select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

 

6、说明:外连接查询(表名1a表名2b)

select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

 

7、说明:在线视图查询(表名1a )

select * from (SELECT a,b,c FROM a) T where t.a > 1;

 

8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括

select * from table1 where time between time1 and time2

select a,b,c, from table1 where a not between数值1 and数值2

 

9、说明:in的使用方法

select * from table1 where a [not] in (‘值1,’值2,’值4,’值6)

 

10、说明:两张关联表,删除主表中已经在副表中没有的信息

delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

 

11、说明:四表联查问题:

select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

 

12、说明:日程安排提前五分钟提醒

SQL: select * from日程安排 where datediff('minute',f开始时间,getdate())>5

 

13、说明:一条sql语句搞定数据库分页

select top 10 b.* from (select top 20主键字段,排序字段 from表名 order by排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

 

14、说明:前10条记录

select top 10 * form table1 where范围

 

15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)

select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

 

16、说明:包括所有在 TableA中但不在 TableBTableC中的行并消除所有重复行而派生出一个结果表

(select a from tableA ) except (select a from tableB) except (select a from tableC)

 

17、说明:随机取出10条数据

select top 10 * from tablename order by newid()

 

18、说明:随机选择记录

select newid()

 

19、说明:删除重复记录

Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

 

20、说明:列出数据库里所有的表名

select name from sysobjects where type='U'

 

21、说明:列出表里的所有的

select name from syscolumns where id=object_id('TableName')

 

22、说明:列示typevenderpcs字段,以type字段排列,case可以方便地实现多重选择,类似select中的case

select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type显示结果:

type vender pcs电脑 A 1电脑 A 1光盘 B 2光盘 A 2手机 B 3手机 C 3

 

23、说明:初始化表table1

TRUNCATE TABLE table1

 

24、说明:选择从1015的记录

select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc

 

 

sql技巧

如何删除一个表中重复的记录?

create table a_dist(id int,name varchar(20))

 

insert into a_dist values(1,'abc')

insert into a_dist values(1,'abc')

insert into a_dist values(1,'abc')

insert into a_dist values(1,'abc')

 

exec up_distinct 'a_dist','id'

 

select * from a_dist

 

create procedure up_distinct(@t_name varchar(30),@f_key varchar(30))

--f_key表示是分组字段﹐即主键字段

as

begin

declare @max integer,@id varchar(30) ,@sql varchar(7999) ,@type integer

select @sql = 'declare cur_rows cursor for select '+@f_key+' ,count(*) from ' +@t_name +' group by ' +@f_key +' having count(*) > 1'

exec(@sql)

open cur_rows

fetch cur_rows into @id,@max

while @@fetch_status=0

begin

select @max = @max -1

set rowcount @max

select @type = xtype from syscolumns where id=object_id(@t_name) and name=@f_key

if @type=56

select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+ @id

if @type=167

select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+''''+ @id +''''

exec(@sql)

fetch cur_rows into @id,@max

end

close cur_rows

deallocate cur_rows

set rowcount 0

end

 

select * from systypes

select * from syscolumns where id = object_id('a_dist')

 

查询数据的最大排序问题(只能用一条语句写)

CREATE TABLE hard (qu char (11) ,co char (11) ,je numeric(3, 0))

 

insert into hard values ('A','1',3)

insert into hard values ('A','2',4)

insert into hard values ('A','4',2)

insert into hard values ('A','6',9)

insert into hard values ('B','1',4)

insert into hard values ('B','2',5)

insert into hard values ('B','3',6)

insert into hard values ('C','3',4)

insert into hard values ('C','6',7)

insert into hard values ('C','2',3)

 

 

要求查询出来的结果如下:

 

qu co je

----------- ----------- -----

A 6 9

A 2 4

B 3 6

B 2 5

C 6 7

C 3 4

 

 

就是要按qu分组,每组中取je最大的前2位!!

而且只能用一句sql语句!!!

select * from hard a where je in (select top 2 je from hard b where a.qu=b.qu order by je)

 

求删除重复记录的sql语句?

怎样把具有相同字段的纪录删除,只留下一条。

例如,表test里有id,name字段

如果有name相同的记录只留下一条,其余的删除。

name的内容不定,相同的记录数不定。

有没有这样的sql语句?

==============================

A:一个完整的解决方案:

 

将重复的记录记入temp1:

select [标志字段id],count(*) into temp1 from [表名]

group by [标志字段id]

having count(*)>1

 

2、将不重复的记录记入temp1:

insert temp1 select [标志字段id],count(*) from [表名] group by [标志字段id] having count(*)=1

 

3、作一个包含所有不重复记录的表:

select * into temp2 from [表名] where标志字段id in(select标志字段id from temp1)

 

4、删除重复表:

delete [表名]

 

5、恢复表:

insert [表名] select * from temp2

 

6、删除临时表:

drop table temp1

drop table temp2

================================

B:

create table a_dist(id int,name varchar(20))

 

insert into a_dist values(1,'abc')

insert into a_dist values(1,'abc')

insert into a_dist values(1,'abc')

insert into a_dist values(1,'abc')

 

exec up_distinct 'a_dist','id'

 

select * from a_dist

 

create procedure up_distinct(@t_name varchar(30),@f_key varchar(30))

--f_key表示是分组字段﹐即主键字段

as

begin

declare @max integer,@id varchar(30) ,@sql varchar(7999) ,@type integer

select @sql = 'declare cur_rows cursor for select '+@f_key+' ,count(*) from ' +@t_name +' group by ' +@f_key +' having count(*) > 1'

exec(@sql)

open cur_rows

fetch cur_rows into @id,@max

while @@fetch_status=0

begin

select @max = @max -1

set rowcount @max

select @type = xtype from syscolumns where id=object_id(@t_name) and name=@f_key

if @type=56

select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+ @id

if @type=167

select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+''''+ @id +''''

exec(@sql)

fetch cur_rows into @id,@max

end

close cur_rows

deallocate cur_rows

set rowcount 0

end

 

select * from systypes

select * from syscolumns where id = object_id('a_dist')

 

行列转换--普通

 

假设有张学生成绩表(CJ)如下

Name Subject Result

张三语文 80

张三数学 90

张三物理 85

李四语文 85

李四数学 92

李四物理 82

 

想变成

姓名语文数学物理

张三 80 90 85

李四 85 92 82

 

declare @sql varchar(4000)

set @sql = 'select Name'

select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'

from (select distinct Subject from CJ) as a

select @sql = @sql+' from test group by name'

exec(@sql)

 

行列转换--合并

 

有表A,

id pid

1 1

1 2

1 3

2 1

2 2

3 1

如何化成表B:

id pid

1 1,2,3

2 1,2

3 1

 

创建一个合并的函数

create function fmerg(@id int)

returns varchar(8000)

as

begin

declare @str varchar(8000)

set @str=''

select @str=@str+','+cast(pid as varchar) fromA where id=@id

set @str=right(@str,len(@str)-1)

return(@str)

End

go

 

--调用自定义函数得到结果

select distinct id,dbo.fmerg(id) fromA

 

 

如何取得一个数据表的所有列名

 

方法如下:先从SYSTEMOBJECT系统表中取得数据表的SYSTEMID,然后再SYSCOLUMN表中取得该数据表的所有列名。

SQL语句如下:

declare @objid int,@objname char(40)

set @objname = 'tablename'

select @objid = id from sysobjects where id = object_id(@objname)

select 'Column_name' = name from syscolumns where id = @objid order by colid

 

 

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME ='users'

通过SQL语句来更改用户的密码

 

修改别人的,需要sysadmin role

EXEC sp_password NULL, 'newpassword', 'User'

 

如果帐号为SA执行EXEC sp_password NULL, 'newpassword', sa

 

怎么判断出一个表的哪些字段不允许为空?

 

select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE='NO' and TABLE_NAME=tablename

如何在数据库里找到含有相同字段的表?

a.查已知列名的情况

SELECT b.name as TableName,a.name as columnname

From syscolumns a INNER JOIN sysobjects b

ON a.id=b.id

AND b.type='U'

AND a.name='你的字段名字'

未知列名查所有在不同表出现过的列名

Select o.name As tablename,s1.name As columnname

From syscolumns s1, sysobjects o

Where s1.id = o.id

And o.type = 'U'

And Exists (

Select 1 From syscolumns s2

Where s1.name = s2.name

And s1.id <> s2.id

)

查询第xxx行数据

 

假设id是主键:

select * from (select top xxx * from yourtable) aa where not exists(select 1 from (select top xxx-1 * from yourtable) bb where aa.id=bb.id)

 

如果使用游标也是可以的

fetch absolute [number] from [cursor_name]

行数为绝对行数

 

SQL Server日期计算

a.一个月的第一天

SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)

b.本周的星期一

SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)

c.一年的第一天

SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)

d.季度的第一天

SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)

e.上个月的最后一天

SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))

f.去年的最后一天

SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))

g.本月的最后一天

SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))

h.本月的第一个星期一

select DATEADD(wk, DATEDIFF(wk,0,

dateadd(dd,6-datepart(day,getdate()),getdate())

), 0)

i.本年的最后一天

SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))

获取表结构[ 'sysobjects' 替换 'tablename'即可]

 

SELECT CASE IsNull(I.name, '')

When '' Then ''

Else '*'

End as IsPK,

Object_Name(A.id) as t_name,

A.name as c_name,

IsNull(SubString(M.text, 1, 254), '') as pbc_init,

T.name as F_DataType,

CASE IsNull(TYPEPROPERTY(T.name, 'Scale'), '')

WHEN '' Then Cast(A.prec as varchar)

ELSE Cast(A.prec as varchar) + ',' + Cast(A.scale as varchar)

END as F_Scale,

A.isnullable as F_isNullAble

FROM Syscolumns as A

JOIN Systypes as T

ON (A.xType = T.xUserType AND A.Id = Object_id('sysobjects') )

LEFT JOIN ( SysIndexes as I

JOIN Syscolumns as A1

ON ( I.id = A1.id and A1.id = object_id('sysobjects') and (I.status & 0x800) = 0x800 AND A1.colid <= I.keycnt) )

ON ( A.id = I.id AND A.name = index_col('sysobjects', I.indid, A1.colid) )

LEFT JOIN SysComments as M

ON ( M.id = A.cdefault and ObjectProperty(A.cdefault, 'IsConstraint') = 1 )

ORDER BY A.Colid ASC

 

 

提取数据库内所有表的字段详细说明的SQL语句

 

SELECT

(case when a.colorder=1 then d.name else '' end) N'表名',

a.colorder N'字段序号',

a.name N'字段名',

(case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then ''else ''

end) N'标识',

(case when (SELECT count(*)

FROM sysobjects

WHERE (name in

(SELECT name

FROM sysindexes

WHERE (id = a.id) AND (indid in

(SELECT indid

FROM sysindexkeys

WHERE (id = a.id) AND (colid in

(SELECT colid

FROM syscolumns

WHERE (id = a.id) AND (name = a.name))))))) AND

(xtype = 'PK'))>0 then '' else '' end) N'主键',

b.name N'类型',

a.length N'占用字节数',

COLUMNPROPERTY(a.id,a.name,'PRECISION') as N'长度',

isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as N'小数位数',

(case when a.isnullable=1 then ''else '' end) N'允许空',

isnull(e.text,'') N'默认值',

isnull(g.[value],'') AS N'字段说明'

FROM syscolumns a

left join systypes b

on a.xtype=b.xusertype

inner join sysobjects d

on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'

left join syscomments e

on a.cdefault=e.id

left join sysproperties g

on a.id=g.id AND a.colid = g.smallid

order by object_name(a.id),a.colorder

 

快速获取表test的记录总数[对大容量表非常有效]

 

快速获取表test的记录总数:

select rows from sysindexes where id = object_id('test') and indid in (0,1)

 

update 2 set KHXH=(ID+1)\2 2行递增编号

update [23] set id1 = 'No.'+right('00000000'+id,6) where id not like 'No%' //递增

update [23] set id1= 'No.'+right('00000000'+replace(id1,'No.',''),6) //补位递增

delete from [1] where (id%2)=1

奇数

替换表名字段

update [1] set domurl = replace(domurl,'Upload/Imgswf/','Upload/Photo/') where domurl like '%Upload/Imgswf/%'

截位

SELECT LEFT(表名, 5)

 

截位

SELECT LEFT(表名, 5)

MS SQL ServerSQL语句导入导出大全

/*******  导出到excel

EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""'

 

/***********  导入Excel

SELECT *

FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',

  'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions

 

 

SELECT cast(cast(科目编号 as numeric(10,2)) as nvarchar(255))+' '转换后的别名

FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',

  'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions

 

select   *    from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=c:\Book1.xls',Sheet1$)

 

HDR=YES;Excel第一行当成标题行

 

HDR=NO;第一行不当成标题行

 

 

/**导入文本文件

EXEC master..xp_cmdshell 'bcp "dbname..tablename" in c:\DT.txt -c -Sservername -Usa -Ppassword'

 

/**导出文本文件

EXEC master..xp_cmdshell 'bcp "dbname..tablename" out c:\DT.txt -c -Sservername -Usa -Ppassword'

EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword'

 

导出到TXT文本,用逗号分开

exec master..xp_cmdshell 'bcp "库名..表名" out "d:\tt.txt" -c -t ,-U sa -P password'

 

 

BULK INSERT库名..表名

FROM 'c:\test.txt'

WITH (

    FIELDTERMINATOR = ';',

    ROWTERMINATOR = '\n'

)

 

 

--/* dBase IV文件

select * from

OPENROWSET('MICROSOFT.JET.OLEDB.4.0'

,'dBase IV;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料4.dbf]')

--*/

 

--/* dBase III文件

select * from

OPENROWSET('MICROSOFT.JET.OLEDB.4.0'

,'dBase III;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料3.dbf]')

--*/

 

--/* FoxPro数据库

select * from openrowset('MSDASQL',

'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\',

'select * from [aa.DBF]')

--*/

 

/**************导入DBF文件****************/

select * from openrowset('MSDASQL',

'Driver=Microsoft Visual FoxPro Driver;

SourceDB=e:\VFP98\data;

SourceType=DBF',

'select * from customer where country != "USA" order by country')

go

/*****************导出到DBF ***************/

如果要导出数据到已经生成结构(即现存的)FOXPRO表中,可以直接用下面的SQL语句

 

insert into openrowset('MSDASQL',

'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\',

'select * from [aa.DBF]')

select * from

 

说明:

SourceDB=c:\  指定foxpro表所在的文件夹

aa.DBF        指定foxpro表的文件名.

 

 

/*************导出到Access********************/

insert into openrowset('Microsoft.Jet.OLEDB.4.0',

   'x:\A.mdb';'admin';'',A) select * from数据库名..B

 

/*************导入Access********************/

insert into B selet * from openrowset('Microsoft.Jet.OLEDB.4.0',

   'x:\A.mdb';'admin';'',A)

 

*********************  导入 xml 文件

 

DECLARE @idoc int

DECLARE @doc varchar(1000)

--sample XML document

SET @doc ='

<root>

  <Customer cid= "C1" name="Janine" city="Issaquah">

      <Order oid="O1" date="1/20/1996" amount="3.5" />

      <Order oid="O2" date="4/30/1997" amount="13.4">Customer was very satisfied

      </Order>

   </Customer>

   <Customer cid="C2" name="Ursula" city="Oelde" >

      <Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue

             white red">

            <Urgency>Important</Urgency>

            Happy Customer.

      </Order>

      <Order oid="O4" date="1/20/1996" amount="10000"/>

   </Customer>

</root>

'

-- Create an internal representation of the XML document.

EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

 

-- Execute a SELECT statement using OPENXML rowset provider.

SELECT *

FROM OPENXML (@idoc, '/root/Customer/Order', 1)

      WITH (oid      char(5),

            amount   float,

            comment ntext 'text()')

EXEC sp_xml_removedocument @idoc

 

 

/********************导整个数据库*********************************************/

 

bcp实现的存储过程

 

 

/*

实现数据导入/导出的存储过程

         根据不同的参数,可以实现导入/导出整个数据库/单个表

调用示例:

--导出调用示例

----导出单个表

exec file2table 'zj','','','xzkh_sa..地区资料','c:\zj.txt',1

----导出整个数据库

exec file2table 'zj','','','xzkh_sa','C:\docman',1

 

--导入调用示例

----导入单个表

exec file2table 'zj','','','xzkh_sa..地区资料','c:\zj.txt',0

----导入整个数据库

exec file2table 'zj','','','xzkh_sa','C:\docman',0

 

*/

if exists(select 1 from sysobjects where name='File2Table' and objectproperty(id,'IsProcedure')=1)

drop procedure File2Table

go

create procedure File2Table

@servername varchar(200)  --服务器名

,@username varchar(200)   --用户名,如果用NT验证方式,则为空''

,@password varchar(200)   --密码

,@tbname varchar(500)   --数据库.dbo.表名,如果不指定:.dbo.表名,则导出数据库的所有用户表

,@filename varchar(1000)  --导入/导出路径/文件名,如果@tbname参数指明是导出整个数据库,则这个参数是文件存放路径,文件名自动用表名.txt

,@isout bit      --1为导出,0为导入

as

declare @sql varchar(8000)

 

if @tbname like '%.%.%' --如果指定了表名,则直接导出单个表

begin

set @sql='bcp '+@tbname

  +case when @isout=1 then ' out ' else ' in ' end

  +' "'+@filename+'" /w'

  +' /S '+@servername

  +case when isnull(@username,'')='' then '' else ' /U '+@username end

  +' /P '+isnull(@password,'')

exec master..xp_cmdshell @sql

end

else

begin --导出整个数据库,定义游标,取出所有的用户表

declare @m_tbname varchar(250)

if right(@filename,1)<>'\' set @filename=@filename+'\'

 

set @m_tbname='declare #tb cursor for select name from '+@tbname+'..sysobjects where xtype=''U'''

exec(@m_tbname)

open #tb

fetch next from #tb into @m_tbname

while @@fetch_status=0

begin

  set @sql='bcp '+@tbname+'..'+@m_tbname

   +case when @isout=1 then ' out ' else ' in ' end

   +' "'+@filename+@m_tbname+'.txt " /w'

   +' /S '+@servername

   +case when isnull(@username,'')='' then '' else ' /U '+@username end

   +' /P '+isnull(@password,'')

  exec master..xp_cmdshell @sql

  fetch next from #tb into @m_tbname

end

close #tb

deallocate #tb

end

go

 

 

/**********************Excel导到Txt****************************************/

想用

select * into opendatasource(...) from opendatasource(...)

实现将一个Excel文件内容导入到一个文本文件

 

假设Excel中有两列,第一列为姓名,第二列为很行帐号(16)

且银行帐号导出到文本文件后分两部分,前8位和后8位分开。

 

 

如果要用你上面的语句插入的话,文本文件必须存在,而且有一行:姓名,银行账号1,银行账号2

然后就可以用下面的语句进行插入

注意文件名和目录根据你的实际情况进行修改.

 

insert into

opendatasource('MICROSOFT.JET.OLEDB.4.0'

,'Text;HDR=Yes;DATABASE=C:\'

)...[aa#txt]

--,aa#txt)

--*/

select姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)

from

opendatasource('MICROSOFT.JET.OLEDB.4.0'

,'Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls'

--,Sheet1$)

)...[Sheet1$]

 

如果你想直接插入并生成文本文件,就要用bcp

 

declare @sql varchar(8000),@tbname varchar(50)

 

--首先将excel表内容导入到一个全局临时表

select @tbname='[##temp'+cast(newid() as varchar(40))+']'

,@sql='select姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)

into '+@tbname+' from

opendatasource(''MICROSOFT.JET.OLEDB.4.0''

,''Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls''

)...[Sheet1$]'

exec(@sql)

 

--然后用bcp从全局临时表导出到文本文件

set @sql='bcp "'+@tbname+'" out "c:\aa.txt" /S"(local)" /P"" /c'

exec master..xp_cmdshell @sql

 

--删除临时表

exec('drop table '+@tbname)

 

 

bcp将文件导入导出到数据库的存储过程:

 

 

/*--bcp-二进制文件的导入导出

 

支持image,text,ntext字段的导入/导出

image适合于二进制文件;text,ntext适合于文本数据文件

 

注意:导入时,将覆盖满足条件的所有行

  导出时,将把所有满足条件的行也出到指定文件中

 

此存储过程仅用bcp实现

邹建 2003.08-----------------*/

 

/*--调用示例

--数据导出

exec p_binaryIO 'zj','','','acc_演示数据..tb','img','c:\zj1.dat'

 

--数据导出

exec p_binaryIO 'zj','','','acc_演示数据..tb','img','c:\zj1.dat','',0

--*/

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_binaryIO]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

drop procedure [dbo].[p_binaryIO]

GO

 

Create proc p_binaryIO

@servename varchar (30),--服务器名称

@username varchar (30), --用户名

@password varchar (30), --密码

@tbname varchar (500),  --数据库..表名

@fdname varchar (30),  --字段名

@fname varchar (1000), --目录+文件名,处理过程中要使用/覆盖:@filename+.bak

@tj varchar (1000)='',  --处理条件.对于数据导入,如果条件中包含@fdname,请指定表名前缀

@isout bit=1   --1导出((默认),0导入

AS

declare @fname_in varchar(1000) --bcp处理应答文件名

,@fsize varchar(20)   --要处理的文件的大小

,@m_tbname varchar(50)  --临时表名

,@sql varchar(8000)

 

--则取得导入文件的大小

if @isout=1

set @fsize='0'

else

begin

create table #tb(可选名 varchar(20),大小 int

  ,创建日期 varchar(10),创建时间 varchar(20)

  ,上次写操作日期 varchar(10),上次写操作时间 varchar(20)

  ,上次访问日期 varchar(10),上次访问时间 varchar(20),特性 int)

insert into #tb

exec master..xp_getfiledetails @fname

select @fsize=大小 from #tb

drop table #tb

if @fsize is null

begin

  print '文件未找到'

  return

end

 

end

 

--生成数据处理应答文件

set @m_tbname='[##temp'+cast(newid() as varchar(40))+']'

set @sql='select * into '+@m_tbname+' from(

select null as类型

union all select 0 as前缀

union all select '+@fsize+' as长度

union all select null as结束

union all select null as格式

) a'

exec(@sql)

select @fname_in=@fname+'_temp'

,@sql='bcp "'+@m_tbname+'" out "'+@fname_in

+'" /S"'+@servename

+case when isnull(@username,'')='' then ''

  else '" /U"'+@username end

+'" /P"'+isnull(@password,'')+'" /c'

exec master..xp_cmdshell @sql

--删除临时表

set @sql='drop table '+@m_tbname

exec(@sql)

 

if @isout=1

begin

set @sql='bcp "select top 1 '+@fdname+' from '

  +@tbname+case isnull(@tj,'') when '' then ''

   else ' where '+@tj end

  +'" queryout "'+@fname

  +'" /S"'+@servename

  +case when isnull(@username,'')='' then ''

   else '" /U"'+@username end

  +'" /P"'+isnull(@password,'')

  +'" /i"'+@fname_in+'"'

exec master..xp_cmdshell @sql

end

else

begin

--为数据导入准备临时表

set @sql='select top 0 '+@fdname+' into '

  +@m_tbname+' from ' +@tbname

exec(@sql)

 

--将数据导入到临时表

set @sql='bcp "'+@m_tbname+'" in "'+@fname

  +'" /S"'+@servename

  +case when isnull(@username,'')='' then ''

   else '" /U"'+@username end

  +'" /P"'+isnull(@password,'')

  +'" /i"'+@fname_in+'"'

exec master..xp_cmdshell @sql

 

--将数据导入到正式表中

set @sql='update '+@tbname

  +' set '+@fdname+'=b.'+@fdname

  +' from '+@tbname+' a,'

  +@m_tbname+' b'

  +case isnull(@tj,'') when '' then ''

   else ' where '+@tj end

exec(@sql)

 

--删除数据处理临时表

set @sql='drop table '+@m_tbname

end

 

--删除数据处理应答文件

set @sql='del '+@fname_in

exec master..xp_cmdshell @sql

 

go

 

 

/**导入文本文件

EXEC master..xp_cmdshell 'bcp "dbname..tablename" in c:\DT.txt -c -Sservername -Usa -Ppassword'

 

改为如下,不需引号

EXEC master..xp_cmdshell 'bcp dbname..tablename in c:\DT.txt -c -Sservername -Usa -Ppassword'

 

/**导出文本文件

EXEC master..xp_cmdshell 'bcp "dbname..tablename" out c:\DT.txt -c -Sservername -Usa -Ppassword'

此句需加引号


sql常见面试题

sql理论题

1.触发器的作用?

 

 答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

 

2什么是存储过程?用什么来调用?

 

答:存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程。

 

3。索引的作用?和它的优点缺点是什么?

答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

 

3。什么是内存泄漏?

答:一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。

 

4维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么?

 

答:我是这样做的,尽可能使用约束,如check,主键,外键,非空字段等来约束,这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。

 

5什么是事务?什么是锁?

答:事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。

 

 锁:在所以的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。

 

6什么叫视图?游标是什么

答:视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。

 

  游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

 

7。为管理业务培训信息,建立3个表:

    S(S#,SN,SD,SA)S#,SN,SD,SA分别代表学号,学员姓名,所属单位,学员年龄

    C(C#,CN)C#,CN分别代表课程编号,课程名称

    SC(S#,C#,G) S#,C#,G分别代表学号,所选的课程编号,学习成绩

 1)使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名?

     答案:select s# ,sn from s where S# in(select S# from c,sc where c.c#=sc.c# and cn=’税收基础’)

 (2) 使用标准SQL嵌套语句查询选修课程编号为’C2的学员姓名和所属单位?

答:select sn,sd from s,sc where s.s#=sc.s# and sc.c#=c2

 (3)使用标准SQL嵌套语句查询不选修课程编号为’C5的学员姓名和所属单位?

答:select sn,sd from s where s# not in(select s# from sc where c#=c5)

 

 (4)查询选修了课程的学员人数

答:select学员人数=count(distinct s#) from sc

 

(5)查询选修课程超过5门的学员学号和所属单位?

答:select sn,sd from s where s# in(select s# from sc group by s# having count(distinct c#)>5)

 

是查询A(ID,Name)表中第3140条记录,ID作为主键可能是不是连续增长的列,完整的查询语句如下:

 

select top 10 * from A where ID >(select max(ID) from (select  top 30 ID from A order by A

) T) order by A

 

要求是查询表A中存在ID重复三次以上的记录,完整的查询语句如下:

select * from(select count(ID) as count from table group by ID)T where T.count>3

 

create table testtable1

(

 id int IDENTITY,

 department varchar(12)

)

 

select * from testtable1

insert into testtable1 values('设计')

insert into testtable1 values('市场')

insert into testtable1 values('售后')

/*

结果

id department

1  设计

2  市场

3  售后

*/

create table testtable2

(

 id int IDENTITY,

 dptID int,

 name varchar(12)

)

insert into testtable2 values(1,'张三')

insert into testtable2 values(1,'李四')

insert into testtable2 values(2,'王五')

insert into testtable2 values(3,'彭六')

insert into testtable2 values(4,'陈七')

/*

用一条SQL语句,怎么显示如下结果

id dptID  department  name

1  1      设计       张三

2  1      设计       李四

3  2      市场       王五

4  3      售后       彭六

5  4      黑人       陈七

*/

 

答案是:

 

SELECT testtable2.* , ISNULL(department,'黑人')

FROM testtable1 right join testtable2 on testtable2.dptID = testtable1.ID

 

 

 

在面试应聘的SQL Server数据库开发人员时,我运用了一套标准的基准技术问题。下面这些问题是我觉得能够真正有助于淘汰不合格应聘者的问题。它们按照从易到难的顺序排列。当你问到关于主键和外键的问题时,后面的问题都十分有难度,因为答案可能会更难解释和说明,尤其是在面试的情形下。

 

你能向我简要叙述一下SQL Server 2000中使用的一些数据库对象吗?

 

你希望听到的答案包括这样一些对象:表格、视图、用户定义的函数,以及存储过程;如果他们还能够提到像触发器这样的对象就更好了。如果应聘者不能回答这个基本的问题,那么这不是一个好兆头。

 

NULL是什么意思?

NULL()这个值是数据库世界里一个非常难缠的东西,所以有不少应聘者会在这个问题上跌跟头您也不要觉得意外。 NULL这个值表示UNKNOWN(未知):它不表示“”(空字符串)。假设您的SQL Server数据库里有ANSI_NULLS,当然在默认情况下会有,对NULL这个值的任何比较都会生产一个NULL值。您不能把任何值与一个 UNKNOWN值进行比较,并在逻辑上希望获得一个答案。您必须使用IS NULL操作符。

 

什么是索引?SQL Server 2000里有什么类型的索引?

 

任何有经验的数据库开发人员都应该能够很轻易地回答这个问题。一些经验不太多的开发人员能够回答这个问题,但是有些地方会说不清楚。简单地说,索引是一个数据结构,用来快速访问数据库表格或者视图里的数据。在SQL Server里,它们有两种形式:聚集索引和非聚集索引。聚集索引在索引的叶级保存数据。这意味着不论聚集索引里有表格的哪个(或哪些)字段,这些字段都会按顺序被保存在表格。由于存在这种排序,所以每个表格只会有一个聚集索引。非聚集索引在索引的叶级有一个行标识符。这个行标识符是一个指向磁盘上数据的指针。它允许每个表格有多个非聚集索引。

 

什么是主键?什么是外键?

 

主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。那么这些相连的字段就是外键。

 

什么是触发器?SQL Server 2000有什么不同类型的触发器?

 

让未来的数据库开发人员知道可用的触发器类型以及如何实现它们是非常有益的。触发器是一种专用类型的存储过程,它被捆绑到SQL Server 2000的表格或者视图上。在SQL Server 2000里,有INSTEAD-OFAFTER两种触发器。INSTEAD-OF触发器是替代数据操控语言(Data Manipulation

LanguageDML)语句对表格执行语句的存储过程。例如,如果我有一个用于TableAINSTEAD-OF-UPDATE

触发器,同时对这个表格执行一个更新语句,那么INSTEAD-OF-UPDATE触发器里的代码会执行,而不是我执行的更新语句则不会执行操作。

 

AFTER触发器要在DML语句在数据库里使用之后才执行。这些类型的触发器对于监视发生在数据库表格里的数据变化十分好用。

 

您如何确一个带有名为Fld1字段的TableB表格里只具有Fld1字段里的那些值,而这些值同时在名为TableA的表格的Fld1字段里?

 

这个与关系相关的问题有两个可能的答案。第一个答案(而且是您希望听到的答案)是使用外键限制。外键限制用来维护引用的完整性。它被用来确保表格里的字段只保存有已经在不同的(或者相同的)表格里的另一个字段里定义了的值。这个字段就是候选键(通常是另外一个表格的主键)

 

另外一种答案是触发器。触发器可以被用来保证以另外一种方式实现与限制相同的作用,但是它非常难设置与维护,而且性能一般都很糟糕。由于这个原因,微软建议开发人员使用外键限制而不是触发器来维护引用的完整性。

 

对一个投入使用的在线事务处理表格有过多索引需要有什么样的性能考虑?

 

你正在寻找进行与数据操控有关的应聘人员。对一个表格的索引越多,数据库引擎用来更新、插入或者删除数据所需要的时间就越多,因为在数据操控发生的时候索引也必须要维护。

 

你可以用什么来确保表格里的字段只接受特定范围里的值?

 

这个问题可以用多种方式来回答,但是只有一个答案是“好”答案。您希望听到的回答是Check限制,它在数据库表格里被定义,用来限制输入该列的值。

 

触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。因此,微软建议使用Check限制而不是其他的方式来限制域的完整性。

 

如果应聘者能够正确地回答这个问题,那么他的机会就非常大了,因为这表明他们具有使用存储过程的经验。

 

返回参数总是由存储过程返回,它用来表示存储过程是成功还是失败。返回参数总是INT数据类型。

 

OUTPUT参数明确要求由开发人员来指定,它可以返回其他类型的数据,例如字符型和数值型的值。(可以用作输出参数的数据类型是有一些限制的。)您可以在一个存储过程里使用多个OUTPUT参数,而您只能够使用一个返回参数。

 

什么是相关子查询?如何使用这些查询?

 

经验更加丰富的开发人员将能够准确地描述这种类型的查询。相关子查询是一种包含子查询的特殊类型的查询。查询里包含的子查询会真正请求外部查询的值,从而形成一个类似于循环的状况。

 

什么是SQL注入式攻击?

所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。常见的SQL注入式攻击过程类如:

某个ASP.NET Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码。

登录页面中输入的内容将直接用来构造动态的SQL命令,或者直接用作存储过程的参数。下面是ASP.NET应用构造查询的一个例子:

System.Text.StringBuilder query = new System.Text.StringBuilder(
   "SELECT * from Users WHERE login = '")
   .Append(txtLogin.Text).Append("' AND password='")
   .Append(txtPassword.Text).Append("'");


攻击者在用户名字和密码输入框中输入"''1'='1"之类的内容。

用户输入的内容提交给服务器之后,服务器运行上面的ASP.NET代码构造出查询用户的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'

服务器执行查询或存储过程,将用户输入的身份信息和服务器中保存的身份信息进行对比。

由于SQL命令实际上已被注入式攻击修改,已经不能真正验证用户身份,所以系统会错误地授权给攻击者。

如果攻击者知道应用会将表单中输入的内容直接用于验证身份的查询,他就会尝试输入某些特殊的SQL字符串篡改查询改变其原来的功能,欺骗系统授予访问权限。

系统环境不同,攻击者可能造成的损害也不同,这主要由应用访问数据库的安全权限决定。如果用户的帐户具有管理员或其他比较高级的权限,攻击者就可能对数据库的表执行各种他想要做的操作,包括添加、删除或更新数据,甚至可能直接删除表

如何防范SQL注入式攻击?

好在要防止ASP.NET应用被SQL注入式攻击闯入并不是一件特别困难的事情,只要在利用表单输入的内容构造SQL命令之前,把所有输入内容过滤一番就可以了。过滤输入内容可以按多种方式进行。

对于动态构造SQL查询的场合,可以使用下面的技术:

第一:替换单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义。再来看前面的例子,"SELECT * from Users WHERE login = ''' or ''1''=''1' AND password = ''' or ''1''=''1'"显然会得到与"SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'"不同的结果。

第二:删除用户输入内容中的所有连字符,防止攻击者构造出类如"SELECT * from Users WHERE login = 'mas' -- AND password =''"之类的查询,因为这类查询的后半部分已经被注释掉,不再有效,攻击者只要知道一个合法的用户登录名称,根本不需要知道用户的密码就可以顺利获得访问权限。

第三:对于用来执行查询的数据库帐户,限制其权限。用不同的用户帐户执行查询、插入、更新、删除操作。由于隔离了不同帐户可执行的操作,因而也就防止了原本用于执行SELECT命令的地方却被用于执行INSERTUPDATEDELETE命令。

用存储过程来执行所有的查询。SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击。此外,它还使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式攻击了。

限制表单或查询字符串输入的长度。如果用户的登录名字最多只有10个字符,那么不要认可表单中输入的10个以上的字符,这将大大增加攻击者在SQL命令中插入有害代码的难度。

检查用户输入的合法性,确信输入的内容只包含合法的数据。数据检查应当在客户端和服务器端都执行——之所以要执行服务器端验证,是为了弥补客户端验证机制脆弱的安全性。

在客户端,攻击者完全有可能获得网页的源代码,修改验证合法性的脚本(或者直接删除脚本),然后将非法内容通过修改后的表单提交给服务器。因此,要保证验证操作确实已经执行,唯一的办法就是在服务器端也执行验证。你可以使用许多内建的验证对象,例如 RegularExpressionValidator,它们能够自动生成验证用的客户端脚本,当然你也可以插入服务器端的方法调用。如果找不到现成的验证对象,你可以通过CustomValidator自己创建一个。

将用户登录名称、密码等数据加密保存。加密用户输入的数据,然后再将它与数据库中保存的数据比较,这相当于对用户输入的数据进行了"消毒"处理,用户输入的数据不再对数据库有任何特殊的意义,从而也就防止了攻击者注入SQL命令。 System.Web.Security.FormsAuthentication类有一个 HashPasswordForStoringInConfigFile,非常适合于对输入数据进行消毒处理。

检查提取数据的查询所返回的记录数量。如果程序只要求返回一个记录,但实际返回的记录却超过一行,那就当作出错处理

 

 

Sql常见题目

为管理岗位业务培训信息,建立3个表:

S (S#,SN,SD,SA) S#,SN,SD,SA分别代表学号、学员姓名、所属单位、学员年龄

C (C#,CN ) C#,CN分别代表课程编号、课程名称

SC ( S#,C#,G ) S#,C#,G分别代表学号、所选修的课程编号、学习成绩

1.使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名

--实现代码:

Select SN,SD FROM S Where [S#] IN( Select [S#] FROM C,SC Where C.[C#]=SC.[C#] AND CN=N'税收基础')

2.使用标准SQL嵌套语句查询选修课程编号为’C2的学员姓名和所属单位

--实现代码:

Select S.SN,S.SD FROM S,SC Where S.[S#]=SC.[S#] AND SC.[C#]='C2'

3.使用标准SQL嵌套语句查询不选修课程编号为’C5的学员姓名和所属单位

--实现代码:

Select SN,SD FROM S Where [S#] NOT IN( Select [S#] FROM SC Where [C#]='C5')

4.使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位

--实现代码:

Select SN,SD FROM S Where [S#] IN( Select [S#] FROM SC RIGHT JOIN C ON SC.[C#]=C.[C#] GROUP BY [S#] HAVING COUNT(*)=COUNT([S#]))

5.查询选修了课程的学员人数

--实现代码:

Select学员人数=COUNT(DISTINCT [S#]) FROM SC

6.查询选修课程超过5门的学员学号和所属单位

--实现代码:

Select SN,SD FROM S Where [S#] IN( Select [S#] FROM SC GROUP BY [S#] HAVING COUNT(DISTINCT [C#])>5)

题目2:

问题描述:

S (SNO,SNAME)学生关系。SNO为学号,SNAME为姓名

C (CNO,CNAME,CTEACHER)课程关系。CNO为课程号,CNAME为课程名,CTEACHER为任课教师

SC(SNO,CNO,SCGRADE)选课关系。SCGRADE为成绩

1.找出没有选修过“李明”老师讲授课程的所有学生姓名

--实现代码:

Select SNAME FROM S Where NOT EXISTS( Select * FROM SC,C Where SC.CNO=C.CNO AND CNAME='李明' AND SC.SNO=S.SNO)

2.列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩

--实现代码:

Select S.SNO,S.SNAME,AVG_SCGRADE=AVG(SC.SCGRADE) FROM S,SC,( Select SNO FROM SC Where SCGRADE<60 GROUP BY SNO HAVING COUNT(DISTINCT CNO)>=2 )A Where S.SNO=A.SNO AND SC.SNO=A.SNO GROUP BY S.SNO,S.SNAME

3.列出既学过“1号课程,又学过“2号课程的所有学生姓名

--实现代码:

Select S.SNO,S.SNAME FROM S,( Select SC.SNO FROM SC,C Where SC.CNO=C.CNO AND C.CNAME IN('1','2') GROUP BY SNO HAVING COUNT(DISTINCT CNO)=2 )SC Where S.SNO=SC.SNO

4.列出“1号课成绩比“2号同学该门课成绩高的所有学生的学号

--实现代码:

Select S.SNO,S.SNAME FROM S,( Select SC1.SNO FROM SC SC1,C C1,SC SC2,C C2 Where SC1.CNO=C1.CNO AND C1.NAME='1' AND SC2.CNO=C2.CNO AND C2.NAME='2' AND SC1.SCGRADE>SC2.SCGRADE )SC Where S.SNO=SC.SNO

5.列出“1号课成绩比“2号课成绩高的所有学生的学号及其“1号课和“2号课的成绩

--实现代码:

Select S.SNO,S.SNAME,SC.[1号课成绩],SC.[2号课成绩] FROM S,( Select SC1.SNO,[1号课成绩]=SC1.SCGRADE,[2号课成绩]=SC2.SCGRADE FROM SC SC1,C C1,SC SC2,C C2 Where SC1.CNO=C1.CNO AND C1.NAME='1' AND SC2.CNO=C2.CNO AND C2.NAME='2' AND SC1.SCGRADE>SC2.SCGRADE )SC Where S.SNO=SC.SNO

 

 

求其中同一个号码的两次通话之间间隔大于10秒的通话记录ID

例如:678910条记录均符合

ID主叫号码被叫号码     通话起始时间           通话结束时间           通话时长

1 98290000 0215466546656 2007-02-01 09:49:53.000 2007-02-01 09:50:16.000 23

2 98290000 021546654666  2007-02-01 09:50:29.000 2007-02-01 09:50:41.000 12

3 98290000 021546654666  2007-02-01 09:50:58.000 2007-02-01 09:51:12.000 14

4 68290900 0755133329866 2007-02-01 10:04:31.000 2007-02-01 10:07:13.000 162

5 78290000 0755255708638 2007-02-01 10:48:26.000 2007-02-01 10:49:23.000 57

6 78290000 0755821119109 2007-02-01 10:49:39.000 2007-02-01 10:52:55.000 196

7 78290000 035730928370  2007-02-01 11:30:45.000 2007-02-01 11:31:58.000 73

8 78290000 0871138889904 2007-02-01 11:33:47.000 2007-02-01 11:35:00.000 73

9 68290000 035730928379  2007-02-01 11:52:20.000 2007-02-01 11:54:56.000 156

10 68290000 0298521811199 2007-02-01 12:44:45.000 2007-02-01 12:45:04.000 19

 

答案:

SELECT DISTINCT a.* FROM dbo.hc a left join dbo.hc b

ON a.主叫号码=b.主叫号码

WHERE a.id<>b.id AND (DATEDIFF(second,a.通话起始时间,b.通话结束时间)>10 AND

DATEDIFF(second,b.通话起始时间,a.通话结束时间)>10)


2:已知数组int[] max={6,5,2,9,7,4,0};用快速排序算法按降序对其进行排列,并返回数组
 
3:请简述面向对象的多态的特性及意义!
 
4:session喜欢丢值且占内存,Cookis不安全,请问用什么办法代替这两种原始的方法
 
5:对数据的并发采用什么办法进行处理较好。
 
6:已知Oracle数据库有GD和ZS两个数据库,GD数据库v_s表有数据写入时,从v_s表中提取最新数据到ZS数据库的D_E表中。请问用什么办法解决这一问题?如果又碰到不能互访的问题时,又用什么办法解决?
 
7:已知Oracle数据库a,b
现在在a用户权限下,访问b数据库sql语句为select a.* From b a,请改正这一句Sql的写法
 
8:当对数据库进行海量级的数据插入时,数据库出现报错,错误原因可能有哪些,以你的经验谈谈你的解决办法
 
9:算法分析
AH 20060625 12 44 01 CAD001
AH 20060625 12 44 01 CAD001
AH 20060625 13 44 02 CAD001
AH 20060625 14 44 03 CAD001
说明:第二列表示日期,第三列表示温度,第四列表示水位,第五列表示流量,第6列表示水位测站编码,每一列表示一个字段
很明显第一条数据和第二条数据重复,然数据表中有主键和外键的约束,是不允许有重复的数据存在的,请构造算法将重复的数据Del掉
 
10:javascript算法
已知a,b,现在点鼠标a会向b游动,鼠标停,a会停下来
请实现"跑步算法"
 
1、答案
 
a=a+b;
b=a-b;
a=a-b;
 
还有变态要求,需要代码最短呢。有两个结果:
1) a^=b^(b^=a^b); // 13个字节
2) a=b+(b=a)*0; // 11个字节
 
2、答案(如果不限定算法,其实可以直接用Array.Sort()方法的)
 
public class TestQuickSort {
 
    private int[] array = null;
 
    private void quickSort(int lowest, int highest) {
        if (array == null || lowest < 0 || lowest >= highest
                || highest >= array.length) {
            return;
        }
        int low = lowest;
        int high = highest;
        int key = low++;
        for (; low <= high;) {
            if (key < high) {
                if (array[key] > array[high]) {
                    array[high] = array[key] + (array[key] = array[high]) * 0;
                    key = high;
                }
                high--;
            }
 
            if (key > low) {
                if (array[key] < array[low]) {
                    array[low] = array[key] + (array[key] = array[low]) * 0;
                    key = low;
                }
                low++;
            }
        }
        quickSort(lowest, key - 1);
        quickSort(key + 1, highest);
    }
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        TestQuickSort test = new TestQuickSort();
        int[] array = {6,5,2,9,7,4,0};
        test.array = array;
        test.quickSort(0, array.length - 1);
        int length = test.array.length;
        for (int i = 0; i < length; i++) {
            System.out.println(test.array[i]);
        }
    }
}
 
不要用冒泡排序法很慢,选择排序好些,但题意是快速排序算法
快速排序算法的基本思想:
快速排序的基本思想是基于分治策略的。对于输入的子序列ap..ar,如果规模足够小则直接进行排序,否则分三步处理:
分解(Divide):将输入的序列ap..ar划分成两个非空子序列ap..aq和aq+1..ar,使ap..aq中任一元素的值不大于aq+1..ar中任一元素的值。
递归求解(Conquer):通过递归调用快速排序算法分别对ap..aq和aq+1..ar进行排序。
合并(Merge):由于对分解出的两个子序列的排序是就地进行的,所以在ap..aq和aq+1..ar都排好序后不需要执行任何计算ap..ar就已排好序。
这个解决流程是符合分治法的基本步骤的。因此,快速排序法是分治法的经典应用实例之一。
 
算法Quick_Sort的实现:
 
Pascal实现:
Procedure Quick_Sort(p,r:TPosition;var L:TList); {快速排序}
 
var
 
q:TPosition;
 
begin
 
if L[p..r]足够小 then Sort(p,r,L) {若L[p..r]足够小则直接对L[p..r]排序}
 
else
 
begin
 
q:=Partition(p,r,L); {将L[p..r]分解为L[p..q]和L[q+1..r]两部分}
 
Quick_Sort(p,q,L); {递归排序L[p..q]}
 
Quick_Sort(q+1,r,L); {递归排序L[q+1..r]}
 
end;
 
end;
 
 
3、答案
 
面向对象的编程使用了派生继承 以及虚函数机制.
一个本来指向基类的对象指针可以指向其派生类的.并访问从基类继承而来的成员变量和函数.
而虚函数是专门为这个特性设计的,这个函数在每个基类的派生类中都是同一个名字,但函数体却并不一定相同,派生类往往为实现自己的功能而修改这个虚函数.这样用一个指针就能够实现对多种不同的派生类的访问, 并实现其派生类的特定功能(代码 )....
 
4、答案
用VIEWSTATE
stateserver
 
5、答案
可以控制连接池的连接数量条件好的话 可以用负载平衡
 
6、答案
一个中型或大型公司往往由地理上分散的部门所组成,这些部门通常需要进行数据共享。针对这些共享数据,可以将其存储在某个站点上,需要的用户都从这个站点上存取。这种方案的优点是数据的一致性容易保证,但其缺点也是很突出的,那就是该站点的负载大、网络负载大,远程用户的数据响应迟缓。数据复制技术可以有效地解决这个问题,它通过将这些共享数据复制到位于不同地点的多个数据库中,从而实现数据的本地访问,减少了网络负荷,并提高了数据访问的性能,而且通过对数据库中的数据定期同步(通常是每天晚上),从而确保了所有的用户使用同样的、最新的数据。该技术适用于用户数量较大、地理分布较广、而且需要实时地访问相同数据的应用模式。
 
数据复制的概念及特点
 
1、数据复制的概念及分类
数据复制,就是将数据库中的数据拷贝到另外一个或多个不同的物理站点上,从而保持源数据库与目标数据库中指定数据的一致性。
 
按照数据复制的实时性,数据复制可分为同步数据复制和异步数据复制。同步数据复制是指将本地生产数据以完全同步的方式复制到异地,每一本地IO交易均需等待远程复制的完成方予以释放。异步数据复制则是指将本地生产数据以后台同步的方式复制到异地,每一本地IO交易均正常释放,无需等待远程复制的完成。同步复制实时性强,远端数据与本地数据完全同步。但这种方式受带宽影响较大,数据传输距离较短。异步复制不影响本地交易,传输距离长,但其数据比本地数据略有延迟。在异步复制环境中,对于所有应用最关键的就是要确保数据的一致性。
 
按照复制站点的类型,数据复制可分为多主控站点复制、物化视图复制及混合复制。多主控站点复制也称为对等站点复制,其中每个站点都是主控站点,都需要与其他站点进行信息交流,各站点之间是平等的。物化视图复制包含一个主控站点、一个或多个物化视图站点,
 
物化视图中的内容可以为目标主对象在某个时间点的全部拷贝或部分拷贝,其中目标主对象既可以是主控站点上的表也可以是物化视图站点上的主物化视图。混合复制包含多个主控站点和多个物化视图站点,是主控站点复制和物化视图复制的结合体,适合于复杂的业务情况。
 
2、数据复制的特点
 
数据复制通过在多个站点上建立备份,能够提高数据的安全性,同时也提高了数据的可用性,这是因为如果一个站点出现了问题,用户可以选择其他站点继续进行操作,应用系统还可继续运行,从而数据复制提供了容错保护机制。
 
然而数据复制最基本的功能是提高数据库的性能。它通过将远程数据库中的数据复制到本地,使得应用能够就近访问数据,从而降低网络传输负载,提高效率。而且在数据复制系统中,可以提供多个站点之间的负载平衡,让这几个用户使用这个服务器,另外几个用户可以
 
使用其他的服务器,以避免某些站点负载过重。
 
物化视图还提供了按子集进行复制,这样各站点就可只复制自己需要的数据,也能减轻网络的传输量。
 
数据复制的实现方法
 
在具体的实现之前,首先要做好设计与规划。这就需要细致分析具体的业务情况,设计出一套能够满足业务需要的方案。通常在设计过程中,需要确定出要建立的数据库站点,各站点的类型,需要复制的数据对象,以及同步方式、冲突解决方案等内容。
 
在设计完成之后,就可具体来实现数据复制,实现主要包括以下几步:
(1)创建复制站点
(2)创建组对象
(3)配置冲突解决方案
 
下面我们举一个例子来说明各步具体需要完成的工作。在这个例子中我们采用多主控站点复制方式,设有两个主控站点和两个共享数据表。两个主控站点分别为:处理站点(cl.world)和解释站点(js.wo rld);两个数据表为测区( survey)和测线( line)。
STEP1 创建复制站点
(1)首先以SYSTEM身份登陆主站点数据库cl.worldCONNECT system/manager@cl.world
(2)创建用户—复制管理员,并为该用户授权复制管理员负责复制站点的创建和管理,每个复制站点都必须创建复制管理员:
CREATE USER repadmin IDENTIFIED BY repadmin;
BEGIN
 DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (username => ’repadmin’);
END;
(3)为本站点指定传播者
传播者负责将本地最新更新的数据传播到其他站点上:
BEGIN
 
 DBMS_DEFER_SYS.REGISTER_PROPAGATOR (username => ’repadmin’);
 
END;
(4)为本站点指定接收者
接收者负责接收其他站点上的传播者传送过来的数据:
BEGIN
 
DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP (
 username => ’repadmin’,
 privilege_type => ’receiver’,
 list_of_gnames => NULL);
END;
(5)确定清除时间
为了使传送过来事务队列不致过大,需要将成功加载的事务从事物队列里清除掉,这里设定每小时清除一次。
BEGIN
 DBMS_DEFER_SYS.SCHEDULE_PURGE (
next_date => SYSDATE,
interval => ’SYSDATE + 1/24’,
delay_seconds => 0);
END;
在建立好站点cl.world后,以同样的方法创建站点js. world。
 
(6)创建各主控站点之间的调度链接
创建各主控站点之间的调度链接需要先在各主控站点间建立数据库链接,之后为每个数据库链接定义调度时间。
首先,在处理站点上建立与解释站点的数据库链接,这里需要先建立一个公用数据库链接,供其他私有数据库链接来使用。
CREATE PUBLIC DATABASE LINK js.world USING ’js.world’;
CREATE DATABASE LINK js.world CONNECT TO repadmin
IDENTIFIED BY repadmin;
同样,在解释站点上建立与处理站点的数据库链接
CREATE PUBLIC DATABASE LINK cl.world USING ’cl.world’;
CREATE DATABASE LINK cl.world CONNECT TO repadmin
IDENTIFIED BY repadmin;
调度链接确定本站点上的事务向其他站点发送的频度,下面的代码为10分钟一次:
BEGIN
DBMS_DEFER_SYS.SCHEDULE_PUSH (
destination => ’js.world’,
interval => ’SYSDATE + (1/144)’,
next_date => SYSDATE,
parallelism => 1,
execution_seconds => 1500,
delay_seconds => 1200);
END;
在解释站点上做相同的工作STEP2 创建主控组在复制环境中,Oracle用组来管理复制对象。通过将相关的复制对象放在一个组里,从而方便对大量数据对象的管理。
 
这里我们假设用户模式integr ation 在处理站点和解释站点都已存在,而且表测区(survey )和测线(line)也已经创建。
(1)创建主控组对象
 
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPGROUP (
gname => ’inte_repg’);
END;
 
(2)向主控组中添加数据对象,将测区表survey加入到组inte_repg中
BEGIN
 
DBMS_REPCAT.CREATE_MASTER_REPOBJECT (
gname => ’inte_repg’,
type => ’TABLE’,
oname => ’survey’,
sname => ’integration’,
use_existing_object => TRUE,
copy_rows => FALSE);
END;
以同样的方法将测线表line 加入到组inte_repg中
 
(3)在主控组中添加其他参与复制的站点,数据库之间的同步方式在此指定
BEGIN
DBMS_REPCAT.ADD_MASTER_DATABASE (
gname => ’inte_repg’,
master => ’js.world’,
use_existing_objects => TRUE,
copy_rows => FALSE,
propagation_mode => ’ASYNCHRONOUS’);
END;
(4)如果可能出现冲突,则需要配置冲突解决方案。冲突解决方案将在后面介绍。
(5)为每个对象生成复制支持
BEGIN
DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT (
sname => ’integration’,
oname => ’survey’,
type => ’TABLE’,
min_communication => TRUE);
END;
测线表line也一样
 
 
(6)重新开始复制
BEGIN
DBMS_REPCAT.RESUME_MASTER_ACTIVITY (
gname => ’inte_repg’);
END;
以同样的方式设置解释站点。设置成功后,数据复制过程就宣告完毕,库中的数据就可进行复制。
数据复制中冲突的解决方案
在复制环境中,尽管在数据库和应用程序设计过程中,会尽量避免各站点间冲突的发生,但完全避免冲突的可能性还是比较小的,那么一旦冲突发生,就需要一个按照具体业务规则的冲突解决机制,来使得各站点的数据保持一致。
首先需要分析哪些对象容易出现冲突。通常来说,静态的数据变化少,冲突出现的可能性也小;而有些数据变化非常大,冲突出现的可能性也大。确定了冲突易发的对象后,需要确定怎样解决冲突,比如在各站点之间建立优先次序,在数据不一致时,以某个站点上的为
 
准;或以某个站点上最新的修改为准。
 
Oracle提供了多中冲突解决方案,具体包括:针对更新冲突的方案、针对唯一性冲突的方案、针对删除冲突的方案。除了这些方案以外,用户还可以自定义冲突解决方法。每种方案都有自己的适用情况,那么我们需要根据具体的业务来选择合适的冲突解决方案。
结束语
本文详细介绍了分布式系统Oracle中的数据复制技术,在具体应用中,还有许多比较复杂的问题需要解决,比如主控组中如果包含循环依赖的表或自相关的表时如何处理;如何利用模版机制来创建物化视图站点;如何对数据复制环境进行管理与维护。这些问题需要在实际
应用中逐步探索,深入研究。
 
7、答案
select a.* from b.b a
8、答案
对于oracle数据库来说,可能出现的问题包括:
1. 回滚区间空间不足  --- 解决方法,增加表空间
2. 数据表空间不足 ---- 增加数据表空间
3. 表空间不足 ---- 增加表空间(oracle数据表有空间限制)
4. 临时表空间不足 --- 因为计算索引使用临时表空间,增加表空间或者暂时不使用索引,数据导入完毕再重新建立索引
5.另外一些原因,主要是垃圾数据造成的,比如外键匹配,主键冲突,单一索引冲突等。
9、答案
DELETE FROM TABLE_NAME
WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D
WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2);
 
10、答案

1.简述private、protected、public、internal修饰符的访问权限。
答.private:私有成员,在类的内部才可以访问。
protected:保护成员,该类内部和继承类中可以访问。
public:公共成员,完全公开,没有访问限制。
internal:在同一命名空间内可以访问。
2.列举ASp.NET页面之间传递值的几种方式。
答.1.使用QueryString,如....?id=1;response.Redirect()....
2.使用Session变量
3.使用Server.Transfer
3.一列数的规则如下:1、1、2、3、5、8、13、21、34......求第30位数是多少,用递归算法实现。
答:publicclassMainClass
{
publicstaticvoidMain()
{
Console.WriteLine(Foo(30));
}
publicstaticintFoo(inti)
{
if(i<=0)
return0;
elseif(i>0&&i<=2)
return1;
elsereturnFoo(i-1)+Foo(i-2);
}
}
4.C#中的委托是什么?事件是不是一种委托?
答:
委托可以把一个方法作为参数代入另一个方法。
委托可以理解为指向一个函数的引用。
是,是一种特殊的委托
5.override与重载的区别
答:
override与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要
Override是进行基类中函数的重写。为了适应需要。
6.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理?
答:
this.Server.Transfer
7.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty?
答:
foreach(System.Windows.Forms.Controlcontrolinthis.Controls)
{
if(controlisSystem.Windows.Forms.TextBox)
{
System.Windows.Forms.TextBoxtb=(System.Windows.Forms.TextBox)control;
tb.Text=String.Empty;
}
}
8.请编程实现一个冒泡排序算法?
答:
int[]array=newint[*];
inttemp=0;
for(inti=0;i<array.Length-1;i++)
{
for(intj=i+1;j<array.Length;j++)
{
if(array[j]<array[i])
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}
}
9.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
答:不是。可以用任意类型。
10.求以下表达式的值,写出您想到的一种或几种实现方法:1-2+3-4+……+m
答:
intNum=Convert.ToInt32(this.TextBox1.Text);
intSum=0;
for(inti=0;i<Num+1;i++)
{
if((i%2)==1)
{
Sum+=i;
}
else
{
Sum=Sum-I;
}
}
System.Console.WriteLine(Sum.ToString());
System.Console.ReadLine();
11.用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?
答:一般为3层
数据访问层,业务层,表示层。
数据访问层对数据库进行增删查改。
业务层一般分为二层,业务表观层实现与表示层的沟通,业务规则层实现用户密码的安全等。
表示层为了与用户交互例如用户添加表单。
优点:分工明确,条理清晰,易于调试,而且具有可扩展性。
缺点:增加成本。
12.在下面的例子里
usingSystem;
classA
{
publicA()
{
printFields();
}
publicvirtualvoidprintFields(){}
}
classB:A
{
intx=1;
inty;
publicB()
{
y=-1;
}
publicoverridevoidprintFields()
{
Console.WriteLine("x={0},y={1}",x,y);
}
当使用newB()创建B的实例时,产生什么输出?
答:X=1,Y=0;x=1y=-1
13.什么叫应用程序域?
答:应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小。
14.CTS、CLS、CLR分别作何解释?
答:CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。
15.什么是装箱和拆箱?
答:从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。
16.什么是受管制的代码?
答:unsafe:非托管代码。不经过CLR运行。
17.什么是强类型系统?
答:RTTI:类型识别系统。
18.net中读写数据库需要用到那些类?他们的作用?
答:DataSet:数据存储器。
DataCommand:执行语句命令。
DataAdapter:数据的集合,用语填充。
19.ASp.net的身份验证方式有哪些?分别是什么原理?
答:10。Windwos(默认)用IIS...From(窗体)用帐户....passport(密钥)
20.什么是Code-Behind技术?
答:代码后植。
21.在.net中,配件的意思是?
答:程序集。(中间语言,源数据,资源,装配清单)
22.常用的调用WebService的方法有哪些?
答:1.使用WSDL.exe命令行工具。
2.使用VS.NET中的AddWebReference菜单选项
23..netRemoting的工作原理是什么?
答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。
24.在C#中,stringstr=null与stringstr=“”请尽量使用文字或图象说明其中的区别。
答:stringstr=null是不给他分配内存空间,而stringstr=""给它分配长度为空字符串的内存空间。
25.请详述在dotnet中类(class)与结构(struct)的异同?
答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.
26.根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写:
namespacetest
{
publicdelegatevoidOnDBOperate();
publicclassUserControlBase:System.Windows.Forms.UserControl
{
publiceventOnDBOperateOnNew;
privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgse)
{
if(e.Button.Equals(BtnNew))
{
//请在以下补齐代码用来调用OnDBOperate委托签名的OnNew事件。
}
}
}
答:if(OnNew!=null)
OnNew(this,e);
27.分析以下代码,完成填空
stringstrTmp="abcdefg某某某";
inti=System.Text.Encoding.Default.GetBytes(strTmp).Length;
intj=strTmp.Length;
以上代码执行完后,i=j=
答:i=13,j=10
28.SQLSERVER服务器中,给定表table1中有两个字段ID、LastUpdateDate,ID表示更新的事务号,LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号
答:SelectIDFROMtable1WhereLastUpdateDate=(SelectMAX(LastUpdateDate)FROMtable1)
29.根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。
publicvoidtest(inti)
{
lock(this)
{
if(i>10)
{
i--;
test(i);
}
}
}
答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)
30.简要谈一下您对微软.NET构架下remoting和webservice两项技术的理解以及实际中的应用。
答:WS主要是可利用HTTp,穿透防火墙。而Remoting可以利用TCp/Ip,二进制传送提高效率。

remoting是.net             中用来跨越machine,             process,             appdomain             进行方法调用的技术,对于三层结构的程序,就可以使用remoting技术来构建.它是分布应用的基础技术.相当于以前的DCOM            Web             Service是一种构建应用程序的普通模型,并能在所有支持internet网通讯的操作系统上实施。Web             Service令基于组件的开发和web的结合达到最佳,基于组件的对象模型 

31.公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路
答:根据点击的列头,包该列的名称取出,按照该列名排序后,再绑定到ListView中。


32.给定以下XML文件,完成算法流程图。
<FileSystem> 
< DriverC > 
<Dir DirName=”MSDOS622”> 
<File FileName =” Command.com” ></File> 
</Dir> 
<File FileName =”MSDOS.SYS” ></File> 
<File FileName =” IO.SYS” ></File> 
</DriverC> 
</FileSystem> 
请画出遍历所有文件名(FileName)的流程图(请使用递归算法)。
答:图就不画了,直接把程序写出来:
Public void DomDepthFirst(XmlNode currentNode)
{
    XmlNode node=currentNode.FirstChild;
    while(node!=null)
    {
          DomDepthFirst(node);
          node=node.NextSibling;
    }
     if(node.Name=="File")
     {
          Console.Write(((XmlElement)node).GetAttribute("FileName")+"\r\n");
     }
}


 


35.能用foreach遍历访问的对象需要实现 ________________接口或声明________________方法的类型。
答:IEnumerable 、 GetEnumerator。


36.GC是什么? 为什么要有GC?
答:GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一: 
System.gc()
Runtime.getRuntime().gc()


37.String s = new String("xyz");创建了几个String Object?
答:两个对象,一个是“xyz”,一个是指向“xyz”的引用对像s。


38.abstract class和interface有什么区别?
答:
声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽像类,并让它指向具体子类的一个实例。不能有抽像构造函数或抽像静态方法。Abstract 类的子类为它们父类中的所有抽像方法提供实现,否则它们也是抽像类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽像类的变体。在接口中,所有方法都是抽像的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽像的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对像上调用接口的方法。由于有抽像类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。


39.启动一个线程是用run()还是start()?
答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。


40.接口是否可继承接口? 抽像类是否可实现(implements)接口? 抽像类是否可继承实体类(concrete class)?
答:接口可以继承接口。抽像类可以实现(implements)接口,抽像类是否可继承实体类,但前提是实体类必须有明确的构造函数。


41.构造器Constructor是否可被override?
答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。


42.是否可以继承String类?
答:String类是final类故不可以继承。


44.两个对像值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
答:不对,有相同的hash code。


45.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
答:switch(expr1)中,expr1是一个整型,字符或字符串,因此可以作用在byte和long上,也可以作用在string上。


47.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
不能,一个对象的一个synchronized方法只能由一个线程访问。


48.abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
答:都不能。


49.List, Set, Map是否继承自Collection接口?
答:List,Set是Map不是


50.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对像equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。


51.数组有没有length()这个方法? String有没有length()这个方法?
答:数组和string都没有Length()方法,只有Length属性。


52.sleep() 和 wait() 有什么区别?
答:sleep()方法是将当前线程挂起指定的时间。
wait()释放对象上的锁并阻塞当前线程,直到它重新获取该锁。


53.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
答:short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。


54.谈谈final, finally, finalize的区别。
答:
final-修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此 一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中 不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为 final的方法也同样只能使用,不能重载
finally-再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会 执行,然后控制就会进入 finally 块(如果有的话)。
finalize-方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对像从内存中清除出去之前做必要的清理 工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的 ,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对像之前对这个对象调用的。


55.如何处理几十万条并发数据?
答:用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取.


56.Session有什么重大BUG,微软提出了什么方法加以解决?
答:是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate server或SQL Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获Session的END事件。


57.进程和线程的区别?
答:进程是系统进行资源分配和调度的单位;线程是CPU调度和分派的单位,一个进程可以有多个线程,这些线程共享这个进程的资源。


58.堆和栈的区别?
答:栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小


59.成员变量和成员函数前加static的作用?
答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。分别用来反映类的状态。比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作。


60.ASP。NET与ASP相比,主要有哪些进步?
答:asp解释形,aspx编译型,性能提高,可以跟美工的工作分开进行,更有利于团队开发。


61.产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
int[] intArr=new int[100];
ArrayList myList=new ArrayList();
Random rnd=new Random();
while(myList.Count<100)
{
int num=rnd.Next(1,101);
if(!myList.Contains(num))
myList.Add(num);
}
for(int i=0;i<100;i++)
intArr[i]=(int)myList[i];


62.请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。
答:session(viewstate) 简单,但易丢失
application 全局
cookie 简单,但可能不支持,可能被伪造
url参数 简单,显示于地址栏,长度有限
数据库 稳定,安全,但性能相对弱


63.请指出GAC的含义?
答:全局程序集缓存。


64.向服务器发送请求有几种方式?
答:get,post。get一般为链接方式,post一般为按钮方式。


65.DataReader与Dataset有什么区别?
答:一个是只能向前的只读游标,一个是内存中的表。


66.软件开发过程一般有几个阶段?每个阶段的作用?
答:需求分析,架构设计,代码编写,QA,部署


67.在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?using 指令 和语句 new 创建实例 new 隐藏基类中方法。
答:using 引入名称空间或者使用非托管资源
new 新建实例或者隐藏父类方法


68.需要实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中间还有连续空格的话,仅保留一个空格,即允许字符串中间有多个空格,但连续的空格数不可超过一个.
答:string inputStr=" xx xx ";
     inputStr = Regex.Replace(inputStr.Trim(), @"\s+", " ");


69.下面这段代码输出什么?为什么?
int i=5;
int j=5;
if (Object.ReferenceEquals(i,j))
Console.WriteLine("Equal");
else
Console.WriteLine("Not Equal");
答:不相等,因为比较的是对像


70.什么叫做SQL注入,如何防止?请举例说明。
答:利用sql语言漏洞获得合法身份登陆系统。如身份验证的程序设计成:
SqlCommand com=new SqlCommand("Select * from users where username='"+t_name.text+"' and pwd='"+t_pwd.text+"'");
object obj=com.ExcuteScale();
if(obj!=null)
  {
    //通过验证
  }
这段代码容易被sql注入。如用户在t_name中随便输入,在t_pwd中输入1' and 1='1  就可以进入系统了。


71.什么是反射?
答:动态获取程序集信息


72.用Singleton如何写设计模式
答:static属性里面new ,构造函数private


73.什么是Application Pool?
答:Web应用,类似Thread Pool,提高并发性能。


74.什么是虚函数?什么是抽像函数?
答:虚函数:可由子类继承并重写的函数。抽像函数:规定其非虚子类必须实现的函数,必须被重写。


75.什么是XML?
答:XML即可扩展标记语言。eXtensible Markup Language.标记是指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,即可以选择国际通用的标记语言,比如HTML,也可以使用象XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML是从SGML中简化修改出来的。它主要用到的有XML、XSL和XPath等。


77.什么是ASP.net中的用户控件?
答:用户控件一般用在内容多为静态,或者少许会改变的情况下..用的比较大..类似ASP中的include..但是功能要强大的多。


78.列举一下你所了解的XML技术及其应用
答:xml用于配置,用于保存静态数据类型.接触XML最多的是web Services..和config,soap协议


79.ADO.net中常用的对象有哪些?分别描述一下。
答:Connection 数据库连接对像
Command 数据库命令
DataReader 数据读取器
DataSet 数据集


80.什么是code-Behind技术。
答:ASPX,RESX和CS三个后缀的文件,这个就是代码分离.实现了HTML代码和服务器代码分离.方便代码编写和整理.


81.什么是SOAP,有哪些应用。
答:SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的协议,是一个基于XML的协议。使用SOAP,不用考虑任何特定的传输协议(最常用的还是HTTP协议),可以允许任何类型的对象或代码,在任何平台上,以任何一直语言相互通信。这种相互通信采用的是XML格式的消息。


SOAP也被称作XMLP,为两个程序交换信息提供了一种标准的工作机制。在各类机构之间通过电子方式相互协作的情况下完全有必要为此制定相应的标准。


SOAP描述了把消息捆绑为XML的工作方式。它还说明了发送消息的发送方、消息的内容和地址以及发送消息的时间。SOAP是Web Service的基本通信协议。SOAP规范还定义了怎样用XML来描述程序数据(Program Data),怎样执行RPC(Remote Procedure Call)。大多数SOAP解决方案都支持RPC-style应用程序。SOAP还支持 Document-style应用程序(SOAP消息只包含XML文本信息)。


最后SOAP规范还定义了HTTP消息是怎样传输SOAP消息的。MSMQ、SMTP、TCP/IP都可以做SOAP的传输协议。 


SOAP 是一种轻量级协议,用于在分散型、分布式环境中交换结构化信息。 SOAP 利用 XML 技术定义一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构。 这种框架的设计思想是要独立于任何一种特定的编程模型和其他特定实现的语义。


SOAP 定义了一种方法以便将 XML 消息从 A 点传送到 B 点。 为此,它提供了一种基于 XML 且具有以下特性的消息处理框架: 1) 可扩展, 2) 可通过多种底层网络协议使用, 3) 独立于编程模型。


82.C#中 property 与 attribute的区别,他们各有什么用处,这种机制的好处在哪里?
答:一个是属性,用于存取类的字段,一个是特性,用来标识类,方法等的附加性质


83.XML 与 HTML 的主要区别
答:1. XML是区分大小写字母的,HTML不区分。 
2. 在HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略</p>或者</li>之类的结束 标记。在XML中,绝对不能省略掉结束标记。 
3. 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。这样分析器就知道不用 查找结束标记了。 
4. 在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。 
5. 在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。


84.c#中的三元运算符是?
答:?:。


85.当整数a赋值给一个object对像时,整数a将会被?
答:装箱。


86.类成员有_____种可访问形式?
答:this.;new Class().Method;


87.public static const int A=1;这段代码有错误么?是什么?
答:const不能用static修饰。


88.float f=-123.567F; int i=(int)f;i的值现在是_____? 
答:-123。


89.委托声明的关键字是______?
答:delegate.


 


91.在Asp.net中所有的自定义用户控件都必须继承自________?
答:Control。


92.在.Net中所有可序列化的类都被标记为_____? 
答:[serializable]


93.在.Net托管代码中我们不用担心内存漏洞,这是因为有了______?
答:GC。


94.下面的代码中有什么错误吗?_______
using System;
class A
{
public virtual void F(){
Console.WriteLine("A.F");
}
}
abstract class B:A
{
public abstract override void F(); 答:abstract override 是不可以一起修饰. 
} // new public abstract void F();


95.当类T只声明了私有实例构造函数时,则在T的程序文本外部,___可以___(可以 or 不可以)从T派生出新的类,不可以____(可以 or 不可以)直接创建T的任何实例。
答:不可以,不可以。


96.下面这段代码有错误么?
switch (i){
case(): 答://case()条件不能为空
CaseZero();
break;
case 1:
CaseOne();
break;
case 2:
dufault; 答://wrong,格式不正确
CaseTwo();
break;
}


97.在.Net中,类System.Web.UI.Page 可以被继承么?
答:可以。


98..net的错误处理机制是什么?
答:.net错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止。


99.利用operator声明且仅声明了==,有什么错误么?
答:要同时修改Equale和GetHash() ? 重载了"==" 就必须重载 "!="


 


104.某一密码仅使用K、L、M、N、O共5个字母,密码中的单词从左向右排列,密码单词必须遵循如下规则:
(1) 密码单词的最小长度是两个字母,可以相同,也可以不同
(2) K不可能是单词的第一个字母
(3) 如果L出现,则出现次数不止一次
(4) M不能使最后一个也不能是倒数第二个字母
(5) K出现,则N就一定出现
(6) O如果是最后一个字母,则L一定出现
问题一:下列哪一个字母可以放在LO中的O后面,形成一个3个字母的密码单词?
A) K B)L C) M D) N
答案:B


问题二:如果能得到的字母是K、L、M,那么能够形成的两个字母长的密码单词的总数是多少?
A)1个 B)3个 C)6个 D)9个
答案:A


问题三:下列哪一个是单词密码?
A) KLLN B) LOML C) MLLO D)NMKO
答案:C


8. 62-63=1 等式不成立,请移动一个数字(不可以移动减号和等于号),使得等式成立,如何移动?
答案:62移动成2的6次方


105.对于这样的一个枚举类型:
enum Color:byte
{
Red,
Green,
Blue,
Orange
}
答:string[] ss=Enum.GetNames(typeof(Color));
byte[] bb=Enum.GetValues(typeof(Color));


106. C#中 property 与 attribute的区别,他们各有什么用处,这种机制的好处在哪里?
答:attribute:自定义属性的基类;property :类中的属性


107.C#可否对内存进行直接的操作?
答:在.net下,.net引用了垃圾回收(GC)功能,它替代了程序员 不过在C#中,不能直接实现Finalize方法,而是在析构函数中调用基类的Finalize()方法


108.ADO。NET相对于ADO等主要有什么改进?
答:1:ado.net不依赖于ole db提供程序,而是使用.net托管提供的程序,2:不使用com3:不在支持动态游标和服务器端游 4:,可以断开connection而保留当前数据集可用 5:强类型转换 6:xml支持


109.写一个HTML页面,实现以下功能,左键点击页面时显示“您好”,右键点击时显示“禁止右键”。并在2分钟后自动关闭页面。
答:<script ***script>
setTimeout('window.close();',3000);
function show()
{
if (window.event.button == 1)
{
alert("左");
}
else if (window.event.button == 2)
{
alert("右");
}
}
</script>


110.大概描述一下ASP。NET服务器控件的生命周期
答:初始化 加载视图状态 处理回发数据 加载 发送回发更改通知 处理回发事件 预呈现 保存状态 呈现 处置 卸载


111.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
答:不能,可以实现接口


112.Static Nested Class 和 Inner Class的不同,说得越多越好
答:Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。


113.,&和&&的区别。
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and).


114.HashMap和Hashtable的区别。
答:HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable.


115.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
答:short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)
short s1 = 1; s1 += 1;(可以正确编译)


116.Overloaded的方法是否可以改变返回值的类型?
答:Overloaded的方法是可以改变返回值的类型。


117.error和exception有什么区别?
答:error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。


118.<%# %> 和 <% %> 有什么区别?
答:<%# %>表示绑定的数据源
<% %>是服务器端代码块


119.你觉得ASP.NET 2.0(VS2005)和你以前使用的开发工具(.Net 1.0或其他)有什么最大的区别?你在以前的平台上使用的哪些开发思想(pattern / architecture)可以移植到ASP.NET 2.0上 (或者已经内嵌在ASP.NET 2.0中)
答:1 ASP.NET 2.0 把一些代码进行了封装打包,所以相比1.0相同功能减少了很多代码.
                  2 同时支持代码分离和页面嵌入服务器端代码两种模式,以前1.0版本,.NET提示帮助只有在分离的代码文件,无 法 在页面嵌入服务器端代码获得帮助提示,
                  3 代码和设计界面切换的时候,2.0支持光标定位.这个我比较喜欢
                  4 在绑定数据,做表的分页.UPDATE,DELETE,等操作都可以可视化操作,方便了初学者
                  5 在ASP.NET中增加了40多个新的控件,减少了工作量


120.重载与覆盖的区别?
答:1、方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系
                  2、覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系。
                  3、覆盖要求参数列表相同;重载要求参数列表不同。
                  4、覆盖关系中,调用那个方法体,是根据对象的类型(对像对应存储空间类型)来决定;重载关系,是根据调 用时的实参表与形参表来选择方法体的。


121.描述一下C#中索引器的实现过程,是否只能根据数字进行索引? 
答:不是。可以用任意类型。



125.分析以下代码。
public static void test(string ConnectString)


{


System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(); 
conn.ConnectionString = ConnectString; 
try



conn.Open(); 
……. 
}
catch(Exception Ex) 

MessageBox.Show(Ex.ToString()); 
}
finally 
{


if (!conn.State.Equals(ConnectionState.Closed)) 
conn.Close(); 

}
请问


1)以上代码可以正确使用连接池吗?


答:回答:如果传入的connectionString是一模一样的话,可以正确使用连接池。不过一模一样的意思是,连字符的空格数,顺序完全一致。


126.公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路:
答:根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中


127.什么是WSE?目前最新的版本是多少?
答:WSE (Web Service Extension) 包来提供最新的WEB服务安全保证,目前最新版本2.0。


128.在下面的例子里
using System;
class A
{
public A(){
PrintFields();
}
public virtual void PrintFields(){}
}
class B:A
{
int x=1;
int y;
public B(){
y=-1;
}
public override void PrintFields(){
Console.WriteLine("x={0},y={1}",x,y);
}
当使用new B()创建B的实例时,产生什么输出?
答:X=1,Y=0


129.下面的例子中


using System;
class A
{
public static int X;
static A(){
X=B.Y+1;
}
}
class B
{
public static int Y=A.X+1;
static B(){}
static void Main(){
Console.WriteLine("X={0},Y={1}",A.X,B.Y);
}
}
产生的输出结果是什么?
答:x=1,y=2


130.abstract class和interface有什么区别?
答:声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽像类,并让它指向具体子类的一个实例。不能有抽像构造函数或抽像静态方法。Abstract 类的子类为它们父类中的所有抽像方法提供实现,否则它们也是抽像类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽像类的变体。在接口中,所有方法都是抽像的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽像的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对像上调用接口的方法。由于有抽像类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。











评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值