码迷,mamicode.com
首页 > Windows程序 > 详细

C#.NET笔试题收集

时间:2017-02-16 17:38:28      阅读:311      评论:0      收藏:0      [点我收藏+]

标签:编程   项目   attribute   原型   存储过程   前台   write   用户   close   

写在前面

  一题一题过,基本都亲自测试;不定期收录更新,欢迎拍砖(请轻拍~)。

  跳槽是真的累,要准备笔试面试~

本文大纲:

  • 填空或简述题
  • 程序或编程题
  • 数据库题

一、填空或简述题:

  1. c#中错误处理机制有哪些

  答:Try catch finally throw;  

  2. public/protect/private/internal修饰符的区别

  答:Public:公共的,都能访问;

    Protect:受保护的,只有该类和派生类能访问;

    Private:私有的,只有该类可以访问;

    Internal:内部的,只能在包含它的程序集中访问;

  3. 大量数据(如3000万条数据)并发处理时,有哪几种机制

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

    取得最大标识要有一个存储过程来获取。--我也不知道讲的什么鬼!

  4. String/StringBuilder的异同

  答:string,是一个不可变的数据类型,一旦对字符串对象进行了初始化,该字符串对象就不能改变了。修改字符串内容的方法

    和运算符实际上是创建一个新的字符串;

    stringbuilder,分配好内存,对字符串的修改就在赋予stringbuilder实例的存储单元中进行。

    示例代码:

  技术分享
 1             string s1 = "a";
 2             string s2 = s1;
 3             s1 += "b";
 4             // 输出结果:ab a
 5             Console.WriteLine("使用string定义的变量1和2此时的值分别是:{0}  {1}", s1, s2);
 6             StringBuilder sb1 = new StringBuilder("a");
 7             StringBuilder sb2 = sb1;
 8             sb1.Append("b");
 9             // 输出结果:ab ab
10             Console.WriteLine("使用StringBuilder定义的变量1和2此时的值分别是:{0}  {1}", sb1.ToString(), sb2.ToString());
11             Console.ReadLine();
示例:string 和 StringBuilder对比

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

(和第4题对比看)

public void test(int i)
{
lock(this)
{
if (i>10)
{
i--;
test(i);
}
}
}

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

  6. 解释string str=null/string str=""

  答:str=null,声明一个字符串而不分内存空间;

    str="",声明一个字符串并且分配了内存空间赋值为一个空字符串;

  7. ASP.NET页面间传递参数有哪几种方式

  答:QueryString、Session、Cookie、Application和Server.Transfer;

  简单说明:

  A. QueryString:将一个或者多个安全性不高的参数连接到目标URL的后面使用&字符隔开:

    源页面:Response.Redirect(带参数的URL)跳转;

    目标页:Request.Query[“参数名称”]取出参数;

  B. Session:消耗服务器资源,存放在服务器端,针对单个用户,全局;

  C. Cookie:存放在客户端:

    源页面:HttpCookie objCookie = new HttpCookie("myCookie","Hello,Cookie!");

        Response.Cookies.Add(cookie);

    目标页:string myName1Value = Request.Cookies[ "myCookie" ].Value;

  D.Application:适用于所有用户,全局:

    源页面:Application["name"] = Label1.Text;

    目标页:string name;

        Application.Lock();

        name = Application["name"].ToString();

        Application.UnLock();

  E. Server.Transfer:Server.Transfer是从当前的ASPX页面转到新的ASPX页面,服务器端执行新页并输出,在新页面中通过Context.Handler来获得前一个页面传递的各种数据类型的值、表单数据、QueryString.由于重定向完全在服务器端完成,所以客户端浏览器中的URL地址是不会改变的。调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流。

    源页面:public string Name

        {

          get{ return Label1.Text;}

        }

        private void Button1_Click(object sender, System.EventArgs e)

        {

          Server.Transfer("b.aspx");

        }

    目标页:a newWeb; //实例a窗体

        newWeb = (source)Context.Handler;

        string name;

        name = newWeb.Name; 

  8. 解释重载/覆盖:

  答:重载:指的是在一个类对相同名称的方法或者函数允许有多次定义,但是定义时包含有不同类型的参数或者不同个数的参数,称为方法的重载;

    覆盖(重写):关键字override,指的是子类中的方法对基类中同名的方法(这里通常是虚方法或者抽象方法)的覆盖;

  9. Web Services的含义/UDDI的含义

  答:Web服务:是利用SOAP在HTTP上执行远程方法调用的一种新方法;

    UDDI:统一描述发现和集成(UDDI)提供一种发布和查找服务描述的方法;--我也不知道讲的什么鬼!

  10.虚函数/抽象函数各自的定义

  答:虚函数:由virtual声明,他允许在派生类中被重写(覆盖)

    public class myclass

    {

      public virtual int myint()

      {

        函数体;

      }

    }

    class myclass1:myclass

    {

      public override int myint()

      {

        函数体1;

      }

    }

    抽象类、抽象函数:由abstract关键字声明,在抽象类中可以定义抽象方法,抽象方法沒有具体的执行代码,所以派生类必须通过重写(覆盖)来实现他:

    public abstract class myclass

    {

      public abstract int myint();

    }

    public class myclass1:myclass

    {

      public override int myint()

      {

        函数体;

      }

    } 

  11.接口和类的异同

  答:接口类:由interface关键字声明,是特殊的抽象类,是方法、属性、事件和索引符的组合,没有字段,其成员没有执行代码,没有构造函数,不允许进行运算符重载,接口和他的人员没有任何访问修饰符,他总是公共的,不能声明为虚拟或静态,继承自接口的派生类要实现接口中的所有的方法。

    接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念! 而类是负责功能的具体实现!

    在类中也有抽象类的定义,抽象类与接口的区别在于:

    抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化。

    但接口是一个行为的规范,里面的所有东西都是抽象的!

    一个类只可以继承一个基类也就是父类,但可以实现多个接口。

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

  答:委托:委托可以理解为指向一个函数的指针;

    一般使用委托的步骤:

    A.定义或者声明一个委托,通常指一个函数的原型(包含返回值、参数的类型和个数),但需要使用deletegate关键字,通常在类的外部定义:

     Public deletegate 返回值类型 自定义名称(参数类型和个数);

    B.根据委托定义具体的函数。可能有多个;

    C.创建或者实例化委托对象,并关联实际需要使用的具体方法;

    D.使用委托调用方法,而不是直接调用方法;

    事件:事件是一种特殊的委托;

  13.using/new各自的意义

  答:Using:引入名称空间或者说使用非托管资源;

    New:新建实例或隐藏父类方法;

  14.DataReader/DataSet区别

  答:Dataset表示一个数据集,是数据在内存中的缓存。 可以包括多个表;DatSet 连接数据库时是非面向连接的。把表全部读到Sql中的缓冲池,并断开与数据库的连接;

    Datareader连接数据库时是面向连接的。读表时,只能向前读取,读完数据后由用户决定是否断开连接。

  15.什么叫应用程序域?

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

  16.CTS、CLS、CLR分别作何解释?

  答:CTS:Common Type System,通用类型系统;

    CLS:Common Language Specification,通用语言规范;

    CLR:Common Language Runtime,公共语言运行库。

  17.什么是装箱和拆箱?

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

    从引用类型转换到值类型拆箱;

  18.什么是非托管代码?

  答:unsafe:非托管代码。不经过CLR运行。

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

  答:A.使用WSDL.exe命令行工具;

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

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

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

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

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

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

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

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

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

二、程序或编程题:

  1.一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现

  答:

  技术分享
 1         /// <summary>
 2         /// 斐波拉契数列:递归算法示例
 3         /// </summary>
 4         /// <param name="n">第N位数字</param>
 5         /// <returns></returns>
 6         private static int MyFoo(int n)
 7         {
 8             int result = 0;
 9             if (n <= 0)
10             {
11                 result = 0;
12             }
13             else if (n == 1 && n == 2)
14             {
15                 result = 1;
16             }
17             else
18             {
19                 result = MyFoo(n - 1) + MyFoo(n - 2);
20             }
21             return result;
22         }
示例:递归算法方法体

  方法调用:int result = MyFoo(30);

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

  答:  

  技术分享
 1         /// <summary>
 2         /// 简单冒泡排序(这里为倒序排列):
 3         /// </summary>
 4         /// <param name="array">自定义数组</param>
 5         /// <returns></returns>
 6         private static int[] MyBubble(int[] array)
 7         {
 8             if (array != null && array.Length != 0)
 9             {
10                 for (int i = 0; i < array.Length; i++)
11                 {
12                     for (int j = i + 1; j < array.Length; j++)
13                     {
14                         if (array[i] < array[j])
15                         {
16                             int temp = array[i];
17                             array[i] = array[j];
18                             array[j] = temp;
19                         }
20                     }
21                 }
22             }
23             return array;
24         }
示例:简单冒泡排序算法方法体

  调用方法:// 输出结果:9 3 1 -1 -5

  int[] array = new int[] { 1, -1, 3, -5, 9 };

  array = MyBubble(array);

  string sResult = string.Empty;

  foreach (int num in array)

  {

    sResult += num.ToString() + "     ";

  }

  Console.WriteLine(sResult);

  Console.ReadLine();  

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

  答:  

C#代码示例:

  技术分享
1 foreach (Control control in this.Controls)
2 {
3   if (control is TextBox)
4   {
5     tb = (TextBox)control;
6     tb.Text = String.Empty ;
7   }
8 }
示例:遍历清空所有文本框的值

  JQuery代码示例:

  技术分享
 1 <div>
 2     <input type="text" id="text0" class="myClass" value="1" />
 3     <input type="text" id="text1" class="myClass" value="2" />
 4     <input type="text" id="text2" class="myClass" value="3" />
 5     <input type="text" id="text3" class="myClass" value="4" />
 6     <input type="text" id="text4" class="myClass" value="5" />
 7 </div>
 8 <div>
 9     <input type="button" id="btnClear" value="清空所有文本框的信息" />
10 </div>
示例:前台控件代码
  技术分享
 1     <script src="JQuery脚本路径" type="text/javascript"></script>
 2     <script type="text/javascript">
 3         $(document).ready(function () {
 4             $("#btnClear").bind("click", function () {
 5                 var textBoxs = $(".myClass");
 6                 if (textBoxs != null && textBoxs != undefined) {
 7                     $.each(textBoxs, function (index, textBox) {
 8                         $("#" + textBox.id).val("");
 9                     })
10                 }
11             });
12         });
13     </script>
示例:遍历清空所有文本框的值

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

  答:两两一组求和,M的奇偶性:  

  技术分享
1 if(m%2 == 1)
2 { 
3     S = (m + 1) / 2; 
4 }
5 else
6 { 
7     S = -m / 2; 
8 }
示例:两两一组求和

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

  技术分享
 1 using System; 
 2 class A 
 3 { 
 4 public A() 
 5 { 
 6 PrintFields(); 
 7 } 
 8 public virtual void PrintFields(){} 
 9 } 
10 class B:A 
11 { 
12 int x=1; 
13 int y; 
14 public B() 
15 { 
16 y=-1; 
17 } 
18 public override void PrintFields() 
19 { 
20 Console.WriteLine("x={0},y={1}",x,y); 
21 } 
22 }
题目程序代码

  答:输出X=1,Y=0;

    通过调试可知,声明B对象时,由于B继承A则进入A类的初始化,A初始化时会调用PrintFields方法,此时该方法已被B重写,故输出X=1,Y=0;

    紧接着初始化B,这时Y=-1,但是初始化完成后并没有再调用PrintFields方法,程序结束。  

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

  技术分享
 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <FileSystem>
 3   <DriverC>
 4     <Dir DirName="MSDOS622">
 5       <File FileName="Command.com"></File>
 6     </Dir>
 7     <File FileName="MSDOS.SYS"></File>
 8     <File FileName="IO.SYS"></File>
 9   </DriverC>
10 </FileSystem>
题目给定的XML文件代码

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

  答:大部分转帖的答案不知道是什么鬼,这个是我自己写的。

  技术分享
 1         /// <summary>
 2         /// 在当前节点下遍历并获取文件名
 3         /// </summary>
 4         /// <param name="curNode">当前节点</param>
 5         /// <returns></returns>
 6         private static string GetFileName(XmlNode curNode)
 7         {
 8             string sFileName = string.Empty;
 9             if (curNode != null)
10             {
11                 // 取出当前节点下所有子节点
12                 XmlNodeList childNodes = curNode.ChildNodes;
13                 if (childNodes != null && childNodes.Count != 0)
14                 {
15                     // 遍历所有子节点
16                     foreach (XmlNode node in childNodes)
17                     {
18                         if (node != null)
19                         {
20                             if (node.Name != "File")
21                             {
22                                 sFileName += GetFileName(node);
23                             }
24                             else
25                             {
26                                 // 取出文件名
27                                 sFileName += ((XmlElement)node).GetAttribute("FileName") + "      ";
28                             }
29                         }
30                     }
31                 }
32             }
33             return sFileName;
34         }
示例:从当前节点开始遍历XML并获取文件名

  调用方法://输出为:   文件名是:Command.com  MSDOS.SYS  IO.SYS

  技术分享
 1         private static void GetFileNames()
 2         {
 3             string sFileNames = string.Empty;
 4             XmlDocument xml = new XmlDocument();
 5             xml.Load(“文件路径”);
 6             if (xml != null)
 7             {
 8                 // 获取文件名:这里跳过了XML第一段 “<?xml version="1.0" encoding="utf-8" ?>”
 9                 sFileNames = GetFileName(xml.FirstChild.NextSibling);
10             }
11             Console.WriteLine("文件名是:" + sFileNames);
12             Console.ReadLine();
13         }
示例:调用方法

三、数据库题:

C#.NET笔试题收集

标签:编程   项目   attribute   原型   存储过程   前台   write   用户   close   

原文地址:http://www.cnblogs.com/zhaosx/p/6406635.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!