当前位置: 首页 > news >正文

CMB面试准备-基础

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

private : 在类的内部才可以访问。

protected : 保护成员,该类内部和继承类中可以访问。

public : 公共成员,完全公开,没有访问限制。

internal: 当前程序集内可以访问。

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

ado.net属于asp.net,是由asp.net编程语言编写的数据访问层的总括。

Connection:主要是开启程序数据库之间的连接。Close和Dispose的区别,Close以后还可以Open,Dispose以后则不能再用。

Command:主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及调用存在数据库中的存储过程等。

DataAdapter:主要是在数据源以及DataSet 之间执行数据传输的工作,它可以透过Command 对象下达命令后,并将取得的数据放入DataSet 对象中。

DataSet:这个对象可以视为一个暂存区(Cache),可以把从数据库中所查询到的数据保留起来,DataSet是放在内存中的。

      DataSet 的能力不只是可以储存多个Table 而已,还可以透过DataAdapter对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。         DataSet包含若干DataTable,DataTable包含若干DataRow。

参考文章:DataSet的使用

DataReader:当我们只需要循序的读取数据而不需要其它操作时,可以使用DataReader 对象。

       DataReader对象只是一次一笔向下循序的读取数据源中的数据,这些数据是存在数据库服务器中的,而不是一次性加载到程序的内存中的。

       只能(通过游标)读取当前行的数据,而且这些数据是只读的,并不允许作其它的操作。

总结:ADO.NET 使用Connection 对象来连接数据库,使用Command 或DataAdapter对象来执行SQL语句,并将执行的结果返回给DataReader 或 DataAdapter ,然后再使用取得的DataReader 或DataAdapter 对象操作数据结果。

DataSet和DataReader区别

DataReader在线操作数据, DataReader会一直占用SqlConnection连接,在其获得数据过程中其它操作不可以再使用SqlConnection连接对象。
DataSet离线操作数据,DataSet会将数据一次性读入内存,然后断开连接,这时其它操作就可以使用SqlConnection连接对象。
由于DataReader一次只读取一行数据,所以占用内存较小。但DataReader为只进且只读的,也就是只能单方向向前读取,如果你想回头去读取上一条数据是不允许的,并且不允许其修改数据。
由于DataSet一次性读取所有数据,所以比较消耗资源,但也提高了灵活性,在断开数据库连接情况下你可以对数据进行任何增删改查,按照任意的顺序读取数据,并可以将其写回到数据库。
有一点需要注意,DataReader一次读取一行并不意味了着这时在数据库中的数据被修改,可以读到新的数据,这是数据库层面的保护。

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

常用的较简单有QueryString,Session,Cookies,Application,Server.Transfer。个人一般使用session和querystring来传值。

参考文章:ASP.NET页面之间传递值的几种方式

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

 参考文章:C# 委托及各种写法

  委托是C#中实现事件的基础,事件是封装过的委托实例。

其实事件就是一个狭义的委托,也就是事件是一个用于事件驱动模型的专用委托。

你可以在客户代码中直接调用委托来激发委托指向的函数,而事件不可以,事件的触发只能由服务代码自己触发。

也就是说在你的代码里委托你不但可以安排谁是它的调用函数,还可以直接调用它。而事件不能直接调用,只能通过某些操作触发。除此之此,事件拥有委托的所有功能,包括多播特性。即事件可以有多个事件处理函数,委托同样也可以是个多播委托.

5、override与重载(overload)的区别

参考文章:面试宝典

6、属性和字段的区别是什么?

属性以灵活的方式实现了对私有字段的访问。

参考文章:  属性(Property)和字段(Field)的区别

 

7、类(class)与结构(struct)的异同?

Class属于引用类型,是分配在内存的堆上的,是引用传递的。

Struct属于值类型,是分配在内存的栈上的,是复制传递的。加分的回答:Int32、Boolean等都属于结构体。

不能为结构定义默认(无參数)构造函数。在结构体中可以声明字段,但是声明字段的时候是不能给初始值的。

我们不能为结构体定义析构函数。

a、字段和赋值

b、关于构造函数

我们在变量传值的时候,我就是希望传递对象的拷贝,而不是对象的引用地址,那么这个时候也可以使用结构了。

类                     结构
引用类型 值类型
一般需要封装有属性 一般公开字段无属性
有默认构造函数 隐式的无参数的构造函数在结构中无论如何都是存在的,所以程序员不能手动的为结构添加1个无参数的构造函数
无限制              在结构体的构造函数中,必须要为结构体的所有字段赋值
new时字段可以不完全初始化 必须完全初始化
必须new 可以不new
类中可以为字段赋值 结构中不可以
类值放在栈中 值放在堆中
可以被继承 不可以被继承

都可以写方法 都可以有构造函数 ...

参考文章:C# 结构体与类的区别

8、堆和栈的区别?

栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;局部值类型变量、值类型参数等都在栈内存中。

堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小。

参考文章:C#中堆和栈的区别分析

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节-第六节

9、GC是什么? 为什么要有GC? 

GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。

GC只能处理托管内存资源的释放,对于非托管资源则不能使用GC进行回收,必须由程序员手工回收。

一个例子就是FileStream或者SqlConnection需要程序员调用Dispose进行资源的回收。

要请求垃圾收集,可以调用下面的方法:GC.Collection()一般不需要手动调用GC.Collection()。

垃圾回收机制最好不要控制,一般GC会在最适合的时间进行垃圾回收,频繁调用GC.Collect()反而会造成不必要的资源耗费。

一般在编译的时候,编译器已经帮你添加了相应的FINALLY了,除非你很明确你使用的资源是否是非托管资源与该资源耗费的内存量。

一般涉及到数据流的,比如具有stream 特性的资源,最好都using()去控制。

10、abstract class和interface有什么区别?

相同点:

都不能被直接实例化,都可以通过继承实现其抽象方法。

不同点:

  • 接口支持多继承;抽象类不能实现多继承。
  • 接口只能定义行为;抽象类既可以定义行为,还可能提供实现。
  • 接口可以用于支持回调(CallBack);抽象类不能实现回调,因为继承不支持。
  • 接口只包含方法(Method)、属性(Property)、索引器(Index)、事件(Event)的签名,但不能定义字段和包含实现的方法;

     抽象类可以定义字段、属性、包含有实现的方法。接口就是约束,约束就是针对行为(方法),属性(get,set方法)。 

          接口是描述规则的,所以接口是不能实例化的,而字段是必须要分配内存实例化的。

  • 接口可以作用于值类型(Struct)和引用类型(Class);抽象类只能作用于引用类型。例如,Struct就可以实现接口,而不能继承类。

    实现和继承是两码事。只允许实现接口,却不可以继承,本身不矛盾。

    struct不能继承的一个原因是struct有固定的大小。

    struct作为一种值类型使用,继承类不是搞复杂了,违反 struct设计的初衷。

抽象类和接口

参考文章:虚方法

 

11、是否可以继承String类?

String类是sealed类故不可以继承。 Sealed类是指密封类。

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

会执行,在return前执行。

加分的补充回答(也助记):读取数据库中数据的条数的程序

public int QueryCount()

{

   …..

   try

   {

      return cmd.ExecuteScalar();

   }

   finally

   {

      cmd.Dispose();

   }

}

如果C#设计的是先执行cmd.Dispose()再执行return就会出现return执行失败了,因为cmd已经Dispose了。

finally中的代码一般都是释放资源,清除对象的,而return一般是用来返回数据的。

13、new 关键字用法

(1)new运算符:用于创建对象和调用构造函数。
(2)new修饰符:用于隐藏基类成员的继承成员。
(3)new约束:用于在泛型声明中约束可能用作类型参数的参数的类型。

参考文章:C#的new关键字的几种用法

14、C#集合中的Add与AddRange方法

15、C#中数组Array、ArrayList、泛型List<T>的比较

数组的容量是固定的,您只能一次获取或设置一个元素的值。而ArrayList或List<T>的容量可根据需要自动扩充、修改、删除或插入数据。

在决定使用 List<T> 还是使用ArrayList 类(两者具有类似的功能)时,记住List<T> 类在大多数情况下执行得更好并且是类型安全的。

数组的大小在初始化时就已经决定无法改变,Arraylist是可以增加和减少,使用更灵活,操作更简单,但效率会低一些。

如果能够确定要存放的类型和个数的话建议使用数组,否则使用Arraylist。

以下是把Array数组中的值拷贝到ArrayList中去的实例用法

    int[] a ={ 222, 333, 555 };
            ArrayList arrList = new ArrayList();
            foreach (object obj in a)//或foreach (int obj in a)
            {
                arrList.Add(obj);
                Response.Write(obj+"<br>");
            }

 

16、什么是反射?

反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类、结构、委托、接口和枚举等)的成员和成员的信息。

参考文章:详解C#中的反射

 

17、string str = null 与 string str =""说明其中的区别。

string str = null 不分配内存空间,而string str = \"\" 给它分配长度为空字符串的内存空间。 

string str = null没有string对象,string str = “”有一个字符串对象。

18、接口是一种引用类型,在接口中可以声明(   a),但不可以声明公有的域或私有的成员变量。   

接口可以包含事件、索引器、方法和属性,不包括字段

  a) 方法、属性、索引器和事件;  

  b)方法、属性信息、属性;
  c) 索引器和字段;     
  d) 事件和字段;  

19. 在ADO.NET中,对于Command对象的ExecuteNonQuery()方法和ExecuteReader()方法,下面叙述错误的是(c)。   
  a) insert、update、delete等操作的Sql语句主要用ExecuteNonQuery()方法来执行;   
  b) ExecuteNonQuery()方法返回执行Sql语句所影响的行数。   
  c) Select操作的Sql语句只能由ExecuteReader()方法来执行;   
  d) ExecuteReader()方法返回一个DataReder对象; 

20. 下列关于C#中索引器理解正确的是(c   )   
  a) 索引器的参数必须是两个或两个以上   
  b) 索引器的参数类型必须是整数型   
  c) 索引器没有名字   
  d) 以上皆非 

参考文章:C#语法小知识(六)属性与索引器

21、以下的C#代码,试图用来定义一个接口:   
  public   interface   IFile   
  {   
              int   A;   
              int   delFile()   
              {   
                      A   =   3;   
              }   
              void   disFile();   
  }   
  关于以上的代码,以下描述错误的是(d   )。   
  a) 以上的代码中存在的错误包括:不能在接口中定义变量,所以int   A代码行将出现错误;   
  b) 以上的代码中存在的错误包括:接口方法delFile是不允许实现的,所以不能编写具体的实现函数;   
  c) 代码void   disFile();声明无错误,接口可以没有返回值;   
  d) 代码void   disFile();应该编写为void   disFile(){};  

22、asp.net中的页面重定向详解

Server.Transfer仅是服务器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;

Response.Redirect则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。

Server.Transfer是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 这个过程中浏览器和Web服务器之间经过了一次交互。

Response.Redirect就是服务端根据逻辑发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求。这个过程中浏览器和Web服务器之间经过了两次交互。

23、StringBuilder 和 String 的区别?

答:String 在进行运算时(如赋值、拼接等)会产生一个新的实例,而 StringBuilder 则不会。所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder,不要使用 String

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

StringBuilder

24、什么是viewstate,能否禁用?是否所用控件都可以禁用?

Viewstate是保存状态的一种机制,EnableViewState属性设置为false即可禁用。最有力的举例子:Label、TextBox在禁用ViewState后不同的表现来说明。

参考文章:View State的作用和实现方式

ASP.Net中的四种状态保持机制

25. 不定项选择:

(1) 以下叙述正确的是: B C

A. 接口中可以有虚方法。B. 一个类可以实现多个接口。 C. 接口不能被实例化。 D. 接口中可以包含已实现的方法。

(2) 从数据库读取记录,你可能用到的方法有:B C D

A. ExecuteNonQuery        B. ExecuteScalar      C. Fill    D. ExecuteReader

(3)对于一个实现了IDisposable接口的类,以下哪些项可以执行与释放或重置非托管资源相关的应用程序定义的任务?(多选)   (        ABC         )  

A.Close B.Dispose C.Finalize  D.using E.Quit  

(4)以下关于ref和out的描述哪些项是正确的?(多选)   (    ACD   )  

A.使用ref参数,传递到ref参数的参数必须最先初始化。  

B.使用out参数,传递到out参数的参数必须最先初始化。  

C.使用ref参数,必须将参数作为ref参数显式传递到方法。  

D.使用out参数,必须将参数作为out参数显式传递到方法。

26. 单项选择:

(1)下列选项中,(C)是引用类型。

a)enum类型   b)struct类型 c)string类型   d)int类型

(2)关于ASP.NET中的代码隐藏文件的描述正确的是(C)

a)Web窗体页的程序的逻辑由代码组成,这些代码的创建用于与窗体交互。编程逻辑唯一与用户界面不同的文件中。

    该文件称作为“代码隐藏”文件,如果用C#创建,该文件将具有“.ascx.cs”扩展名。

b)项目中所有Web窗体页的代码隐藏文件都被编译成.EXE文件。

c)项目中所有的Web窗体页的代码隐藏文件都被编译成项目动态链接库(.dll)文件。

d)以上都不正确。

(3)下列描述错误的是(D)

a)类不可以多重继承而接口可以;

b)抽象类自身可以定义成员而接口不可以;

c)抽象类和接口都不能被实例化;

d)一个类可以有多个基类和多个基接口;

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

用URL编码,通过QueryString传递,用urlencode编码 用urldecode解码

参考文章:C# asp.net页面通过URL参数传值中文乱码问题解决办法

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

        static void Main(string[] args)

        {

            Console.WriteLine(Calc());

            Console.ReadKey();

        }

        static int Calc()

        {

            int i = 0;

            try

            {

                return i;

            }

            finally

            {

                Console.WriteLine("finally");

                i++;

            }

        }

答案:

finally

0

29、C#之循环语句

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

    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

 

转载于:https://www.cnblogs.com/chrisghb8812/p/9242898.html

相关文章:

  • 添加到web.config文件里的用户自定义翻页控件
  • [置顶] Web开发工具
  • php实现 称砝码(背包)
  • Debian samba支持域用户登录
  • Centos7命令行下安装和配置Apache服务器
  • linux命令截取文件最后n行(所有命令)
  • python-模块与包
  • Java进阶02 异常处理
  • Kerberos+LDAP+NFSv4 实现单点登录
  • mysql 常用函数
  • SystemCenter2012SP1实践(5)SCVMM管理HyperV
  • 王永庆:技术创新改变教育未来
  • 文摘《十一》
  • 简单理解OAuth 2.0
  • iOS疑问
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • [译]前端离线指南(上)
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • ES6 ...操作符
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • JavaScript 奇技淫巧
  • Java超时控制的实现
  • Java到底能干嘛?
  • Java的Interrupt与线程中断
  • Java深入 - 深入理解Java集合
  • JS函数式编程 数组部分风格 ES6版
  • Objective-C 中关联引用的概念
  • Promise面试题2实现异步串行执行
  • springMvc学习笔记(2)
  • Yeoman_Bower_Grunt
  • 二维平面内的碰撞检测【一】
  • 前端技术周刊 2019-02-11 Serverless
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 通信类
  • 项目管理碎碎念系列之一:干系人管理
  • ​iOS安全加固方法及实现
  • #100天计划# 2013年9月29日
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (1)STL算法之遍历容器
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (BFS)hdoj2377-Bus Pass
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (C++17) optional的使用
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (六)软件测试分工
  • .NET Core 版本不支持的问题
  • .net core 连接数据库,通过数据库生成Modell
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .net core 依赖注入的基本用发
  • .Net Core缓存组件(MemoryCache)源码解析