1、如何理解委托,什么情况使用委托?
委托是保存某个方法参数中的引用类型变量。委托变量可以传入不同的方法实现不同的功能。
委托特别用于实现事件和回调方法。
2、什么是泛型,泛型约束有什么作用?
允许延迟编写类或方法中的数据类型、直接实际在程序中使用它的时候才确定的数据类型。
所谓泛型约束,实际就是约束类型T。使T必须遵守一定的规则。比如T必须继承自某个类,或者T必须实现某个接口等。
3、内置的泛型委托有哪些?
Action、func
4、使用接口有什么好处?
接口指定规范、让实现类实现接口定义的方法。提供多态的实现,实现类实现接口,让接口类型接受实现类接收实现类的实例。IStudent stu = new Student();
5、接口与抽象类有什么不同?
相同:不能实例化
不同:一个类可以继承多个接口,一个类只能继承一个类(包括抽象类)。抽象类可以用具体的方法实现,也可以定义字段等。
6、面对对象三大特征是什么,如何实现多态?
封账、继承、多态
使用接口或抽象类后,继承或实现不同类型的对象,调用相同的方法,表现不同的行为。
7、值类型与引用类型的区别?
引用类型:分配在堆上,存储引用类型本身的数据,另一个块空间分配在栈上,储存对堆上数据的引用(实际上存储的堆上的内存地址,也就是指针)。
值类型:分配在栈上
值类型储取速度快,引用类型存取速度慢
栈是内存分配的自动释放;而堆在.net中会有GC来释放。
8、什么是装箱和拆箱?
装箱:将值类型(如int,或定义的值类型等)装换为object或者引用类型的一个过程。
拆箱:将引用类型装换为值类型的一个过程。
9、谈谈http协议的理解
超文本传输协议,http是一个客户端终端(用户)和服务器端(网站)请求和应答的标准TCP协议
一个请求报文由请求行、请求头部、空行和请求数据组成。
一个相应报文由状态行、想要头部、空行和相应正文组成。
10、get请求和post请求方式对比
GET请求的数据会附上URL之后(就是把数据放置在HTTP协议之后),以?分割和传输数据,参数之间以&相连
GET请求可被缓存、请求保留在浏览器历史记录中、请求可被收藏为书签、请求不应在处理敏感数据时使用、请求的长度限制、请求只应当于取回数据
POST请求的参数在请求参数体中、请求不会被缓存、请求不会保存在浏览器历史记录中、不能被收藏为书签、请求堆数据长度没有要求
11、什么是SQL注入攻击,我们可以怎么预防?
针对程序员编写是的疏忽,通过SQL语句,实现无账号登录,甚至篡改数据库。
可以过滤特殊的字符、使用带参数的SQL语句
12、工厂设计模式中,工厂类的作用是什么?
使用工厂类为我创建对象,把创建的权利交个工厂来执行。
13、什么是高内聚,低耦合?
高内聚,一般是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则
低耦合,降低模块间的耦合度能减少模块间的影响,防止对某一模块修改所引起的“牵一发动全身“的水波效应,保证系统设计顺利进行
14、谈谈IOC与DI
IOC控制反转,把创建对象交给容器去做,不需要自己手动去new对象。
DI依赖注入,创建对象时,对象之间的引用会自动创建注入。
15、谈谈你对中间件的理解
中间件事组装应用程序管道中以处理请求和响应的组件。可以选择是否将请求传递给管道中的下一个组件。可以在调用管道中下一个组件之前和之后执行工作。
16、什么是ORM框架,你使用过那些ORM框架
对象关系映射,让数据库和对象做一个映射,这样,我们在具体的操作数据库的时候,就不用需要再去和复杂的SQL语句打交道,只要像平常一样操作对象一样操作它就可以了。
17、与直接使用ADO.NET相比,使用ORM框架优缺点是什么?
优点:不用编写复杂的SQL语句,可以操作对象来操作数据库。
缺点:使用了自动映射,带来了性能的消耗
18、String与StringBuilder的区别
字符串一旦创建就不可修改大小,修改字符串在内存中需要创建一个新的字符串,如果频繁的修改字符串会提高系统的开销。则频繁修改字符串时使用StringBuilder
19、left join、inner join的区别
在连接保证左表中所有数据都查询出来,而右表中没有匹配的数据为null。
内连接保证左右两张表都匹配的数据才会查询出来。
20、IEnumerable与IQueryable的区别
要使用foreach就必须继承Ienumerable,IQueryable继承自Ienumerable。IQueryable在使用EF时有延迟加载机制,直到ToList是才会查询出来。
21、.Net Core有几种过滤器
权限过滤器 、 资源过滤器 、 方法过滤器 、 异常过滤器 、 结果过滤器
22、为什么有些类型行可以写在方法或控制器上?
因为这些类是特性,特性类必须继承自Attribute,特性本质也是一个类。
23、.net core 中startup文件的主要作用是什么?
Startup文件是.Net Core应用程序启动的配置文件,实现全局配置。Configure方法,通过向IApplicationBuilder实例添加中间件组件来配置请求管道。ConfigureServices方法注入对象时使用。
24、IOC容器中3种声明周期是什么?
Transient:瞬时生命周期,Transient服务在每次被请求是都会被创建一个全新的对象(每次要对象都是全新的实例)
Scoped:Scoped生命周期的服务是每次web请求被创建,局部单例对象,在某个局部内是同一个对象(作用域单例,本质是容器单例);一次请求内是一个单例对象,多次请求则多个不同的单例对象
Singleton:Singleton生命周期服务在第一次请求时创建,在后续的每个请求都会使用同一个实例。
25、如何理解同步请求与异步请求?
同步:提交请求—>等到服务器处理—>处理完毕返回 这个期间客户端浏览器不能干任何事
异步:请求通过事件触发—>服务器处理(这时浏览器任然可以作其他事情)—>处理完毕
异步请求可以使得浏览器局部刷新,而不是同步整体刷新。