1. 简述 private, protected, public, internal 修饰符的访问权限
2. 列举ASP.NET 页面之间传递值的几种方式
3. C#中的委托是什么? 事件是不是一种委托?
委托和事件的区别:
+=
或注销自己: -=
”,外界不可以注销其他的注册,外界不可以主动触发事件,因此如果用Delegate
就没法进行上面的控制,因此诞生类事件这种语法。List
。Add、Remove
自己,不能赋值,事件只能用 +=
, -=
而不能用 =
。4.实现多态过程中,overload重载与override重写的区别?
overload
是面向过程的概念。override
是进行基类中函数的重写(virtual函数),是面向对象的概念。5.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
索引器简介
C#通过提供索引器,可以像处理数组一样处理对象。特别是属性,每一个元素都以一个get或set方法暴露,索引器不单能索引数字(数组下标),
还能索引一些HashMap的字符串,所以通常来说,C# 中类的索引器通常只有一个,就是this,单也可以有无数个,只要你的参数列表不同就可以了,
索引器最大的好处是代码看起来很自然,很符合实际的思考模式。
微软范例:
class SampleCollection<T>
{
private T[] arr = new T[100];
//this关键字用于定义索引器
public T this[int i]
{
get { return arr[i]; }
set { arr[i] = value; }
}
}
//使用索引器查找
class Program
{
static void Main(string[] args)
{
SampleCollection<string> sampleCollection = new SampleCollection<string>();
sampleCollection[0] = "Hellow world";
Console.WriteLine(sampleCollection[0]);
}
}
总结:
6.用.net 做B/S 结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?
答:一般是用 MVC 模式分层,一般分为 3 层,数据访问层,业务层,表示层。
7.ADO.NET 中的 5 个对象分别是什么?
Connection
:主要开启程序和数据库之间的连接,没有利用连接对象将数据库打开,是无法从数据库中获取数据的。Close和Dispose的区别:Close以后还可以Open,Dispose以后则不能用。
Command
: 主要可以用来对数据库发出一些指令,例如可以对数据库下达 增删改查 数据等指令,以及调用存在数据库中的存储过程等。这个对象是架构在Connection
对象上的,也就是Command
对象是透过连接到数据源。
DataAdapter
:主要是在数据源及DataSet
之间执行数据传输工作,它可以透过Command
对象下达命令后,并将取得的数据放入DataSet
对象中。这个对象是架构在Command
对象上,并提供了许多配合DataSet
使用的功能。
DataSet
: 这个对象可以看成是一个暂存区(Cache),可以把从数据库中查询到的数据保存起来,甚至可以将整个数据库显示出来,DataSet是放在内存中的。 DataSet
的能力不只是可以存储多个Table而已,还可以透过DataAdapter
对象取得一些例如主键等的数据库表结构,并可以记录数据表之间的关联。DataSet
可以说是ADO.NET中重量级对象,这个对象架构在DataAdapter上,本身不具备和数据源沟通的能力,也就是说我们是将DataAdapter
对象当做DataSet
对象以及数据源间传输数据的桥梁。DataSet
包含DataTable
,DataTable
包含DataRow
。
DataReader
:当我们循环读取数据而不需要其他操作时,可以使用DataReader
对象,DataReader
对象只是一次一笔向下循环读取数据源中的数据,这些数据时存储在数据库服务器中的,而不是一次性加载到程序内存中的,只能(通过游标)读取当前行的数据,而这些数据是只读的,并并不允许其他的操作。因为DataReader
限制了每次只读一笔,而且只能只读,所以使用起来不但节省资源,而且效率好。使用DataReader
对象除效率高之外,因为不用把数据全部传回,故降低了网络负载。
总结:
Connection
对象来连接数据库,使用 Command
或 DataAdapter
对象来执行SQL语句,并将执行的结果返回给DataReader
或 DataAdapter
,然后再使用取得的 DataReader
或 DataAdapter
对象操作数据结果。8.属性和public字段的区别是什么?调用set方法为一个属性设值,然后用get方法读取出来的值一定是set进去的吗?
属性可以对值、取值的过程进行非法控制,比如年龄禁止设置成负数,而字段不能进行这样的设置。
虽然一般情况下,get读取的值就是set设置进去的值,但是可以让get读取的值不是set设置的值,例子如下:
public class Person
{
public int Age
{
get { return 30; }// 此时get固定返回30,这里不论set什么值,读取永远返回30
set { }
}
}
//Main中调用如下
Person person = new Person();
person.Age = 31;
person.Age++;
Console.WriteLine(person.Age);// 输出30,因为get属性始终是30
9.什么是装箱(boxing)和拆箱(unboxing)?
Object是引用类型,但是它的子类Int32不能去Object能去的“ 要求必须是引用类型 ”的地方,违反了继承原则,所以要把Int32 装在Object中才能传递。
装箱 :从值类型接口转换到引用类型。
拆箱 :从引用类型转换到值类型。
object obj = null;//引用类型
obj = 1;//装箱(boxing),把值类型包装成引用类型
int i1 = (int)obj;//拆箱(unboxing),把引用类型转换为值类型
注意:不能将引用类型赋值给值类型,如下代码会报错
int i=10;
object obj = i;
int j = obj;//报错,拆箱需要进行显示转换
//这样才行
int j = (int)obj
拆箱和装箱必须涉及了解CTS:
System.Object
类。值类型的最大特点是他们不能为null,值类型的变量总有一个值,(例如用int x;
声明的值类型虽然未赋值,但是默认值为0),为了 解决值类型不可以为null 而引用类型可以为null的问题,微软在.Net中引入装箱和拆箱。10.CTS、CLS、CLR 分别是什么?
Int32、Int16→int、String→string、Boolean→bool。
每种语言都定义了自己的类型,.Net通过CTS提供了公共的类型,然后翻译生成对应的.Net类型。11..net
中,类(class)与结构(struct)的异同?
Int32、Boolean
等都属于结构体。12.堆(Heap)和栈(Stack)的区别?
13.能用foreach遍历访问的对象的要求是什么?
IEnumerable
接口或声明 GetEnumerator
方法的类型。IEnumerable
但是 GetEnumerator
必须要声明。14.GC 是什么?为什么要有GC?
FileStream
或者SqlConnection
需要程序员调用Dispose
进行资源的回收。GC.Collect()
,但一般这个不需要手动调用,当一个对象在没有任何变量指向(不再能使用)时就可以被回收了。15.值类型和引用类型的区别
System.ValueType
。但与引用类型相同的是,结构也可以实现接口。16.C# 中接口和类有什么区别?
不同点:
相同点:
基础知识:接口只能定义方法(只能定义行为,不能定义实现也就是字段),因为事件、索引器、属性本质上都是方法,所以接口中也可以定义事件、索引器、属性。
17. 抽象类(abstract class)和接口(interface)有什么区别?
相同点:
不同点
method
)、属性 (property
)、索引器(index
)、事件(event
)的 签名,但 不能定义字段 和 包含实现的方法; 抽象类 可以定义字段、属性、包含有实现的方法。struct
),和引用类型(class
),而抽象类只能作用于 引用类型。例如struct
就可以继承接口,而不能继承类。18.是否可以继承String类?
19.int、DateTime、string 是否可以为null?
null
表示不知道,而不是没有,没有年龄和不知道年龄是两码事, 数据库中null
不能用0表示,0岁和不知道多少岁数不一样。string
可以为 null
,而int(值类型)和DateTime
(为struct
类型也是值类型),值类型不能为null。int
等值类型不可以为null,而 数据库中int是可以为null的。 int?、DateTime?、bool?
变成了 可空类型。如下:
int i1 = null;// int是值类型,值类型不能为null,会报错
int? i2 = null;// 值类型后面加 ? 就变成了可空类型。
int i3 = i2;//(报错) 把可空类型赋值给值类型,一定会报错。
int i4 = (int)i2; //可以显示转换,由程序员保证 赋值不能为空。
int? i5 = i4;// 一定会成功,因为将值类型赋值给可空类型是允许的。
//注意:
int? 翻译生成.Net 的Nullable<int>,CTS
注意:
int? 是微软的一个语法糖,是一种int没有直接关系的Nullable 类型。
Nullable<int> d1 = new Nullable<int>();//int? d1=null;
Nullable<int> d2 = new Nullable<int>(3);//int? d2=3;
Console.WriteLine(d1==null);
20.using关键字有什么用?什么是IDisposable?
using可以声明namespace
的引入,还可以实现非托管资源的释放,实现了IDisposiable
的类在using
中创建,using
结束后会自动调用该对象的Dispose
方法,释放资源。
(1)引用命名空间
using System;//引用命名空间
(2)创建别名
using aClass = test1.MyClass; //创建别名
(3)实现非托管资源释放
// test类 必须实现IDisposiable 接口,using结束后会自动调用该对象的Dispose 方法释放资源
using (test t = new test())
{
........
}
程序在编译阶段,编译器会自动将using
语句生成为 try-finally
语句,并在finally
代码块中调用Dispose
方法,来清理资源。所以using
语句等效于try-finally
语句。(加分项)
21.XML 与 HTML 的主要区别
XML是区分大小写字母的,HTML不区分。
在HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略</p>
或者</li>
之类的结束 标记。在XML中,绝对不能省略掉结束标记。
HTML:<img src="1.jpg"><br><br>
XML:<img src="1.jpg"></img><br/><br/>
在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 /
字符作为结尾。这样分析器就知道不用 查找结束标记了。
在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。
在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。
切记: XML是用来 存储和传输 数据的,HTML是用来显示数据的
22. string str = null 与 string str = "" 说明其中的区别。
string str = null //是不给它分配内存空间,而string str = \"\" 给他分配长度为空字符串的内存空间。
string str = null //没有string对象,string str = "" 有一个字符串对象。
例如:
string s3 = string.Empty; // 反编译发现,string.Empty就是在类构造函数中 Empty = "";
23、写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。
答:解1: select top 10 * from A where id not in (select top 30 id from A)
演变步骤:
1)select top 30 id from T_FilterWords--取前条
2)select * from T_FilterWords
where id not in (select top 30 id from T_FilterWords)--取id不等于前三十条的
--也就是把前条排除在外
3)select top 10 * from T_FilterWords
where id not in (select top 30 id from T_FilterWords)
--取把前条排除在外的前条,也就是-40条
解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)
24、.Net中,所有可以被序列化的类都标记为: [serializable]
25.什么是code-Behind 技术?
ASPX
页面指向CS
文件的方法 实现显示逻辑和处理逻辑的分离,这样有助于web应用程序的创建。比如分工,美工和编程的可以个干各的,不用再像以前asp那样都代码和html代码混在一起,难以维护。 code-Behind
是 基于部分类技术实现的,在我的项目的三层代码生成器中用到了部分类。26.接口是一种类型,在接口中可以声明(方法、属性、索引器和事件),但不可以声明 公有的域 或 私有的成员变量 。
属性
,索引器
和事件
,最终都编译生成方法。因为字段属于实现层面的东西,只有存取值的时候才会用到字段,所以接口中不能定义字段27.在ADO.NET 中,对于Command对象的ExecuteNonQuery()方法和ExecuteReader()方法,下面描述错误的是(C)
ExecuteNonQuery()
方法来执行;ExecuteNonQuery()
方法返回执行Sql语句所影响的行数。ExecuteReader()
方法来执行;ExecuteReader()
方法返回一个 DataReader
对象;28、StringBuilder 和 String 的区别?
详解:
如果要操作一个不断增长的字符串,尽量不用String类,改用StringBuilder类。两个类的工作原理不同:String类是一种传统的修改字符串的方式,它确实可以完成把一个字符串添加到另一个字符串上的工作没错,但是在.NET框架下,这个操作实在是划不来。因为系统先是把两个字符串写入内存,接着删除原来的String对象,然后创建一个String对象,并读取内存中的数据赋给该对象。这一来二去的,耗了不少时间。
例如:要s3 = s1+s2,其实是创建了新对象s3,同时将s1,s2删除,拿出二者值赋值给s3,最终在创建新对象s3,效率是比较低的。
而使用System.Text命名空间下面的StringBuilder类就不是这样了,它提供的Append方法,能够在 已有对象的原地进行字符串的修改,简单而且直接。当然,一般情况下觉察不到这二者效率的差异,但如果你要对某个字符串进行大量的添加操作,那么StringBuilder类所耗费的时间和String类简直不是一个数量级的。
29.请叙述属性与索引器的区别:
属性 | 索引器 |
通过名称标识 | 通过签名标识 |
通过简单名称或成员来访问 | 通过元素来访问 |
可以为静态成员或实例 | 必须为实例成员 |
属性的get访问器没有参数 | 索引器的 get 访问器具有与索引器相同的形参表。 |
属性的set访问器包含隐式value参数 | 除了value 参数外,索引器的set访问器还具有与索引器相同的形参表 |
31.在什么情况下,会用到虚方法(virtual)?它与接口有什么不同?
virtual
,在定义接口中不能有方法体,虚方法可以定义方法体。32. DataReader 和 DataSet 的区别?
非连接模式
)动态操作读入到内存的数据
)。33.public static const int A = 1;
这段代码有错误么?
const
)定义后就是静态的(static
)。34.传入某个属性的set方法的隐含参数的名称是什么?
value 它的类型和属性所声明的类型相同。
例如:定义一个属性set方法给code赋值,隐含参数就是value
private string code;
public string Code
{
get { return code; }
set { code = value; }// value 为隐含参数
}
35.C# 支持多继承吗?
36. C# 中所有对象的共同基类是什么?
37. 通过超链接怎么传递中文参数?
QueryString
传递,用urlencode
编码,用urldecode
解码。38.string、String;int、Int32;Boolean、bool的区别
string、int、 bool
相当于C#中对这些类定义的别名(CTS)39.Server.Transfer和Response.Redirect的区别是什么?(常考)
Server.Transfer | Response.Redirect |
仅是服务器中 控制权的转向 , 在客户端浏览器地址栏中不会显示出转向后的地址 | 是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址 |
是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 这个过程中浏览器和Web服务器之间经过了一次交互。 | 就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求。这个过程中浏览器和Web服务器之间经过了两次交互 |
不可以转向外部网站 | 可以转向外部网站 |
40.不是说字符串是不可变的吗?string s = "abc"; s="123";
不就变了吗?
"abc"
,然后我们将s指向"123"
,那么s所指向的那个对象是否发生了改变呢? 答案是没有。这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为"123"
,原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。41.是否可以从一个static方法内部发出对非static方法的调用?
42、说出一些常用的类、接口,请各举5个
常用的类 | 常用的接口 |
StreamReader、WebClient、Dictionary |
IDisposable、IEnumerable、IDbConnection、IComparable、ICollection、IList、IDictionary |
43、编写一个单例(Singleton)类
44.什么是sql 注入?
如何防止SQL 注入攻击:
45、数据库三范式是什么?
46、post、get的区别(必考)
GET | POST |
get的参数会显示在浏览器地址栏中 | post的参数不会显示在浏览器地址栏中 |
get提交点击刷新时,浏览器不会提示“是否重新提交” | post 提交页面在点击刷新按钮时,浏览器一般会提示“是否重新提交” |
用get的页面可以被搜索引擎抓取 | 用post则不可以 |
get 提交时,数据量通常比较小(2K),受限于网页地址长度 | post提交数据量可以非常大 |
get 不可以进行文件提交 | post 可以进行文件提交 |
常用http 状态码
1开头:信息状态码
2开头:成功状态码
3开头:重定向状态码
4开头:客户端错误状态码
5开头:服务端错误状态码
1XX:信息状态码
100 |继续| 初始的请求已经接受,请客户端继续发送剩余的部分
101 |切换协议| 请求这要求服务器切换协议,服务器已确定切换
2XX:成功状态码
200 |成功| 服务器已成功处理了请求
3XX :重定向
300 |多种选择| 针对请求,服务器可执行多种操作
4XX:客户端错误状态码
400 |错误请求| 服务器不理解请求的语法(Bad request)
401 |未授权| 请求要求用户的身份演验证
403 |禁止| 服务器拒绝请求
404 |未找到| 服务器找不到请求的页面
408 |请求超时| 服务器等候请求时发生超时
5XX:服务端错误状态码
500 |服务器错误| 服务器内部错误,无法完成请求
501 |尚未实施| 服务器不具备完成请求的功能
503 |服务不可用| 服务器目前无法使用
504 |网关超时| 网关或代理服务器,未及时获取请求
47、.Net、ASP.Net、C#、VisualStudio之间的关系是什么?
Code-behind
的方式用C#、VB.Net等支持.Net的语言编写。48、AJAX解决什么问题?如何使用AJAX?AJAX有什么问题需要注意?项目中哪里用到了AJAX?
XMLHttpRequest
进行Http
的请求.49、Application 、Cookie和 Session 两种会话有什么不同?
50.什么是受管制(托管)的代码?
注意:
Visual Basic .NET
和C#只能产生托管代码。
Visual C++
可以创建非托管程序。
51.在.net中,配件的意思是?
52.SqlServer 服务器中,给定表table1 中有两个字段ID、LastUpdateDate,ID 表示更新的事物号,LastUpdateDate 表示更新时的服务器时间,请使用一句SQL 语句获取最后更新的事物号。
Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)
53.String s = new String("xyz");创建了几个String Object?
"xyz"
,一个是指向"xyz"
的引用对象s。解释:
"xyz"
,存储于常量池中,第二个对象是 new String("xyz")
时产生的,在堆中分配内存给这个对象,只不过这个对象的内容是指向字符串常量 "xyz"
。54.如何处理几十万条并发数据?
55.成员变量和成员函数前加static的作用?
56.请给出GAC 的含义
57.什么是SOAP,有哪些应用?
58.C# 中Property 和 Property 区别?各有什么用处?这种机制的好处在哪里?
在C#中有两个属性,分别为Property和Attribute:
Attribute就是干这事的。它允许你将信息与你定义的C#类型相关联,作为类型的标注。这些信息是任意的,就是说,它不是由语言本身决定的,你可以随意建立和关联任何类型的任何信息。你可以作用属性定义设计时信息和运行时信息,甚至是运行时的行为特征。关键在于这些信息不仅可以被用户取出来作为一种类型的标注,它更可以被编译器所识别,作为编译时的一种附属条件参加程序的编译。定义属性:属性实际上是一个派生自System.Attribute基类的类。System.Attribute类含有几个用于访问和检查自定义属性的方法。尽管你有权将任何类定义为属性,但是按照惯例来说,从System.Attribute派生类是有意义的。
59.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
60.&
和 &&
的区别?
& 是位运算符,表示按位运算,&& 是逻辑运算符,表示逻辑与(and)。
一假则假,1为真,0为假,17将与23进行按位与(&)运算:得到的结果转换为十进制就是17
0000 0000 0001 0001
0000 0000 0001 0111
0000 0000 0001 0001
61.HasMap 和Hashtable 的区别?
HasMap
是 Hashtable
的轻量级实现(非线程安全的实现),他们都完成了Map 接口,主要区别在于 HashMap 允许空(null)键值(key),由于非线程安全,效率上可能高于 Hashtable
。62.<%# %>
和 <% %>
有什么区别?
<%# %>
表示绑定的数据源;<% %>
是服务器端代码块63. .net
的Remoting 的工作原理是什么?
64.启动一个线程是用run()还是start()?
启动一个线程是调用start() 方法,使得线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM 调度并执行,但这并不意味着线程就会立即运行。
run() 方法可以产生必须退出的标志来停止一个线程。
启动线程:
class ThreadCreationProgram
{
public static void CallToChildThread()
{
Console.WriteLine("Child thread starts");
}
static void Main(string[] args)
{
ThreadStart childref = new ThreadStart(CallToChildThread);// 创建线程对象,并传入线程函数
Thread childThread = new Thread(childref);// 创建线程对象
childThread.Start();// 启动一个线程,为子线程
Console.ReadKey();
}
}
Sleep(t) 用于挂起线程多少毫秒,Abort() 为销毁线程。
65.sleep() 和 wait() 有什么区别?
66.数组有没有length() 方法? String有没有length() 方法?
length()
这个方法,只有 length
的属性。String
有 length()
这个方法。67.UDP连接和TCP连接的异同。
TCP --- 传输控制协议(Transmission Control Protocol),提供的是 面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
UDP --- 用户数据报协议(User Datagram Protocol),是一个 简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是 并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
68.ref 和 out 的区别?
69.const 和readonly 的区别?
const
用于声明常量,readonly
用于声明运行时常量。常量分为:
静态常量:指编译器在编译的时候会对常量进行解析,并将常量的值替换成初始化的值(const)
动态常量:它的值是在运行的那一刻才获得的,编译器编译期将其表示为只读常量,而不用常量的值代替,这样动态常量不用再声明的时候就初始化,而可以延迟到构造函数中等进行初始化。(readonly)
例如:静态常量const声明,编译时就指定,高效、不消耗内存。
const double pi = 3.1415926;//初始化声明时赋值,编译时就解析,声明后不能改变常量值
static void Main(string[] args)
{
Console.WriteLine(pi);
}
例如:动态常量readonly声明,可以先不指定初值,而可以在构造函数中延迟指定
class Person
{
public readonly string Name;
public Person(string name)
{
this.Name = name;// 在构造函数中给readonly 常量赋值,一旦赋值,就不能再次改变
}
}
70.什么是链式委托?
71.C#中的 lock 关键字有何作用
Monitor.Enter
和Monitor.Exit
两个方法的简化语法,功能上其实现了进入和退出某个对象的同步。通常情况下,可以通过 lock一个私有的引用成员变量来完成成员方法内的线程同步,而通过lock一个私有的静态引用成员变量来完成静态方法内的线程同步。72.下面这段代码有错误吗?
switch(i){
case(): 答://case()条件不能为空
CaseZero();
break;
case1:
CaseOne();
break;
case2:
dufault; 答://wrong,格式不正确
CaseTwo();
break;
}
73.char和varchar和nvarchar的区别?(必考)
trim()
注意:如果包含特殊字符和中文,建议使用nvarchar。
74.常用字符集:
75.Main 函数是什么?在程序中使用Main函数有什么需要注意的地方?
76.值类型的默认值是什么?(情况一:字段或全局静态变量;情况二:局部变量)
77.声明一个变量时在内存中做了什么?初始化一个变量时又在内存中做了什么?
初始化时:
78.new关键字能做的事情?
79.数组一旦创建后,能不能修改数组长度?
80.类和对象的关系?
81.创建一个类的对象时,在内存中做了什么?例如 Person p = new Person();
p
,然后将Person
对象在 堆中的引用地址赋值给对象 p
)82.为什么要有构造函数呢?
83.类的命名规则是什么?
84. this
关键字在方法中使用,它代表什么?
this
指当前类的对象,或者它 父类 的类对象。base
只能指向 父类 的对象。85.值类型变量初始化(内存分配)?(两种情况:一是类的成员变量,二是:方法的局部变量)
86.什么是里氏替换原则?
SOLID 原则(面向对象的五大原则)
87.子类和父类之间的转换?
88、is操作符和 as 操作符的区别是什么?
is
是 对类型的判断,返回bool (判断A是否是B 类,或者A 是不是B 的子类),如果一个对象是某个类型或者是其父类的话就返回true,反之false。as
是用来做 类型转换的,as只能针对引用类型的转换。as 是先判断,再转换(as首先测试转换是否合法,若合法则转换,否则返回null,不会报错)注意:
is 和 as
都不会抛出异常。
1、什么是.net core?
2、.net core 有哪些好的功能?
3、.net core跟 .net比,有哪些更好的地方?
.net core
请求效率更高,能够处理更多请求。.net core
有更多的安装配置的方法。4、什么是meta packages?
Meta packages
是指包含所有ASP .net code
依赖的一个包。叫做Microsoft.AspNetCore5、.net core 应用能跟.net 4.x架构一起工作吗?
6、什么是dot net core的startup class?
.net core
应用的入口。所有的.net core
应用必须有这个class。这个类用来配置应用。这个类的调用是在program main函数里面进行配置的。类的名字可以自己定义。7、Startup class的config service方法有什么作用?
8、startup class的configure方法有什么作用?
9、什么是中间件?
10、application builder的 use 和 run 方法有什么区别?
start up class
的configure
方法里面调用。都是用来向应用请求管道里面添加中间件的。Use
方法可以调用下一个中间件的添加,而run
不会。11、dot net core 管道里面的map拓展有什么作用?
12、dot net core里面的路径是如何处理的?
13、如何在dot net core中激活session功能?
14、dot net core工程里面有多少个工程文件?
15、什么是dot net core里面的tag helper?
16、如何使tag helper在元素这一层上失效?
17、什么是Razor页面?
@page
作为页面的起始标志。18、如何在Razor页面中实现数据模型绑定?
bindproperty
属性。19、 如何在controller中注入service?
config services
方法中配置这个service
。controller
的构造函数中,添加这个依赖注入。20、描述一下依赖注入后的服务生命周期?
在.net core中,我们不需要关心如何释放这些服务, 因为系统会帮我们释放掉。有三种服务的生命周期。
单实例服务, 通过add singleton
方法来添加。在注册时即创建服务, 在随后的请求中都使用这一个服务。
短暂服务, 通过add transient
方法来添加。是一种轻量级的服务,用于无状态服务的操作。
作用域服务,一个新的请求会创建一个服务实例。使用add scoped方法来添加。
原文:https://www.cnblogs.com/vpersie2008/p/12800748.html