栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

c# .Net面试总结

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c# .Net面试总结

1. neo4j和sqlserver区别

(由于简历中写到neo4j项目)
(1)neo4j是更注重关系的非关系型数据库;
(2)支持以图的方式建立数据模型来保存数据与数据之间的关系;
(3)查询速度更快,传统数据库多表联查要查好几张表以及关联表,而图数据库只需查所需节点以及它们之间的关系,速度比传统数据库快许多。
(4)可实现数据分区和数据联邦(解决数据孤岛)功能。
例子:比如人与人之间的关系,债主和欠债人之间的关系包括欠债人欠了多少钱,利息多少,如果用普通数据库存各种各样的关系需要一一定义,而图数据库可直接以类似绘图方式建立人与人之间关系,非常方便。

2. new除了新建对象之外还有什么功能?

new运算符除了可以分配内存,还可以调用构造函数。
构造函数是一种特殊的方法,主要用于创建对象时初始化对象。
c:malloc()

3. 如何理解委托?

C#中的委托是一种引用类型,表示具有相同方法签名的方法的引用。类似于函数指针,也就是说它们是指向函数的“引用”,更加安全。 事件不是委托,是委托类型的变量。
委托是一种托管方法的数据结构,是一种引用类型,是对方法的引用,通俗说,就是一个方法办不到的事,委托另一个方法去做,事件也是委托。
委托分为方法委托,多播委托(一个委托中注册多个方法),匿名委托(使用匿名方法注册在委托上)。
委托声明关键字是delegate。

委托是否可以有返回值?
委托可以是带有返回值的方法,但多于一个带返回值的方法被添加到委托链中时,程序员需要手动的调用委托链上的每一个方法,否则委托使用者将只能得到委托链上最后一个被执行方法的返回值。

4. StringBuilder

String对象是不可更改的,而StringBuilder对象是动态对象,允许扩充它所封装的字符串的数量,但是可以为它可容纳的最大字符串数指定一个最大值。
当一个循环中将许多字符串连接在一起时,使用StringBuilder类提升性能。
append,insert,replace,remove,可枚举类型。
StringBuilder类型变量会初始化一段长度,供后续对该变量进行增加。
当然也可以手动定义其长度,其缺点是需要较为精确估算出StringBuilder类型变量的长度,否则若在使用中实际builder长度超出了定义的长度,会自动开辟一段新的StringBuilder空间,并将原先的数据赋值给新的空间,旧的地址就变成了垃圾。

5.类的定义,抽象类和类的区别

类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。
(1)抽象类不能实例化,接口是抽象类的变体;
(2)抽象类声明时要使用abstract关键字来定义,而普通类可以是public , private 等;
(3)抽象类里的方法不能有方法的主体, 只能是方法的声明,而普通类可以有方法的声明;
(4)抽象类被继承时、子类必须实现它的所有方法,而普通类不需要;
(5)抽象类的方法在扩展性和延伸性方面要比普通类的好;
(6)抽象类可以应用多态,但是普通类不可以。

接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。
人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它。

6. 什么是哈希?

哈希又名散列、杂凑,把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。
使用Hash算法可以提高存储空间的利用率,可以提高数据的查询效率,也可以做数字签名来保障数据传递的安全性。
散列表的装填因子定义为:α= 填入表中的元素个数/散列表的长度。
(装填因子越小越好)
衡量标准是平均查找长度。
散列方法:
(1)直接寻址法 y=ax+b(2)平方取中法 (3)除留余数法等
冲突解决方法:
(1)再散列法(2)链地址法(拉链法)(3)建立一个公共溢出区

7. B+树特点

特点:
(1)非叶子节点仅具有索引作用,也就是说,非叶子节点只能存储Key,不能存储value;
(2)树的所有叶节点构成一个有序链表,可以按照key排序的次序依次遍历全部数据。

B+树比B树更适合实际应用中作为操作系统的文件索引和数据库索引:
(1)B+树的磁盘读写代价更低
非叶子节点包含的信息更少。如果把同一节点的所有信息放在一个磁盘块中,则可以比B树放入更多的关键码。一次读入内存当中(读一个块)就能读入更多的关键码,所以降低了磁盘I/O总数 。
(2)查询效率更加稳定
对任何关键字的查找都必须从根节点走到叶子节点,路径长度相同,所以对每条数据的查询效率相当。
(3)B树在提高磁盘I/O性能的同时并没有解决元素遍历效率低下的问题。而B+树因为叶子节点有链指针存在,所以遍历叶子节点即可以实现对整棵树的遍历。而在数据库中基于范围的查询是非常频繁的,B+树就能更好的支持。

用途:
在操作数据库时,我们为了提高查询效率,可以基于某张表的某个字段建立索引,那其实这个索引就是B+树这种数据结构实现的。

8. Entity Framework和Linq

LINQ(读音link)代表语言集成查询(Language Integrated Query),是.NEt框架的扩展,是一系列直接将查询功能集成到 C# 语言的技术统称。
EF是微软公司为 .NET 开发人员推出的一个 ORM 框架。
EF构建在provider架构之上。当开发者使用C#创建一个LINQ查询时,EF框架引擎会连接一个provider,将它转换成实际的SQL语句,最后发往数据库。任何给定的provider都是连接Entity Framework和一个特定的RDBMS的桥梁。一旦该provider执行了最终的SQL命令,结果就被EF物质化到.NET对象中。Data reader就是为了这个目的。理解EF构建于ADO.NET之上非常重要,因此,EF也使用了诸如connection,command,和data reader的概念。谈到数据持久化,也就是插入,更新和删除功能,插入时,开发者将一个实体类的实例添加到数据库上下文中。相似地,之前添加到上下文中的实例被标记为changed或deleted,就会产生对数据库即将执行更新和删除的语句。EF会检查上下文中的每个对象,再次使用provider来创建RDBMS特定的insert,update,或delete命令。
Linq to Sql批量添加数据:
DBContext db=new DBContext();//实例化上下文
List

list=new List
();//泛型集合实体类型,注意哦一定要跟你添加的实体一样的否则是添加不了的
db.table.InsertAllOnSubmit(list);//其实他这个方法db.table.InsertAllOnSubmit
(list)的

9. git拉取分支,合并分支,冲突解决

git pull:是从远程获取最新版本到本地,并自动merge;
git push:是将本地库中的最新信息发送给远程库;
git commit:是将本地修改过的文件提交到本地库中;
出现冲突用reset回退到之前版本再重新提交。
$ git reset –hard HEAD~3 # 回退上上上一个版本
$ git reset –hard bae128 # 回退到某个版本回退点之前的所有信息。
$ git reset --hard origin/master # 将本地的状态回退到和远程的一样

6. 何为值类型,何为引用类型,区别是什么?

值类型直接存储数据,当值类型变量声明后不管是否已经赋值都会为其分配内存空间。引用类型持有数据的地址引用,当声明一个引用类型的时候只在栈中分配了用于容纳数据存储地址的空间,并没有为其在堆上分配存储数据的空间,只有创建引用类型实例的时候才会在对上分配数据存储空间,并将这个空间地址保存到栈上分配的数据存储地址中。一般来说操作引用类型就是对指针进行操作,并非对引用类型本身进行操作,但是值类型则是对其本身进行操作。

10. 泛型

我们在编写程序时,经常遇到两个模块的功能非常相似,只是一个是处理int数据,另一个是处理string数据,或者其他自定义的数据类型,但我们没有办法,只能分别写多个方法处理每个数据类型,因为方法的参数类型不同,所以此时需要泛型。
泛型方法是在调用方法的时候指明泛型的具体类型。

11. Web API验证

常见的认证方式:
(1)FORM身份验证
(2)集成WINDOWS验证
(3)Basic基础认证
(4)Digest摘要认证

Basic基础认证:
1、登录的时候验证用户名和密码,如果验证通过,则将用户名和密码按照一定的规则生成加密后的票据信息Ticket,然后将Ticket传递到前端。
2、如果登录成功,前端定义一个全局的变量接收API接口返回的Ticket信息。
3、前端界面再次发起ajax请求后端API接口的时候,将Ticket信息加入到HTTP请求的Head里面,将Ticket信息随着http请求一起发送到后端API接口。
4、在后端的WebApi服务中定义一个类,该类继承自AuthorizeAttribute类,然后重新父类里面的OnAuthorization方法,在OnAuthorization方法里面,通过actionContext参数取得http请求的Head,从Head里面可以获取前端传递过来的Ticket信息。将Ticket解密得到用户名和密码,然后验证用户名和密码是否正确。如果正确,表示验证通过。如果不正确,则返回401未授权的错误。

12. 集合

集合(Collection)类是专门用于数据存储和检索的类。这些类提供了对栈(stack)、队列(queue)、列表(list)和哈希表(hash table)的支持。大多数集合类实现了相同的接口。

13. C#中类成员的访问修饰符有哪些?

C#中的访问修饰符有以下六种:

public:同一程序集和和引用该程序集的所有代码都可访问。public成员可访问级别由该类型本身的级别决定。
private:只有同一类中的成员可以访问
protected:同一类和派生类中的代码可以访问
internal:同一程序集中的代码可以访问。
protected internal:同一程序集或不同程序集中的派生类可以访问。
private protected:同一程序集中的派生类可以访问。

14. ==和equals的区别

==比较的是两个对象的地址; equals比较的是两个对象的内容.

15. sleep和wait区别

sleep和wait都是使线程暂时停止执行的方法,但它们有很大的不同。
①. sleep是线程类Thread 的方法,它是使当前线程暂时睡眠,可以放在任何位置。
而wait是Object类的方法,它是使当前线程暂时放弃对象的使用权进行等待,必须放在同步方法或同步块里。
②. Sleep使用的时候,线程并不会放弃对象的使用权,即不会释放对象锁,所以在同步方法或同步块中使用sleep,一个线程访问时,其他的线程也是无法访问的。
而wait是会释放对象锁的,就是当前线程放弃对象的使用权,让其他的线程可以访问。
③. 线程执行wait方法时,需要另一个线程调用notify进行唤醒。
而sleep只是暂时休眠一定时间,时间到了之后,自动恢复运行,不需另外的线程唤醒。

16. 三种循环方法计算1-2+3-4+5-6+…-100的值

(1)while循环 先判断(2)do-while循环 先do再判断(3)for循环 循环次数固定

17. class和struct的区别?

Class可以被实例化,属于引用类型,而Struct属于值类型。

18. 面向对象的三大特征是什么?/面向过程和面向对象的区别

封装,继承,多态;
面向过程和面向对象都是解决问题的逻辑方法,分析问题既可以用面向对象的方法 来思考,也可以用面向过程方法来解决,但两者还是有一定区别:
面向过程:是分析问题并解决问题所需要的步骤,强调是解决问题的步骤。可以先定义多个函数,在使用的时候逐步调用函数即可;
面向对象:是把问题分解成多个对象,强调的是解决问题的行为表现。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/979860.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号