c#面试题

    xiaoxiao2021-12-14  26

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

       Private:私有成员,在线的内部成员才可以访问。

       Protected:受保护成员,该类内部,派生类和继承类中才可以访问。

    Public:类型成员的访问修饰符,公共成员,完全公开,没有访问限制。

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

    2、ADO.NET中的五个主要对象

    Connection:连接对象。

    Command:命令对象,指示要执行的命令和存储过程。

    Datareader:是一个向前的只读的数据流。

    Dataadapter:是功能强大的适配器,支持增删改查的功能。

    Dataset:是一个数据级对象,相当与内存中的一张表或多张表。

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

    1. 使用QueryString变量     QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。但是对于传递数组或对象的话,就不能用这个方法了。下面是一个例子: a.aspx的C#代码 private void Button1_Click(object sender, System.EventArgs e) {  string s_url;  s_url = "b.aspx?name=" + Label1.Text;  Response.Redirect(s_url); } b.aspx中C#代码 private void Page_Load(object sender, EventArgs e) {  Label2.Text = Request.QueryString["name"]; }   2. 使用Application 对象变量     Application对象的作用范围是整个全局,也就是说对所有用户都有效。其常用的方法用Lock和UnLock。 a.aspx的C#代码 private void Button1_Click(object sender, System.EventArgs e) {  Application["name"] = Label1.Text;  Server.Transfer("b.aspx"); } b.aspx中C#代码 private void Page_Load(object sender, EventArgs e) {  string name;  Application.Lock();  name = Application["name"].ToString();  Application.UnLock(); }   3. 使用Session变量     想必这个肯定是大家使用中最常见的用法了,其操作与Application类似,作用于用户个人,所以,过量的存储会导致服务器内存资源的耗尽。 a.aspx的C#代码 private void Button1_Click(object sender, System.EventArgs e) {  Session["name"] = Label.Text; } b.aspx中C#代码 private void Page_Load(object sender, EventArgs e) {  string name;  name = Session["name"].ToString(); }   4. 使用Cookie对象变量     这个也是大家常使用的方法,与Session一样,其是什对每一个用户而言的,但是有个本质的区别,即Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用。 a.aspx的C#代码 private void Button1_Click(object sender, System.EventArgs e) {  HttpCookie cookie_name = new HttpCookie("name");  cookie_name.Value = Label1.Text;  Reponse.AppendCookie(cookie_name);  Server.Transfer("b.aspx"); } b.aspx中C#代码 private void Page_Load(object sender, EventArgs e) {  string name;  name = Request.Cookie["name"].Value.ToString(); }   5. 使用Server.Transfer方法     这个才可以说是面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。 a.aspx的C#代码 public string Name {  get{ return Label1.Text;} } private void Button1_Click(object sender, System.EventArgs e) {  Server.Transfer("b.aspx"); } b.aspx中C#代码 private void Page_Load(object sender, EventArgs e) {  a newWeb; //实例a窗体  newWeb = (source)Context.Handler;  string name;  name = newWeb.Name; }

    3、new有几种用法

      new:运算符,用于创建对象和调用构造函数

      new:修饰符,用于基类成员隐藏继承成员

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

    4、sealed修饰的类有什么特点

       Sealed:C#de 修饰符,当对一个类应用Sealed修饰符时,此修饰符会组织其他类从该类继承

     

    5、请编程遍历页面上所有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 ; } }

     

    7、.net中,配件的意思是?

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

    8、装箱和拆箱

    值类型和引用类型的转换。

    9、如何理解三层架构

    就是表现层、逻辑层、数据访问层

    10. 能用foreach遍历访问的对象的要求

    需要实现Iterable接口或声明iterable()方法

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

    垃圾回收器由于内存是有限的所以当程序不再需要使用某个变量的时候,就需要销毁该对象并释放其所占用的内存资源

    12. 介绍几个开源的项目

    微信公众平台 PHP SDK

    Wechat-php-SDK

    13. 说出五个集合类

    关联性泛型集合类

    非关联性泛型集合类

    推荐使用集合类

    非泛型集合类

    线程安全集和类

    14. 什么是code-Behind技术。

     代码隐藏

    15sing关键字有什么用?什么是IDisposable

    Sing 变量     IDisposable 接口 释放非托管资源

    2016920

    16、不是说字符串是不可变的吗?string s="abc";s="123"不就是变了吗?

    没有S不指向原来那个对象了,而指向了另一个 String对象,内容为"123",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了

    17、是否可以从一个static方法内部发出对非static方法的调用? 

    不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用

    18、说出一些常用的类、接口,请各举5个 

    Bool类String 类Guid类Eval类DateTime类

    IComparable,IDisposableIAppDomainSetupICloneableIFormattable

    2016921

    19、传入某个属性的set方法的隐含参数的名称是什么?

      Value 它的类型和属所声明的类型形同

     

    20、C#支持多重继承么?

      不支持  可以用接口来继承

    21、C#中所有对象共同的基类是什么?

       System.Object

    22、通过超链接怎样传递中文参数?

    Server.UrlEncode()

    23、AJAX解决什么问题?如何使用AJAXAJAX有什么问题需要注意?项目中哪里用到了AJAX

    AJAX:无刷新更新页面 不会导致页面重新提交、刷

    定义一个异步对象  XMLHTTP 创建类实例

    编码问题 清除服务器端文件的缓存  什么时候使用XML 安全问题

    作用就是在不刷新整个页面的情况下,动态刷新一部分页面内容。这样使得用户交互更良好。比如说,点击一个按钮,就展开一个列表,其他页面内容不变。这就是ajax可以做到的功能之一。

    24、开放式问题:你经常访问的技术类的网站是什么?

     

    25、你对.netGC的理解

     

    GC.NET的垃圾收集器,可以进行内存资源的回收,当一个对象没有任何引用的时候就可以被回收了

     

    26、请你简单的说明数据库建立索引的优缺点

     

    优点:提高系统的性能,数据的唯一性。加快数据的检索速度。加速表与表之间的连接

    缺点:耗费时间,随着数据量的增加而增加。占物理空间。对表中的数据进行增加丶删除和修改的时候,索引也要动态的维护。这样就降低了数据的维护速度。

     

    27、Session有什么重大BUG,微软提出了什么方法加以解决?(常考)

     

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

    28、说说在软件设计中你遇到的以空间换时间的例子?

     

    void swap(int a, int b) { int c; c=a; a=b;b=a; } //--->空优  void swap(int a, int b) { a=a+b;b=a-b;a=a-b;  }

     

    29、asp.net中的错误机制。(常考)

    1.Page_Error事件 2.ErrorPage属性  3.Application_Error事件   4.Application_Error事件

     

    30、有一个10个数的数组,计算其中不重复数字的个数。{3,5,9,8,10,5,3}

    31、下面是一个由*号组成的4行倒三角形图案。要求:1、输入倒三角形的行数,行数的取值3-21之间,对于非法的行数,要求抛出提示非法行数!2、在屏幕上打印这个指定了行数的倒三角形。

    *******

    *****

    ***

    *

    console.writeline("     *******       "); console.writeline("      *****       "); console.writeline("      ***       ");

    console.writeline("      *       ");

     

     

    32、下面的程序执行结果是什么?

    class Person

        {

            public int Age { get; set; }

    }

     

                int i1 = 20;

                int i2 = i1;

                i1++;

                Console.WriteLine(i2);

     

                Person p1 = new Person();

                p1.Age = 20;

                Person p2 = p1;

                p1.Age++;

                Console.WriteLine(p2.Age);

    答:20,21

     

    33、下面程序的执行结果是什么?

    public struct Point

        {

            public int x;

            public int y;

            public Point(int x, int y)

            {

                this.x = x;

                this.y = y;

            }

        }

                Point p1 = new Point(100, 100);

                Point p2 = p1;

                p1.x = 200;

                Console.WriteLine("{0},{1}", p1.x, p2.x);

    答:200,100    解答:结构体是复制传递的

     

    34、不用JQuery等框架实现AJAX无刷新登录。(常考)

    <html>

    <body>

     

    <script type="text/javascript">

     

    function ajaxFunction()

     {

     var xmlHttp;

     

     try

        {

       // Firefox, Opera 8.0+, Safari

        xmlHttp=new XMLHttpRequest();

        }

     catch (e)

        {

     

      // Internet Explorer

       try

          {

          xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");

          }

       catch (e)

          {

     

          try

             {

             xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");

             }

          catch (e)

             {

             alert("您的浏览器不支持AJAX!");

             return false;

             }

          }

        }

        xmlHttp.onreadystatechange=function()

          {

          if(xmlHttp.readyState==4)

            {

             document.myForm.time.value=xmlHttp.responseText;

            }

          }

        xmlHttp.open("GET","time.asp",true);

        xmlHttp.send(null);

     }

    </script>

     

    <form name="myForm">

    用户: <input type="text" name="username" οnkeyup="ajaxFunction();" />

    时间: <input type="text" name="time" />

    </form>

     

    </body>

    </html>

     

    35、Http状态码各是什么意思。

    200 服务器已成功处理了请求并提供了请求的网页。

    204 服务器成功处理了请求,但没有返回任何内容

    301请求的网页已永久移动到新位置。当URLs发生变化时,使用301代码。搜索引擎索引中保存新的URL。

    302请求的网页临时移动到新位置。搜索引擎索引中保存原来的URL

    304如果网页自请求者上次请求后没有更新,则用304代码告诉搜索引擎机器人,可节省带宽和开销。

    400服务器不理解请求的语法。

    403服务器拒绝请求

    404服务器找不到请求的网页。服务器上不存在的网页经常会返回此代码。

    410请求的资源永久删除后,服务器返回此响应。该代码与 404(未找到)代码相似,但在资源以前存在而现在不存在的情况下,有时用来替代404 代码。如果资源已永久删除,应当使用 301 指定资源的新位置。

    500服务器遇到错误,无法完成请求。

    503服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。                                                                                   希望能够帮到你。

    36、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的代码会不会被执行,什么时候被执行?

    结论:try{}中的return执行后在没有返回数据时先去执行finally{}中的代码,然后再返回。所以说finally{}在return中间执行。

     

     

    37、一个数组:1,1,2,3,5,8,13,21...+m,求第30位数是多少?用递归实现;(常考!!!,提示:搜索斐波那契数列)

     public static int a = 1;         public static int b = 1;         public static int c = 0;         public static int i = 1;         private static int get(int p)         {             if (p == 0 || p==1)             {                 return 1;             }             if(i==p)             {                 return b ;             }             i++;             c = a + b;             a = b;             b = c;             return get(p);         }

    38、产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。(要求使用两种方法)

      1.

    List<int> lst = new List<int>();

               Random r = new Random();

               while (true)

              {

                    int temp = r.Next(1, 101);

                     if (lst.Count == 100)

                    {

                       break;

                     }

                     if (!lst.Contains(temp))

                     {

                        lst.Add(temp);

                     }

                 }

                 for (int i = 0; i < lst.Count; i++)

                 {

                     Console.WriteLine(lst[i]);

                 }

                Console.Read();

     

    39、冒泡排序数组(背也要背下来,50%必考!)

    function sort (arr) {

    for (var i = 0;i<arr.length;i++) {

    for (var j = 0; j < arr.length-i-1; j++) {

    if (arr[j]<arr[j+1]) {

    var temp=arr[j];

    arr[j]=arr[j+1];

    arr[j+1]=temp;

    }

    }

    }

    return arr;

    }

    var arr=[2,5,3,1,7,8,78,89];

    sort(arr);

     

    40、C#中的委托是什么?事件是不是一种委托?事件和委托的关系。

    委托可以把一个方法作为参数代入另一个方法。事件可以理解为指向一个函数的引用。事件是比较特殊的委托,是委托的一种。事件的定义返回值Void,而委托可以是任意类型的返回值,委托是方法的封装,事件是委托的封装。

    转载请注明原文地址: https://ju.6miu.com/read-968952.html

    最新回复(0)