草庐IT

.NET面试题

飞向高高的天 2023-08-11 原文

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类型是一切类型的父类。

 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、泛型:

泛型好处: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、什么叫面向对象?

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

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

有关.NET面试题的更多相关文章

  1. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  2. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  3. ruby - Net::HTTP 获取源代码和状态 - 2

    我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur

  4. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  5. Hive SQL 五大经典面试题 - 2

    目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类

  6. .net - .NET 将如何影响 Python 和 Ruby 应用程序? - 2

    我很好奇.NET将如何影响Python和Ruby应用程序。用IronPython/IronRuby编写的应用程序是否会非常特定于.NET环境,以至于它们实际上将变得特定于平台?如果他们不使用任何.NET功能,那么IronPython/IronRuby相对于非.NET同类产品的优势是什么? 最佳答案 我不能说任何关于IronRuby的东西,但是大多数Python实现(如IronPython、Jython和PyPy)都试图尽可能忠实于CPython实现。不过,IronPython正在迅速成为这方面的佼佼者之一,并且在PlanetPyth

  7. ruby - 如何使用 Ruby HTTP::Net 处理 404 错误? - 2

    我正在尝试解析网页,但有时会收到404错误。这是我用来获取网页的代码:result=Net::HTTP::getURI.parse(URI.escape(url))如何测试result是否为404错误代码? 最佳答案 像这样重写你的代码:uri=URI.parse(url)result=Net::HTTP.start(uri.host,uri.port){|http|http.get(uri.path)}putsresult.codeputsresult.body这将打印状态码和正文。

  8. .net - 是否有 Ruby .NET 编译器? - 2

    是否有适用于Ruby语言的.NETFramework编译器?我听说过DLR(动态语言运行时),这是否将使Ruby能够用于.NET开发? 最佳答案 IronRuby是Microsoft支持的项目,建立在动态语言运行时之上。 关于.net-是否有Ruby.NET编译器?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/199638/

  9. ruby - 使用 ruby​​ gem net-ssh-multi 同时在多个服务器上执行 sudo 命令 - 2

    在previousquestion中我想出了如何在多个服务器上启动经过密码验证的sshsession来运行单个命令。现在我需要能够执行“sudo”命令。问题是,net-ssh-multi没有分配sudo需要运行的伪终端(pty),导致以下错误:[127.0.0.1:stderr]sudo:sorry,youmusthaveattytorunsudo根据documentation,可以通过调用channel对象的方法来分配伪终端,但是,以下代码不起作用:它会生成上面的“notty”错误:require'net/ssh'require'net/ssh/multi'Net::SSH::Mul

  10. (附源码)vue3.0+.NET6实现聊天室(实时聊天SignalR) - 2

    参考文章搭建文章gitte源码在线体验可以注册两个号来测试演示图:一.整体介绍  介绍SignalR一种通讯模型Hub(中心模型,或者叫集线器模型),调用这个模型写好的方法,去发送消息。  内容有:    ①:Hub模型的方法介绍    ②:服务器端代码介绍    ③:前端vue3安装并调用后端方法    ④:聊天室样例整体流程:1、进入网站->调用连接SignalR的方法2、与好友发送消息->调用SignalR的自定义方法 前端通过,signalR内置方法.invoke()  去请求接口3、监听接受方法(渲染消息)通过new signalR.HubConnectionBuilder().on

随机推荐