.net面试题

标题一:C#基础

需要了解的C#基础有:

1,值类型和引用类型的区别?

答:1,一般情况下,值类型的数据是存储在线程栈上的,引用类型的数据是存储在托管堆上。

      , 2.值类型的变量,变量本身存储的就是实际数据,引用类型的变量,变量本身存储的仅仅是实际数据的引用地址,而实际的数据存储在托管堆上

2,抽象类和接口的区别?

答:相同点: 1,不能被直接实例化,2可以包含任意个抽象成员

       不同点:  1,抽象类也是类,具有类的共同特点:单基类继承,多接口实现

                            接口: 接口不是类只能继承多个接口

                        2:抽象类中可以包含已经实现的非抽象成员,而接口中所有的成员都是抽象的,没有实现的。

3,面向对象的三大特征?

        封装,继承,多态

4,接口包含那些成员?

       方法,属性,事件,索引器

5,C#中那些是值类型?那些是引用类型?

   值类型:结构,枚举

   引用类型: 类,接口,委托,数组,字符串

6,重写和重载的区别?

    重写:子类对于基类中的虚成员,虚方法或者抽象成员抽象方法进行覆盖,重新实现

    重载:同一个类中,同名的方法具有不用的参数签名的实现(重载的必要条件是,参数类型或者参数名不同都可以进行重载)

7,string s="" 和 string s=null的区别?

      1,string  s=" "; 字符串变量s指向空字符串,表示给变量s分配类内存空间,只不过s指向了一个长度为零的空字符串对象。

       2 string s=null ;字符串变量s指向了空引用null,表示s没有引用任何对象,既没有给变量分配内存空间。

8,C#中参数传值有哪些?区别是什么?

       1,ref 参数传值,在传入方法之前必须进行初始化,而 out 参数在传人方法之前可以不用初始化

        2,ref 参数方法内部可以直接使用,而 out 参数在方法内部不能直接使用

       3,ref 参数方法内部可以使用也不可不使用,而out参数在方法返回之前必须对其赋值

9,什么是委托?事件和委托是有什么关系?

        1 委托:表示具有一类相同签名的方法的封装类性

        2事件也一种委托

10,ADO.NET 中使用那些对象?链接数据苦的步骤是什么?

       SqlConnection:链接对象,用于执行与数据库的链接。

       SqlCommand:命令对象,用于对数据库执行sql语句。

       SqlDataAdapter:适配器对象,用于填充数据和更新数据库

       SqlParameter:参数对象,用于执行参数化sql语句

      SqlDataReader:读取器对象,用于从数据库中快速逐行读取数据

      SqlTransaction:事物对象,用于执行数据库事务

11,装箱和拆箱的区别

       装箱:将值类型转换为 object 类型或由此值类型实现的任何接口类型

               如:   int a=123

                          object obj=(object)a;

       拆箱:将 object 类型  或接口转换成实际的值类型

               如: object    obj=“231423”;

                   int  a=(int)obj;

    拆箱运行速度快,因为拆箱后变成值类型,值类型运行速度快

12 C#中的访问修饰符号有哪些?

   public:公共的,任何位置都可以访问

   private:私有的,只有类的自身可以访问

   protected:受保护的,只有类的自身及其派生类才可以访问

   internal:内部的,同一个程序集里面的任何位置都可以访问

  protected internal:内部受保护的,同一个程序里面任何位置或者不同程序集中的派生类可以访问

13、String s = new String("xyz");创建了几个String Object?
    两个对象,一个是“xyx”,一个是指向“xyx”的引用对象. 

14、如何把一个Array复制到ArrayList里(*) 
       实现1: string[] s ={ "111", "22222" }; 
         ArrayList list = new ArrayList(); list.AddRange(s);

       实现2: string[] s ={ "111", "22222" }; 
           ArrayList list = new ArrayList(s); 

15、StringBuilder 和 String 的区别?
  

  答:String 在进行运算时(如赋值、拼接等)会产生一个新的实例,而 StringBuilder 则不会.
       所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder,  不要使用 String,
        如果要操作一个不断增长的字符串,尽量不用String类,改用StringBuilder类.
        两个类的工作原理不同:String类是一种传统的修改字符串的方式,
        它确实可以完成把一个字符串添加到另一个字符串上的工作没错,但是在.NET框架下,
        这个操作实在是划不来。因为系统先是把两个字符串写入内存,
        接着删除原来的String对象,然后创建一个String对象,
        并读取内存中的数据赋给该对象,这一来二去的,耗了不少时间.
        而使用System.Text命名空间下面的StringBuilder类就不是这样了,
        它提供的Append方法,能够在已有对象的原地进行字符串的修改,简单而且直接
        当然,一般情况下觉察不到这二者效率的差异,
        但如果你要对某个字符串进行大量的添加操作,

        那么StringBuilder类所耗费的时间和String类简直不是一个数量级的.

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

        答:会执行,在return前执行。

17      ==和Equals的区别

        答:1.  ==是一个运算符。Equals则是string对象的方法可以(点)出来。

               2.  基本数据类型比较: ==和Equals都比较俩个值是否相等,相等为true,否则为false

               3.  引用对象比较:==和Equals都是比较栈内存中的地址是否相等,相等为true否则为false

标题二sql面试基础

1,写一条sql语句:取出表A中的第31条到40条记录(sql server ,以自动增长的id作为主键,注意:ID可能不是连续的)

  方法1:select  top 10 *  from  where  id not in (  select top 30 id from A order by id  ) order by id

              注:用子查询先取出前30条记录,再用 not in (不存在)该30条记录中的10条就是31-40条的记录

  方法2:select top 10 * from A where id>(

                                              select max(id) from (

                                                                         select top 30 id from A order by id

                                                                               ) t

                                                     )

              注:这是用了一个多子查询写法:子查询是有优先级的,越后面的括号()查询越先执行,先查询前30条的id,再查                         询这30条中的最大的一个id,再查询10条比这30条中最大的一个id值还要大的10条数据

   方法3:select * from (

                                       select *,row_number() over (order by id ) Row_No from A

                                      ) t where Row_No between 31 and 40 

            注:先计算出id再赋值给 Row_No  在使用 between (介于俩者之间的数)获取那10条记录

2 请说出 sql server 中三种表达式方式 inner join,left join ,right join 的区别及时最终查询的结果的影响。

    inner join:内联查询,查询出满足的on条件的俩个表达式公共交集

    left join:左外联查询,以左边的表为基准与右边的表进行关联,链接查询满足on条件的结果,但左表的数据会完全保留,其                      中右表无法满足on条件的数据在连接的结果中用null与表数据补齐

    right join :右外联查询,以右边的表为基准与左边的表进行关联,链接查询出满足on条件的结果,但右表的数据会完全保                            留,其中左表中无法满足on条件的数据会在链接的结果中用null与右表数据补齐

3 数据库索引是什么?有什么作用?

    数据库索引:是数据库中一列或者多列的值进行排序的一种结构,

             作用:索引类似于一本书的目录,主要用于加快从表中查询的速度 

4  如何处理几十万条并发数据?

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

5使用存储过程来插入

      创建存储过程:

      Create proc InsertMyBBSProc(@Title char(160), @Author char(20), @Content ntext)

       AS

       Insert into myBBS(Title,Author,Content) Values(@Title, @Author, @Content) 


标题三 前端面试基础

1   post、get的请求区别
          get的参数会显示在浏览器地址栏中,而post的参数不会显示在浏览器地址栏中,
          使用post提交的页面在点击【刷新】按钮的时候浏览器一般会提示“是否重新提交”,
          而get则不会,用get的页面可以被搜索引擎抓取,而用post的则不可以,
          用post可以提交的数据量非常大,而用get可以提交的数据量则非常小(2k),
          受限于网页地址的长度,

          用post可以进行文件的提交,而用get则不可以. 

2 ajax同步异步的请求区别?

 同步请求:如果有俩个ajax,第二个需要第一个ajax的值得话,那么再同步请求的时候这俩个ajax会同时发出请求,这样以                    来第二个ajax需要的那个参数的值就是null了那就会报错(同步请求是页面中所有请求一同发起服务到浏览器中请求)

异步请求:页面中的所有请求都会一个一个来请求就像排队一样,一个一个执行所需要的那些方法,在用户注册页面验证的时候                  就需要异步请求,比如第一个用户名验证错误他不会影响后面的输入,这样用户体验效果好。而用同步请求的话,第                一个验证失误后面的也不能再输入了,用户体验性差

3 asp.net中页面之间传递值得几种方式?

   1.使用QueryString, 如....?id=1; response. Redirect()....
   2.使用Session变量
   3.使用Server.Transfer
   4.Cookie传值
   5.Application传值 需要注意些什么?
   6.PreviosPage 

4 asp.net中调用webserver的方法有哪些?

   答:     通过HTTP—GET请求调用

              通过HTTP—POST请求调用

              通过SOAP请求调用

5 session与cookie的区别?

cookie是存在浏览器中,session是存在服务器中,session安全性更高只不过在客户量多的同时session占用的session的内存空间会很大影响浏览器访问速度

6 asp.net缓存有几种实现方式?

  答:     页面输出缓存,页面局部缓存,数据缓存,客户端缓存

标题四 算法

1 一列数的规则如下: 112358132134......  求第30位数是多少, 用递归算法实现。

答:public class MainClass

    {

        public static void Main()   

        {

            Console.WriteLine(Foo(30));

        }

        public static int Foo(int i)

        {

            if (i <= 0)

                return 0;

            else if(i > 0 && i <= 2)

                return 1;

            else return Foo(i -1) + Foo(i - 2);

        }

    }      

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

答: int [] array = new int [*] ;

        int temp = 0 ;

        for (int i = 0 ; i < array.Length - 1 ; i++)

         {

                      for (int j = i + 1 ; j < array.Length ; j++)

                            {

                                        if (array[j] < array[i])

                                        {

                                                temp = array[i] ;

                                                array[i] = array[j] ;

                                                 array[j] = temp ;

                                              }

                                      }

            }

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

答:

        int Num = this.TextBox1.Text.ToString() ;

        int Sum = 0 ;

        for (int i = 0 ; i < Num + 1 ; i++)  {

                    if((i%2) == 1)  {

                                Sum += i ;

                         }

                        else{

                            Sum = Sum  - I ;

                              }

           }

             System.Console.WriteLine(Sum.ToString());

              System.Console.ReadLine() ;

4 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。

     int[] intArr=new int[100];

    ArrayList myList=new ArrayList();

    Random rnd=new Random();

    while(myList.Count<100)

   {

            int num=rnd.Next(1,101);

             if(!myList.Contains(num))

             myList.Add(num);

   }

            for(int i=0;i<100;i++)

             intArr[i]=(int)myList[i]; 

5 请编程遍历页面上所有TextBox控件并给他赋值给hello

        protected void show(object sender,EventArgs e){

         foreach( Control c in this.From.Controls){

                   if( c is TextBox) {

                            TextBox text=c as TextBox;

                             txt.Text="Hello"

                     }

        }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值