C#.NET笔试题收集

写在前面

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

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

本文大纲:

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

一、填空或简述题:

  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         }

示例:调用方法

三、数据库题:

时间: 2024-10-05 04:19:29

C#.NET笔试题收集的相关文章

ios笔试题收集(持续更新)

IOS开发笔试题目 一.OC语法部分: 1. NSObject 中description属性的意义,它可以重写吗 用法举例:定义一个Person类,声明两个成员变量 @interface Person : NSObject { NSString * name; int age; } 在类的实现中,init方法初始化成员变量 @implementation Person - (instancetype)init { self = [super init]; if (self) { name = @

10道C++输出易错笔试题收集(敢进来挑战吗?)

下面这些题目都是我之前准备笔试面试过程中积累的,大部分都是知名公司的笔试题,C++基础薄弱的很容易栽进去.我从中选了10道简单的题,C++初学者可以进来挑战下,C++大牛也可以作为娱乐玩下(比如下面的第6题).为了便于大家思考,将题目与答案分开,不过无论题目本身如何,我觉得后面的解析过程更值得学习,因为涉及很多我们学习C++过程中必知必会的小知识点 . 第一部分:题目 如下函数,在32 bit系统foo(2^31-3)的值是:() int foo(int x) { return x&-x; }

10道C++输出易错笔试题收集

下面这些题目都是我之前准备笔试面试过程中积累的,大部分都是知名公司的笔试题,C++基础薄弱的很容易栽进去.我从中选了10道简单的题,C++初学者可以进来挑战下,C++大牛也可以作为娱乐玩下(比如下面的第6题).为了便于大家思考,将题目与答案分开,不过无论题目本身如何,我觉得后面的解析过程更值得学习,因为涉及很多我们学习C++过程中必知必会的小知识点 . 第一部分:题目 如下函数,在32 bit系统foo(2^31-3)的值是:() int foo(int x) { return x&-x; }

QQ群里收集的外企iOS开发的笔试题

一组外企iOS开发的笔试题,您能回答出来吗?从群里收集来的. 1 why can't NSArray contain NSInteger Instance? with which extra step can you do it?2.complete this code so that it becomes syntacticallty correct using no more than one additional word and  square branckets NsInteger [

【转】嵌入式软件工程师经典笔试题

嵌入式软件工程师经典笔试题 > 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中 有多少秒而不是计算出实际的值,是更清晰而没有代价的. 3).

转:嵌入式软件工程师经典笔试题

> 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)  #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的. 3). 意识到这个表达式将使一个1

嵌入式c笔试题(整理)

嵌入式c笔试题 (2012-03-24 22:36) 预处理器(Preprocessor)1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的

C++经典笔试题详解

1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问.它是一个本地的全局变量. 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用.那就是,这个函数被限制在声明它的模块的本地范围内使用 2.引用与指针有什么区别? 1) 引用必须被初始化,指针不必. 2) 引用初始化以后不能被改变,指针可以改变所指的对象.

2015.8.29某高级企业的在线笔试题

收集了今年阿里的在线笔试题,贴出来供需要的朋友参考. 1.下面的函数中哪个是系统调用而不是库函数______?printfscanffgetcreadprint_sscan_s 2.某足球队有四名外援,分别来自巴西.荷兰.意大利和美国.他们分别擅长前锋.后卫或守门,其中:① 美国外援单独擅长守门:② 意大利外援不擅长前锋:③ 巴西外援和另外某个外援擅长相同的位置:④ 荷兰外援擅长的位置和巴西外援不同.以上条件可以推出巴西外援擅长的位置是______.前锋守门后卫前锋或守门后卫或守门前锋或后卫 3