常规技术面试题(.NET)31-40

31. 请列出C#中几种循环的方法,并指出他们的不同

for:一般用于循环次数已知的循环

while: 一般用于循环次数未知的循环,工作原理:先判断后执行

do…while:一般用于循环次数未知的循环,工作原理:先执行一次后判断

foreach:当一个序列实现IEnumerable接口或者GetEnumerator()方法时,可以用该循环方法,一般用于遍历集合或数组,更加安全。

32. 用C#实现以下功能:产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复

namespace Wolfy.RandomDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] result = GetRandom(100);
            for (int i = 0; i < result.Length; i++)
            {
                Console.WriteLine(result[i]);
            }
            Console.WriteLine("over:" + result.Length);
            Console.Read();
        }
        /// <summary>
        /// 获得无重复随机数组
        /// </summary>
        /// <param name="n">上限n</param>
        /// <returns>返回随机数组</returns>
        static int[] GetRandom(int n)
        {
            //容器A和B
            int[] arryA = new int[n];
            int[] arryB = new int[n];
            //填充容器a
            for (int i = 0; i < arryA.Length; i++)
            {
                arryA[i] = i + 1;
            }
            //随机对象
            Random r = new Random();
            //最后一个元素的索引 如n=100,end=99
            int end = n - 1;
            for (int i = 0; i < n; i++)
            {
                //生成随机数 因为随机的是索引 所以从0到100取,end=100
                      //一个大于等于 minValue 且小于 maxValue 的 32 位带符号整数,即:返回的值范围包括 minValue 但不包括 maxValue。 
                //如果 minValue 等于 maxValue,则返回 minValue
                //
                int minValue = 0;
                int maxValue = end + 1;
                int ranIndex = r.Next(minValue, maxValue);
                //把随机数放在容器B中
                arryB[i] = arryA[ranIndex];
                //用最后一个元素覆盖取出的元素
                arryA[ranIndex] = arryA[end];
                //缩减随机数生成的范围
                end--;
            }
            //返回生成的随机数组
            return arryB;
        }
    }
}

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

WebService特点:

平台独立性(Platform-independent)、跨语言(只要能支持XML的语言都可以)以及穿透企业防火墙;Webservice是基于http的是无状态的;但是它的缺点也很明显,就是需要部署一台Web Server;而且速度比较慢;

.Net Remoting的特点是:用户既可以使用TCP信道进行二进制流方式通信,也可以使用HTTP信道进行SOAP格式的通信,效率相对WebService要高不少;Remoting可以用于有状态的情况;但是它的缺点也很明显,.Net Remoting只能应用于MS的.Net Framework之下。

使用场合:

如果互动双方都是支持.NET技术的环境,并且在操作系统上能提供一致的验证机制,而且很重视沟通双方作业的效率,就是.NET Remoting上场的时机。

相反的,如果沟通双方是异质环境,又或沟通的模式就是无状态的情况,持续进行的互动作业前后是没有关联的,Web Service就是理想选择了。

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

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

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

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

namespace test
{
public delegate void OnDBOperate();
public class UserControlBase : System.Windows.Forms.UserControl
{
public event OnDBOperate OnNew;
privatevoidtoolBar_ButtonClick(object sender,System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
if(e.Button.Equals(BtnNew))
{
//请在以下补齐代码用来调用OnDBOperate委托签名的OnNew事件。
}
}
}
}

  if(   OnNew   !=   null   ){
  			OnNew( );
		}

37. NET Remoting 的工作原理是什么?

在Remoting中是通过通道(channel)来实现两个应用程序域之间对象的通信。首先,客户端通过Remoting,访问通道以获得服务端对象,再通过代理解析为客户端对象。这就提供一种可能性,即以服务的方式来发布服务器对象。远程对象代码可以运行在服务器上(如服务器激活的对象和客户端激活的对象),然后客户端再通过Remoting连接服务器,获得该服务对象并通过序列化在客户端运行。

38. 在.NET中,配件的意思是?

配件就是Assembly(程序集),程序集由程序集清单,类型元数据,MSIL代码和资源组成。

39. .NET中读写文件需要用到那些方法?他们的作用?

1)File类:

使用场合:当读写文件大小不大,同时可以一次性进行读写操作的时候使用

使用方式:不同的方式可以读写文件类型不一样。

ReadAllBytes() WriteAllByte():可以读写任意类型的文件

ReadAllLines() ReadAllText():只能读写文本类型文件

2)FileStream类:

使用场合:当读写大文件的时候使用,它可以自定义读写的数组大小

使用方式:一个流对象只能做一个事情:如果需要读和写那么就需要创建两个流

读取:将数据读取到数组

写入:将数组的数据再写入到文件

3)StreamReader/StreamWrite类:

使用场合:只能对文本文件进行读写操作

使用方式:它可以按行、按字符以及按块进行读取和写入

40. 在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);

41. 在C#中using和new这两个关键字有什么意义,请写出你所知道的意义?

using 关键字有两个主要用途:

1)作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型。

2)作为语句,用于定义一个范围,在此范围的末尾将释放对象。

在 C# 中,new 关键字可用作运算符、修饰符或约束。

1)new 运算符:用于创建对象和调用构造函数。这种大家都比较熟悉,没什么好说的了。

2)new 修饰符:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。

3)new 约束:用于在泛型声明中约束可能用作类型参数的参数的类型。

小剧场:纵有疾风来,人生不言败。If there is a strong wind, life will not be defeated.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章