码迷,mamicode.com
首页 > Web开发 > 详细

.net面试-常见问题归纳整理

时间:2019-12-19 09:16:12      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:重复数   有符号   线程   封装   union   传递值   参数   构造函数   let   

第一部分:C#语言

1.类和结构的区别

1)类是引用类型,结构是值类型
2)类可以继承,结构不能继承,两者都能实现接口
3)类可以有显示的无参构造函数,结构则不能
4)类可以有析构函数,结构则不能
5)结构中不能有实例字段初始值设定,类无限制
6)类的构造函数里可以不用对所有字段进行初始化,结构必须要对所有字段进行初始化

2.C#中类成员访问修饰符有哪些

public:公有的,任何位置都可以访问
private:私有的,只有类的内部才能访问
protected:受保护的,只有类的内部或派生类中可以访问
internal:内部的,同一个程序集(命名空间)里面可以访问
protected internal:内部受保护的,同一个程序集里面或不同程序集派生类中可以访问

3.面向对象三大特征是什么

封装、继承、多态

4.抽象类和接口的区别

相同点:
1)不能被实例化
2)可以包含任意个抽象成员
不同点:
1)抽象类是类,具有类的特点:单基类继承,多接口实现;接口不是类,只能继承多个接口
2)抽象类中可以包含已经实现的非抽象成员;接口中所有成员都是抽象的,没有实现的

5.接口可以包含哪些成员

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

6.什么是装箱和拆箱

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

7.C#中,哪些类型是值类型,哪些类型是引用类型

值类型:结构、枚举
引用类型:类、接口、委托、数组、字符串

8.值类型和引用类型的区别

1)值类型一般存储在线程栈上,引用类型存储在托管堆上
2)值类型的变量本身实际存储的是实际数据,引用类型的变量本身实际存储的是引用地址,实际的数据存储在托管堆上
3)在作为方法参数传递时,值类型传递的是值的副本在方法中对其修改不会影响原始值。引用类型参数传递的是引用地址,在方法中对该参数进行修改会对托管堆上该地址实际数据进行修改,从而会影响原始值

9.C#中的基本数据类型有哪些

值类型:
1)有符号整数(由小到大):sbyte、short、int、long
2)无符号整数(由小到大):byte、ushort、uint、ulong
3)浮点型:float、double、decimal
4)布尔型:bool
5)字符型:char

引用类型:
1)string、object

10.重写和重载的区别

重写:子类对基类中的虚成员(虚方法、虚属性等)或抽象成员(抽象方法、抽象属性等)进行覆盖重新实现
重载:同一个类中,同名方法具有不同的参数签名(参数个数、参数的数据类型、参数是否具有ref、out、params修饰)的实现

11.构造函数是否可以被继承?是否可以被重写?

不能被继承也不能被重写,但是在创建类的实例时会首先调用其基类的无惨构造函数

12.C#中,运算符"?"和"??"的区别是什么

1)?:称为三目运算符,运算格式如下:
condition?first_expression:second_expression;
如果条件condition为true,则计算第一表达式first_expression返回计算结果;如果是false,则计算第二表达式second_expression返回计算结果
2)??称为null合并运算符,用于定义可以为null值的类型和引用类型的默认值。如果运算符左边不为null,则返回运算符左边的值;如果此运算符左边为null,则返回右边的值

13.C#中,用const和readonly修饰符的字段有什么区别

1)const:表示常量,其修饰是在编译期间确定的,因此在声明的时候只能通过常量表达式指定其值
2)readonly:表示只读字段,其修饰是在运行时计算的,在对象的实例构造函数或类的静态构造函数首次被调用时计算,之后字段的值不能被更改

14.string s=""和string s = null的区别

1)string s=""变量s指向了空字符串,给变量分配了空间,只不过s指向了一个长度为0的空字符串对象
2)string s = null 变量s指向了空引用null,表示s没有引用任何对象,即没有给变量s分配内存空间

15.C#中,new有几种用法

1)用于创建对象和调用构造函数
2)创建匿名类实例
3)在用作修饰符时,new关键字可以显示隐藏从父类继承的成员

16.C#中,ref和out的区别

1)ref修饰参数时传入方法前必须初始化;out可以不用
2)ref参数在方法内部可以直接使用;out不可以
3)ref参数在方法内部可以使用也可以不适用;out在方法返回前必须对其赋值

17.C#中,using有几种用法

1)导入和引用命名空间
2)给类型起别名
3)使用using声明的对象,可以确保在using代码块结束时,该对象所使用的资源被自动释放

18.C#中,&和&&,|和||有什么区别

1)&表示按位与运算,&&表示逻辑与,表示对两个布尔类型进行逻辑与操作,两边都为true才返回true
2)|表示按位或运算,||表示逻辑或,表示对两个布尔类型进行逻辑或操作,两边条件一个位true就返回true

19.C#中,is和as的区别

is用于检查对线是否与给定的类型兼容;as用于对引用类型的变量进行类型转换

20.什么是GC,为什么要用到GC

GC是垃圾收集器,计算机程序运行过程中需要使用到内存,需要向操作系统申请内存空间,由于内存空间是有限的所以使用完程序需要释放内存。
垃圾收集器就是一种自动进行内存管理的机制,使得程序员不用手动去分配内存和释放内存,由垃圾收集器全权负责内存管理工作,提高了程序的安全性、稳定性、开发效率

21.什么是委托?事件跟委托是什么关系?

委托是一个类,它定义了方法的类型,使得方法可以当做另一个方法的参数来传递
事件也是一种委托

22.ADO.NET中访问数据库的基本步骤是什么

创建数据库连接对象
打开连接
创建命令对象,执行SQL语句
关闭连接

23.ADO.NET中,DataSet和DataReader的区别是什么

1)DataSet数据集,表示内存中的数据库,DataSet在读取数据时会与数据库连接,一次性的读取所有的表数据到内存中,然后便断开连接
2)DataReader数据读取器,在读取数据时是一行行读取,每次只会读取一行,直到读到最后一行,才断开数据库连接。在整个读取过程中,数据库要保持连接状态

24.ADO.NET中常用的对象有哪些

SqlConnection:连接对象,用于执行数据库连接
SqlCommand:命令对象,用于执行SQL语句
SqlDataAdapter:适配器对象,用于填充数据集和更新数据库
SqlParameter:参数对象,用于执行参数化SQL语句
SqlDataReader:读取器对象,用于从数据库中快速逐行读取数据
SqlTransaction:事务对象,用于执行数据库事务

第二部分:ASP.NET

1.ASP.NET中的身份验证有哪些

1)windows身份验证:ASP.NET会结合internet信息服务(IIS),为每个用户开启windows账户,通过windows账户验证用户安全
2)Forms验证:ASP.NET通过web表单,为每一个用户创建用cookie保存的身份验证
3)Passport验证:由Microsoft提供集中身份验证服务,通过将每个用户信息提供交给Passport登录服务网站进行用户身份验证

2.Server.Transfer与Response.Redirect有什么区别

1)ServerTransfer:服务器端重定向,不能跨站点
2)Response.Redirect:客户端重定向,可以跨站点

3.ASP.NET中页面之间传递值几种方式

1)QueryString:通过URL中的查询字符串(Default.aspx?id=5&name=abc)
优点:简单便捷
缺点:安全性差,长度大小有限制

2)Session:通过会话状态传值
优点:当前会话中所有页面均可使用,能传递任何对象
缺点:增加服务器负担容易超时丢失

3)Cookie:通过客户端传值
优点:读取该cookie的所有页面都可以使用
缺点:只能够存储文本信息字符串,大小不能超过4KB

4)Application:通过全局应用程序对象传值
优点:整个应用程序都可以使用,且能够传递任何对象
缺点:可能产生并发问题

5)Server.Transfer:通过服务器端重定向传值
优点:可以将与最初请求相关的所有数据传递给重定向页面
缺点:资源消耗较大

4.什么是code-behind技术

代码隐藏技术,显示页面和逻辑页面分离,提高页面可维护性,提高开发效率

5.ASP.NET中调用webservice的方法有哪些

1)通过HTTP-GET请求调用
2)通过HTTP-POST请求调用
3)通过SOAP请求调用

6.怎样理解web应用程序的“无状态编程”?

web应用程序是基于http协议(具有无状态性),即客户端发送http请求服务器端,服务器收到请求将内容返回给客户端,在这一过程服务器端不会记录任何客户端的信息,请求结束后服务器也不会保留此次请求的任何信息,所有相关请求都会被释放,所有请求响应都是即时的

7.session有什么缺点,可以用什么方法解决

存储在IIS内存中,当IIS发生重启或进程回收时,session则会丢失
解决办法是将session配置为“stateserver”或“SQLserver”,存储在状态服务进程或数据库中,可以避免丢失,但此时无法捕获Session_End事件

8.ASP.NET中所有自定义用户控件都必须继承自哪个类?页面必须继承至哪个类

1)用户控件基类:System.Web.UI.UserControl
2)页面基类:System.Web.UI.Page

9.向服务器发送请求有几种方式

Get:向服务器请求数据
Post:向服务器提交数据

10.Web Service有哪些优点

1)Web Service是基于XML,与具体的语言平台无关,故可以实现跨平台,跨语言通信
2)Web Service是采用SOAP协议(简单对象访问协议)进行通信,该协议基于HTTP协议,故可以实现跨防火墙通信
3)Web Service可以很容易实现分布式应用程序

11.ASP.NET缓存有几种实现方式

1)页面输出缓存:将页面全部进行缓存
2)页面局部缓存:将页面中的一部分放在用户控件,对该部分进行缓存
3)数据缓存:使用cache类进行数据缓存
4)客户端缓存:使用HttpCachePolicy类进行客户端缓存

12.什么是ViewState,有什么作用

视图状态:Web应用程序是无状态,每次从服务器请求网页时都会创建一个新实例,每次往返过程会丢失该页面和控件关联信息,为了客服这一局限性,ASP.NET页框架包含了状态管理功能,可以在往返之间保存页面和控件关联信息,这便是视图状态

13.ASP.NET常见的后缀名有哪些

aspx:页面
ascx:用户控件
asmx:web service
ashx:一般处理程序
asax:Global.asax全局应用程序配置

14.ASP.NET六大对象有哪些

Request、Response、Server、Session、Cookie、Application

15.jquery实现ajax请求的常用方法有哪些?有什么区别?

$.get方法:通过get方式发送请求
$.post:通过post方式发送请求
$.ajax:可以使用指定方式发送请求

16.手动实现ajax请求的步骤是什么

1)创建XMLHttpRequest对象
2)调用open方法初始化请求
3)设置回调函数
4)发送请求

17.MVC的各个字母代表什么含义,在MVC框架中起什么作用

M:Model用户数据访问层
V:View视图用于呈现页面
C:Controller控制器用户处理请求逻辑

18.MVC请求的处理过程

请求到达服务器后首先进入路由系统进行验证,如果请求的url地址格式符合路由定义,则将请求丢给控制器的方法进行处理。在方法中,可能会访问模型中的数据、处理相应的业务逻辑,然后方法将根据请求的内容返回一个适当的视图呈现给客户端

19.请使用jquery实现一个复选框全选、反选功能

function selectAll()
{
var checked = $("#chkall").get(0).checked;
$(":checkbox:not(#chkall)").each(function(){

    this.cheked = checked;

})

}

20.请使用jquery实现表格中隔行变色效果

$(document).ready(function(){
$("#table tr:even").css("background-color","orange");
$("#table tr:odd").css("background-color","pink");

})

21.请使用jquery实现表格中鼠标移动的光棒效果

$(document).ready(function(){
$("#table tr").hover(function(){

 $(this).css("background-color","颜色")

},function(){

 $(this).css("background-color","颜色")

})

})

第三部分:SQLServer

1.写出一条SQL语句,取出表A中第31条到第40条数据(SQLServer,以自动增长的ID作为主键,注意ID可能不是连续的)

select * from(
select *,row_number() over(order by id) row_no from A
) t where row_no between 31 and 40

2.请说出SQLServer中三种表连接的方式inner join 、left join、right join区别及对最终查询结果的影响

1)inner join:内联查询,查询出满足on条件两个表公告集合
2)left join:左外联查询,查询出以左表为基础与右表进行关联,满足on条件结果左表数据完全保留,右表没有满足数据用null补齐
3)right join:右外联查询,查询出以右表为基础与左表进行关联,满足on条件结果右表数据完全保留,左表没有满足数据用null补齐

3.存储过程和函数的区别

1)函数是嵌套在sql语句使用,存储过程大多数作为一个独立部分使用,exec调用
2)函数限制比较多,不能用临时表只能用表变量,存储过程几乎所有的sql代码都可以使用
3)函数针对完成单一功能,存储过程实现业务比较复杂的逻辑功能
4)函数只能返回一个值或表对象,存储过程可以返回一个或多个输出参数

4.数据库索引是什么,有什么作用

数据库索引是一列或多列的排序结构,作用类似一本书目录可以加快查询表中数据的速度

5.数据库索引的分类和区别

1)聚集索引:表示索引中的结构与数据库表中相应行数据在物理磁盘存储的顺序相同的索引
2)非聚集索引:表示索引中的结构与数据库表中相应行数据在物理磁盘存储的顺序不相同的索引

6.什么是事务,它有什么特性

事务:执行单个逻辑功能的一组操作称为事务,事务是最小的工作单元,无论执行成功或失败都作为一个整体进行工作
事务的ACID特性:
1)原子性(Atomicity)即不可再分,要么都执行要么都不执行
2)一致性(Consistency)在事务开始之前结束之后,所有的数据都保持一致性
3)隔离性(Isolution)事务执行互不干扰,一个事务不可能看到其它事务运行的数据
4)持久性(Durability)事务完成后,对数据库的更改保持长久不会被回滚

7.使用事务的最大好处是什么

可以保证数据完整性和一致性,要么全部执行成功,要么全部执行失败

8.SQLServer中,触发器分哪几种?分别代表什么含义

分两大类:
1)DML触发器
当数据库发生数据操作语言(DML)事件时将调用DML触发器,DML事件包括INSERT语句、UPDATE语句、DELETE语句
DML触发器又分为:after触发器(在执行了INSERT、UPDATE、DELETE语句操作之后触发)after触发器只能定义在表上
instead of触发器(表示并不执行INSERT、UPDATE、DELETE而是执行触发器本身)instead of触发器可以在表上定义也可以在视图上定义
2)DDL触发器
当数据库发生数据定义语言(DDL)事件时将调用DDL触发器。DDL事件主要与以关键字CREATE、ALTER、DROP开头的sql语句

9.delete和truncate有什么区别

1)delete可以带where条件,用于删除指定条件的数据;truncate不能带where条件
2)delete删除所有数据后,下一次插入数据紧接着自增ID数值;truncate删除所有数据后,下一次插入数据是重置的数值

10.union和union all的区别

1)union:合并时去掉重复数据
2)union all:合并时对重复数据不作处理

11.SQLServer,有一张学生成绩表,有三个字段:学生ID,学生姓名,考试成绩。如何查询出成绩排在前三名的学生(注意:可能有并列名次)

select * from (
select *,dense_rank() over(order by 学生成绩 desc) no from 学生成绩表
) t where no<=3

12.SQLServer中,向一个表中插入新数据,如何得到自增长字段的当前值

select @@identity

13.SQLServer中,游标有什么作用?如何知道游标已经到了最后?

作用:从包含多条记录结果中每次提取一条记录,类似程序代码中的遍历循环,每次只读取一行的数据
当全局变量@@fetch_status值不等于0,表示游标已经到了最后

第四部分:算法

1.请用递归算法实现计算1+2+3+...+100的结果

static void Main(string[] args){

int total = sum(100);
Console.WriteLine(total);

}

static int sum(int x)
{
   if(x<=1)
          return x;
   else
          return x+sum(x-1);
}

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

int temp;
for(int i = 0;i<nums.length-1;i++)
{
       for(int j=i+1;j<num.length;j++)
       {
               if(num[j]<num[i])
               {
                     temp = num[i];
                     num[i] = num[j];
                     num[j] = temp;
               }
       }

}

.net面试-常见问题归纳整理

标签:重复数   有符号   线程   封装   union   传递值   参数   构造函数   let   

原文地址:https://www.cnblogs.com/ButterflyEffect/p/12064777.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!