.NET面试题

1、 switch的break作用:

如果加了break,则break的作用是在相应的位置跳出整个循环:

2、Sting和 StringBuilder的区别:

 String 对象是不可改变,空间不足时需要为该新对象分配新的空间,对字符串进行操作,每次拼接都会构建一个新的String对象,既耗时又浪费内存

 StringBuilder 对象是动态对象,当达到容量时,将自动分配新的空间且容量翻倍

3丶class和struct的区别:

struct:值类型,不能被继承,默认的访问权限是public

class:引用类型,可以被继承,可以实例化,默认的访问权限是private.

4、c++和c#的区别:

C++支持多继承,C#类只能继承一个基类中的实现但可以实现多个接口

5、冒泡排序的时间复杂度和空间复杂度:

时间复杂度为:O( n^2 );

最优的空间复杂度就是开始元素顺序已经排好了,则空间复杂度为:0;

最差的空间复杂度就是开始元素逆序排序了,则空间复杂度为:O(n);

6、事务:

事务是用户定义的一系列执行SQL语句的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。

      (1)原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

      (2)一致性:在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。

      (3)隔离性:如果有两个事务,运行在相同的时间内,执行 相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,  必须串行化或序列化请 求,使得在同一时间仅有一个请求用于同一数据。

      (4)持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

7、索引,视图,存储过程:

 索引:索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

视图:也被称作虚表;视图中不存放数据,数据依然存放在视图引用的原始数据表中;视图仅仅用来查询,视图不占实际空间

存储过程:存储过程可以用来增删改查;存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句快。

8、面向对象的三大特性:

封装;在于保护或者防止代码(数据)被我们无意中破坏

继承:继承主要实现重用代码,节省开发时间

多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。重载(overload)和重写(override)是实现多态的两种主要方式。

9、进程和线程:

进程:是并发执行的程序在执行过程中分配和管理资源的基本单位

线程:是进程的一个执行单元,比进程更小的独立运行的基本单位,提高并发性,开销少,效率高,切换速度快,共享进程资源;

10、GC垃圾回收机制:

判定引用类型对象或者其包含的子对象没有任何引用是有效的,那么系统就认为它是垃圾

Using {}里面的代码执行完成后,会自动调用对象的 Dispose()方法。

11、值类型和引用类型:

值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用;

值类型:byte,short,int,long,float,double,decimal,char,bool 和 struct;值类型变量声明后,不管是否已经赋值,编译器为其分配内存

引用类型:string 和 class;

当声明一个类时,并没有为其分配堆上的内存空间当使用 new 创建一个类的实例时,分配堆上的空间。

12、装箱和拆箱:

装箱是将值类型转换为引用类型 ;拆箱是将引用类型转换为值类型。

  • object类型是一切类型的父类。

6abd078c988c47a6891c556ae48ed53e.png

 13、重写和重载:

重写:当一个子类继承一父类,而子类中的方法与父类中的方法的名称,参数个数、类型都完全一致

重载:一个类中的方法与另一个方法同名,但是参数列表或参数类型不同,类型可以不同。

14、ASP.NET中页面传值的几种方式:

QueryString、Session、Cookie、Application、Server.Transfer

15、对面向对象的理解:

面向对象是一种以事物为中心的编程思想。

16、abstract,New

抽象类不能实例化。只允许在抽象类中使用抽象方法声明。在抽象方法声明中使用 static 或 virtual 修饰符是错误的;因为抽象方法声明不提供实际的实现,所以没有方法体;

New创建类型的新实例

17、static、virtual

virtual只能在基类中使用,且可以方法里面实现;且abstract和virtual只能写一个;

static:静态的,不变的,在一个类中只有一个,一个方法前加上static修饰后要对其进行调用可以直接通过类名点出来,不用再对类进行实例化。且abstract和static只能写一个;

18、JavaScript有哪几种基本数据类型?

五种基本数据类型:undefined、null、boolean、 number、string;另外还含有一种复杂的数据类型:object.

19、 在c#中“==”和equals 的区别?

对于值类型而言,==与Equals相同,均是判断其值是否相等。

对于引用类型而言,其栈中存储的是对象的地址,那么==就是比较两个地址是否相等,即是否指向同一个对象;Equals函数则是比较两个对象在堆中的数据是否一样,即两个引用类型是否是对同一个对象的引用。

20、 Redis支持哪些数据类型?

string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

21、get、post的区别:

GET用来获取资源,它只是获取、查询数据,不会修改服务器的数据,用于幂等的情况;

POST则是向服务器发送修改请求,进行数据的修改的,适用于所有情况,建议用于不幂等的情况。

22、JavaScript向后台传值的几种方式:

(1)form表单提交(常用)

(2)JQuery中的ajax提交(常用)

(3)通过url字符串拼接向后台提交数据

(4)后台向前台:ViewBag

23、C#的错误处理机制:

try-catch-finally

24、为什么要高内聚低耦合:

为什么要高内聚?
对于同一个功能模块而言他们关系越紧密那么出错率就会相应的降低,同时也有利于编程。
为什么要低耦合?
对于一个软件而言,他的功能模块有很多,如果各个模块之间的关系越复杂,就会产生更多的意想不到的错误(例如随便改一个参数,有可能对其他模块都会造成不可预估的影响),会给以后的维护工作带来很多麻烦!

25、泛型:

2edfe2c92efa4f6eaf8297047d255ec7.png

2eb091b7302f4f28a8b7aec4fbdf5417.png

泛型好处:1.性能高:定义数据类型,不需要类型转换,避免拆装箱带来的性能损失;
                  2.类型安全:定义允许使用的数据类型,在编译时检查类型错误,及早发现错误。

 26、C#面向对象的设计原则

 1.单一原则(对象职责明确原则)SRP:一个对象所完成的任务是明确的。而不能设计万能类!

2.开闭原则(开放扩展,封闭修改)OCP:如果一个项目的需求变化,会导致很多程序的修改,则我们说你的程序设计破坏了开闭原则。实际情况应该是,需求变化,尽量通过扩展对象实现,而不是修改对象。

3.里氏替换原则(LSP):父类能够被他的子类替代。是我们实现多态的基本的机制!

4.迪米特法则(Lod):也叫最小(知道、知识)原则。用于对象解耦

5.接口隔离原则(ISP):是说我们设计接口的时候,尽量以小接口出现,不要设计一个复杂接口。

 6.依赖倒置原则(DIP):高层模块不应该依赖于低层模块。两种模块都应该依赖抽象。

27、依赖注入和New的区别:

 依赖注入降低模块与模块之间耦合性

依赖倒置:高层模块不应该依赖于低层模块。两种模块都应该依赖抽象。

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

28、设计模式:

工厂方法、桥接模式、装饰模式、代理模式、观察者模式、命令模式等

29、多态:

  抽象、虚方法、重写、重载

30.数据库三大范式:

1.原子性:属性不可分割,即每个属性都是不可分割的原子项。(实体的属性即表中的列)

2.消除部分依赖:在1NF的基础上,非主属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)。

3.消除传递依赖:在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)。

31.MVVM:

MVVM
vue框架中MVVM的M就是后端的数据,V就是节点树,VM就是new出来的那个Vue({})对象

M(Model):模型层。业务逻辑相关的数据对象
V(View):视图层。就是展现出来的用户界面。
VM(ViewModel):视图模型层。连接view和model的桥梁。因为,Model层中的数据往往是不能直接跟View中的控件一一对应上的,所以,需要再定义一个数据对象专门对应view上的控件。而ViewModel的职责就是把model对象封装成可以显示和接受输入

32、API中的四种调用方法:

get(获取),post(新增),put(更新),delete(删除)

33、c#委托(方法作另一个方法的参数)

 //声明委托类型
    public delegate void AssembleIphoneHandler();
    public AssembleIphoneHandler AssembleIphone;

34、.Net Core 和 .Net FrameWork区别

        1、跨平台

        2、开源

        3、新 API

        4、增强的性能

        5、并行版本控制

35、Startup中ConfigureServices和Configure有什么用

      前者主要用来注册服务,后者主要用来创建和配置请求管道,然后在Main方法中进行调用:

36、.Net Core中的中间件是什么

       中间件是一个可以处理HTTP请求或响应的软件管道

37、Cookies 和 Session 有什么区别?

    作用范围不同Cookie 数据保存在客户的浏览器上,Session数据 保存在服务器端。 存取方式的不同,Cookie 只能保存 ASCII,Session 可以存任意数据类型,一般情况下我们可以在 Session 中保持一些常用变量信息,比如说 UserId 等

38、常见的数据结构

数组、链表、栈、队列、树、堆、散列表、图

39、ref和out区别:

ref在传值之前必须先声明并初始化;

out在传值之前先声明,但不初始化,必须在方法中对其完成初始化;

用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。

out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。

40、什么叫面向对象?

对象是在实例化由类产生对象;

对象是由数据和允许的操作组成的包;

41、String和string的区别:

技术上没区别;

string是C#的关键字,String是类名,String是CLR的类型。

尽管 string 是引用类型,但定义相等运算符( == 和 !=)是为了比较 string 对象(而不是引用)的值;

String 对象称为不可变的(只读),因为一旦创建了该对象,就不能修改该对象的值。

42、MVC的好处:

降低成本。高重用性和可适用性。可维护性。快速的部署

43、如何优化sql

1.避免使用 select *

2 用union all代替union

3 小表驱动大表

4 批量操作

5 多用limit

6 in中值太多

7 增量查询

8 高效的分页

9 用连接查询代替子查询

10 join的表不宜过多

11 join时要注意

12 控制索引的数量

13 选择合理的字段类型

14 提升group by的效率

15 索引优化

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值