笔试题集二

 

51. 接口是否可继承接口?抽象类是否而已实现接口?抽象类是否可继承实体类?

答:接口可以继承接口,抽象类也可以实现接口,在实体类有明确的构造函数的前提下,抽象类可以继承实体类
 
52. 两个对象值相同(x.equals(y)==true)但却可有不同的hash code,这句话对不对?
不对,哈希值是对原有的值做哈希,原有的值相同,那么他们的哈希值也相同。
 
53. switch 能否作用在byte上?能否作用在long上?能否作用在String上?
switch(exp1),exp1是一个整数表达式,因此传递给swich的参数可以是 int 、short、char、或者 byte ,这些都可以向上转换为 int ,但是 long和String却不能,long所占的字节大于int转换的过程中,程序就会报错,就像是将一大桶水导入一小桶一样,会丢失。(仅限C#之外的语言)
 
54. 常见的视图引擎有哪些,说说他们的优缺点?
Aspx View Engine    一个呈现Web Forms页面的视图引擎
            缺点:乱、MVC不支持了
          ⑵ Razor View   MVC3中引入
            缺点:随简单易学,但还是乱
          ⑶ Hasic 
            缺点:性能差,因为它要构建整个Dom给客户端
          ⑷ Bellevue    一款Asp.net MVC框架的开源模板
            缺点:不错
55. HTTP 请求的几种方式(几种方法)?
    ⑴ Get  向服务器的资源发出简单的请求,也是HTTP默认的请求方式(安全)
    ⑵ Head 返回的响应内容中除了报文头部外,没有其他内容(安全)
    ⑶ Post 用于发送包含用户提交数据的请求,例如表单数据
    ⑷ Put 向服务器中资源写入数据
    ⑸ Delete 发送一个用来删除指定文本的请求
    ⑹ Trace 发送请求的一个副本,以跟踪其处理进程
    ⑺ Options 返回所有可用的方法,用来检查服务器支持哪些方法
    ⑻ Connect 用于SSL隧道的基于代理的请求
扩展:
    ① Lock 允许用户锁定资源
    ② Mkcol 允许用户创建资源
    ③ Copy 永允许用户创建资源
    ④ Move 允许用户在服务器上移动资源
 
56. 对一个字符串做处理,只允许字符串中间最多出现一个空格(多个只保留一个)
string inputStr="xx                xx";
inputStr=Regex.Replace(inputStr.Trim()," *"," ");

 

57. 什么事SQL注入,如何防止?
利用SQL关键字对数据库进行攻击,对关键字进行替换。
 
58. 什么是反射?
动态获取程序集信息
 
59. C# 中 property 与 attribute 的区别,他们各有什么用处?
property :属性,用于存储类的字段
attribute :特性,用来标识类或方法,使之附加性质
 
60. Asp.net 中所有用户自定义控件都必须继承自?
Control
 
61. 在 .net 中所有可序列化的类都被标记为?
[Serializable]
 
62. net 的错误处理机制是什么样的?
try-catch-finally 发生错误时,一层一层往上抛,知道被catch抓住;这就叫堆错误。
 
63. 大概描述一下 Asp.net 服务器控件的生命周期
初始化、加载视图状态、处理回发数据、加载、发送回发更改通知、处理回发事件、预呈现、保存状态、呈现、处置、卸载
 
64. 匿名类是否可以被继承?是否可以实现接口?
都不能
 
65. & 与 && 的区别?
& 是按位与运算,&& 是逻辑与运算
 
66. HashMap 、HashTable、Dictionary、List的比较?
首先C#模仿Java的过程中已经去掉了 HashMap
    对比 HashTable 和 Dic :如果增删的动作比较多,那么使用Dic,如果查询的动作比较多,那么使用 HashTable;这和他们的处理碰撞的方法不同。
    对比 Dic 和 List:List 是对 数组的一层包装,继承了泛型接口。遍历多建议使用List,因为它的内存是连续的,而Dic的存储内存不是连续的
    对比 HashTable 和 List:需要序列化,建议使用List;根据条件查询比较多,则建议使用HashTable,当然List在强大的linq下查询也很方便
 
67. 以下代码执行结果是?
 
    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
解析:首先从带有 Main() 的类进入,执行 Y = A.X +1; ,此时会调用A类,执行A的构造方法 X = B.Y +1;  此时 Y是等于0的,那么算的 X=1,再回到B的构造函数得出 Y=2
 
68. <%#%>、<%=%>、<%%>有什么区别?
     <%#%>:绑定数据源
     <%=%>:赋值
     <%%>:加载代码块
 
69. 你再什么情况下会考虑使用虚方法?
    实现多态时,虚方法在基类中实现,在子类中重写。
 
70. 请列举你曾经用过的设计模式,并说明在什么情况下使用该模式?
        简单工厂模式、工厂方法模式、抽象工厂模式、单利模式、观察者模式、仓储模式
 
71. 通过超链接怎么传输中文的参数?
        UrlEncode、UrlDecode 编码解码
 
72. 请指出.net中所有类型的基类
        object
 
73. 下面代码输出什么?
 
            int i = 5; 
            int j = 5; 
            if (Object.ReferenceEquals(i, j)) 
                Console.WriteLine("Equal");
            else 
                Console.WriteLine("Not Equal"); 

 

Not Equal
 
74. 如何实现设计模式中的单例模式
 
    public class Singleton
    {
        private static Singleton singleton;
        private Singleton()
        {}
    }

 

75. 不使用数据库,如何通过程序实现快速重排计算
    采用快速排序等排序算法,或者直接使用泛型的方法OrderBy,再或者使用排序字典
 
76. Guid 的哈希值是否会重复;同一字符串,在两个不同的程序和两个不同的服务器中,哈希值是否一样
     可能,因为Guid是有限的。一样,和服务器无关。
 
77. 多线程和并行的区别
    多线程其实还是顺序执行(串行),而并行更能高效的使用CPU;多线程使用的是时间碎片,CPU同一时刻只能执行一条指令,而并行是交给多个CPU同时完成,就是说,同一时间多个CPU在执行指令。 
 
78. 如何快速的讲内存中1000万行数据写入到文本文件中,有哪些注意事项,并行能否提高写的速度
    使用 FileStream 从内存读取流,一次性写入文件。注意设置大小,可能会出现内存溢出等问题。并行不会提高写的速度(猜的)。
 
79. 如何解决一个网站运行过慢的问题
 
80. public static const int A=1;这段代码有什么错?
    const 不能用 static 来修饰
 
81. 列举以下你所了解的XML技术及应用
    一般用作配置文件,用于保存静态的数据类型,接触到的应用有 WebService 、Config文件等
 
82. .net 中XML的类归属哪个命名空间
    System.XML 类
 
83. 运行以下代码,调用Test()方法,当 i>10 时是否会引起死锁?并简述理由
   
private static void Test(int i)
        {
            lock (_obj)
            {
                if (i > 10)
                {
                    i--;
                    Test(i);
                }
            }
        }  

 

不会,Test函数再次调用,无论 i 是值类型还是引用类型,再进去的 i 值都会发生变化,不信的话拷贝到控制台程序试试,奶奶的
 
84. 给定下面的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 GetNodeFileName(dir)
{
    var nodes=dir.GetAllNodes();
    
    if(nodes.Count==0)return null;
    
    foreach(var node in nodes)
    {
        if(node.HasChildNodes)
            GetNodeFileName(node);
        else
            Console.Write(node.Attribute("FileName"));
    }
}

 

85. 数组有没有 Length() 方法,String 有没有 Length() 方法
    数组没有 Length() 方法,但是有Length属性,String 有Length方法
 
86. 请解释什么是上下文对象,在什么情况下要使用上下文对象?
    上下文对象是指 HttpContext 类的 Current 属性,当我们在一个普通类中要访问(Response、Request、Session、Server)等时就需要用到此对象
 
87. 请简述配置文件中的重要节点
    systemWeb:系统配置
    customErrors :自定义错误信息设置
    authentication:身份验证,此节点设置应用程序的身份验证策略
    httpHandlers:
    httpModules:
 
88. 对象能否调用静态方法
    不能,静态方法只属于这个类
 
89. 简述 UDP 和 TCP的异同点
    UDP传输速度快,但不安全; TCP传输速度慢,但是安全。
 
90. 请输出下列代码的运行结果
 
    public class Father
    {
        public void Show()
        {
            Console.WriteLine("Father");
        }
    }
    public class Child :Father
    {
      public void Show()
        {
            Console.WriteLine("Child");
        }

        private static void Main(string[] args)
      {
          var obj = new Child();
          obj.Show();
      }
    }

 

这段代码很重要 var obj =newChild();  var 在声明的时候没有指明哪个类, 故默认为后面实例的类,这是第一点 ;其次,如果子类和父类有同名方法,在没有使用关键字 overide 重写父类的方法时,这两个方法分属各自的类,实例化的对象。调用同名的方法取决于 var 位置的这个类是谁。
 
91. 请输出下列代码的运行结果
 class Class1
    {
        private string str = "Class1.str";
        private int i = 0;
        static void StringConvert(string str)
        {
            str = "string being converted.";
        }
        static void StringConvert(Class1 c)
        {
            c.str = "string being converted.";
        }
        static void Add(int i)
        {
            i++;
        }
        static void AddWithRef(ref int i)
        {
            i++;
        }
        static void Main()
        {
            int i1 = 10;
            int i2 = 20;
            string str = "str";
            Class1 c = new Class1();
            Add(i1);
            AddWithRef(ref i2);
            Add(c.i);
            StringConvert(str);
            StringConvert(c);
            Console.WriteLine(i1);
            Console.WriteLine(i2);
            Console.WriteLine(c.i);
            Console.WriteLine(str);
            Console.WriteLine(c.str);
        }
    }

 

92. 以下代码运行结果是
 
    public abstract class A
    {
        public A()
        {
            Console.WriteLine('A');
        }
        public virtual void Fun()
        {
            Console.WriteLine("A.Fun()");
        }
    }
    public class B : A
    {
        public B()
        {
            Console.WriteLine('B');
        }
        public new void Fun()
        {
            Console.WriteLine("B.Fun()");
        }
        public static void Main()
        {
            A a = new B();
            a.Fun();
        }
    }

 

A     B     A.Fun()
原理和题90一样,不再赘述。
 
93. 以下代码执行结果是
 
    class Class1
    {
        public static int Count = 0;
        static Class1()
        {
            Count++;
        }
        public Class1()
        {
            Count++;
        }
       static void Main(string[] args)
        {
            Class1 o1 = new Class1(); 
            Class1 o2 = new Class1(); 

            Console.WriteLine(Count);
        }
    } 

 

3
 
94. 以下代码运行结果是
 
  class Program
    {
        public static void Main(string[] args)
        {
            int i = 2000;
            object o = i;
            i = 2001;
            int j = (int) o;
            Console.WriteLine("i={0},o={1}, j={2}", i, o, j);
        } 
    } 

 

i=2001,o=2000,j=2000
 
95. 用C#编程实现:从给定字符串 String="dhdkjhdhoiqlhdncugvygwjvbhxbhxj";中找出重复最多的字符
 
            Dictionary<char, int> charBucket = new Dictionary<char, int>();
            string str = "dhdkjhdhoiqlhdncugvygwjvbhxbhxj";
            foreach (char item in str)
            {
                if (charBucket.Keys.Contains(item))
                    charBucket[item]++;
                else
                    charBucket.Add(item, 1);
            }
            charBucket = charBucket.OrderBy(o => o.Value).ToDictionary(o=>o.Key,p=>p.Value);
            foreach (var item in charBucket)
                Console.WriteLine("Key:{0}-Value:{1}",item.Key,item.Value);

 

 
 
 
 
posted @ 2019-05-02 18:51  NCat  阅读(133)  评论(0)    收藏  举报