.NET面试题

什么是webservice

Web Service技术, 能使得运行在不同机器上的不同应用相互交换数据或集成。

简述三层架构

bll业务逻辑层,进行业务处理
dll数据访问层,进行数据访问
ui表现层,进行数据展示

重写和重载

重写:参数和返回值不变,核心重写
重载:参数或返回类型不同,每个重写的方法都必须有一个唯一的参数列表

对称加密和非对称性加密差异

对称加密:加密与解密使用相同的秘钥,对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。对称加密通常使用的是相对较小的密钥,一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越慢。
非对称加密:非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。目前最常用的方式是RSA

数据库优化的方式

1.sql及索引的优化
2.合理的数据库设计 分割表,保留冗余字段,增加派生列,合理使用约束,合适的字段类型,合理使用索引等
3.硬件优化(内存)
4.分表
5.读写分离
6.缓存 少用自带函数,修改字段尽量修改部分字段,不要全部更新,尽量使用数字类型字段,查询尽量用具体字段,不要用*查询,表与表可以用冗余字段连接,比直接用join有更好的性能,尽量不要全表扫描

存储过程

组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效
在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升

一.创建存储过程

CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName> 
	-- Add the parameters for the stored procedure here
	<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>, 
	<@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- Insert statements for procedure here
	SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
END

二.调用存储过程

1.基本语法:call sp_name() 注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递

三.删除存储过程

1.基本语法: drop procedure sp_name//
2.注意事项 (1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程

四.其他常用命令

1.show procedure status 显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等
2.show create procedure sp_name 显示某一个mysql存储过程的详细信息

触发器

用来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行

事务

保持逻辑数据一致性与可恢复性,必不可少的利器 事务具有原子性,一致性,隔离性,持久性(ACID)
A原子性:事务必须是一个自动工作的单元,要么全部执行,要么全部不执行。
C一致性:事务把数据库从一个一致状态带入到另一个一致状态,事务结束的时候,所有的内部数据都是正确的。
I隔离性:并发多个事务时,一个事务的执行不受其他事务的影响。
D持久性:事务提交之后,数据是永久性的,不可再回滚,不受关机等事件的影响。

--开启事务
begin tran
--错误捕捉机制,看好啦,这里也有的。并且可以嵌套。
begin try  
   --语句正确
   insert into lives (Eat,Play,Numb) values ('猪肉','足球',1)
   --Numb为int类型,出错
   insert into lives (Eat,Play,Numb) values ('猪肉','足球','abc')
   --语句正确
   insert into lives (Eat,Play,Numb) values ('狗肉','篮球',2)
end try
begin catch
   select Error_number() as ErrorNumber,  --错误代码
          Error_severity() as ErrorSeverity,  --错误严重级别,级别小于10 try catch 捕获不到
          Error_state() as ErrorState ,  --错误状态码
          Error_Procedure() as ErrorProcedure , --出现错误的存储过程或触发器的名称。
          Error_line() as ErrorLine,  --发生错误的行号
          Error_message() as ErrorMessage  --错误的具体信息
   if(@@trancount>0) --全局变量@@trancount,事务开启此值+1,他用来判断是有开启事务
      rollback tran  ---由于出错,这里回滚到开始,第一条语句也没有插入成功。
end catch
if(@@trancount>0)
commit tran  --如果成功Lives表中,将会有3条数据。

--表本身为空表,ID ,Numb为int 类型,其它为nvarchar类型
select * from lives

多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写。

游标

游标是SQL
Server的一种数据访问机制,它允许用户访问单独的数据行。用户可以对每一行进行单独的处理,从而降低系统开销和潜在的阻隔情况,用户也可以使用这些数据生成的SQL代码并立即执行或输出。

游标的优点  SELECT
语句返回的是一个结果集,但有时候应用程序并不总是能对整个结果集进行有效地处理,游标便提供了这样一种机制,它能从包括多条记录的结果集中每次提取一条记录

索引

优点

1.大大加快数据的检索速度;
2.创建唯一性索引,保证数据库表中每一行数据的唯一性;
3.加速表和表之间的连接;
4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。

缺点

1.索引需要占物理空间。
2.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度

视图

一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

-- 语法
create view V_demo as 查询语句
 ...

final、finally与finalize的区别

final:以用来修饰类,方法和变量 修饰类时:该类不能被其他类继承(所有成员方法都会隐式定义为final方法)
修饰方法时:1.把方法锁定,以防止继承类对其进行更改,2. 此方法不能被重写
修饰变量时:表示常量,只能被赋值一次,此后值不在改变,类似c++中的const
finally:异常处理中无论是否有异常都会执行改括号内的内容 finalize:object中定义的方法 由垃圾收集器销毁对象时调用

事件是一种委托吗?什么是委托?什么是事件?

事件不是委托,可以理解为他是委托的一个实例 委托,类似于C++中的函数指针,将方法当做参数传递

Redis

什么是redis? 用c语言编写的,开源的,非关系型数据库,与传统数据库不同,将数据存放到内存中,所以读写速度非常快,因此被广泛应用到缓存中

redis有几种数据类型 可以存储键和物种不同类型的值之间的映射,键的类型只能是字符串,值支持五种数据类型:字符串、集合、散列表、有序集合

redis优缺点: 读写性能优异:读110000次/秒,写81000次/秒 支持数据持久化,支持AOF和RDB两种方式 支持事务
数据结构丰富 支持主从复制,主机会自动将数据同步到从机,可进行读写分离

缺点: 数据容量受到物理内存得限制,不能用做海量数据的高性能读写,因此redis主要作用在数据量较小的高性能操作和运算上,不具备自动容错和回复,主机从机宕机都会导致前端部分请求失败,需要等待机器重启或者手动切换前端ip才能恢复

应用场景 计数器 缓存 会话缓存 全页缓存

IOC 控制反转

面向对象编程的一种设计原则,基于反射机制及工厂模式实现,用来降低计算机代码之间的耦合度,最常见的方式就是依赖注入

DI 依赖注入 a调用b a不需要主动获取a 而是由其他人将b送上来,依赖注入是控制反转的一种实现方式,还有一种方式叫依赖查找

采用依赖注入技术之后,A的代码只需要定义一个私有的B对象,不需要直接new来获得这个对象,而是通过相关的容器控制程序来将B对象在外部new出来并注入到A类里的引用中。而具体获取的方法、对象被获取时的状态由配置文件(如XML)来指定。

如何应对高并发?(其实考核的是延伸)

首先得定位问题,找到并发的原因对症下药。(服务器硬件太差,业务逻辑太复杂—解决,举例子)

一般瓶颈都在数据库,常规的索引优化,执行计划分析,然后还有缓存,此外,读写分离也是标配。 就拿应用服务器说事儿,这个是业务核心聚集地
集群—负载均衡—什么策略----解决用户持久化 缓存是系统优化的第一步,各种缓存

高性能架构

1、什么是高性能架构?
用户:响应速度快,流畅 开发者:响应时间,吞吐量,开发能力,稳定性 运维:资源利用率

2、衡量标准
响应时间,并发数,吞吐量,硬件使用情况

3、怎么做到高性能架构? 测试定位:性能测试,负载测试,压力测试,稳定性测试,找出瓶颈,才能针对性的去优化
前端性能优化:压缩(js压缩,css压缩,图片压缩),延迟加载,合并(合并图片,合并请求),缓存(CDN缓存,客户端缓存)
后端优化:缓存,多线程,异步化,集群,数据库优化 存储优化:机械硬盘到ssd,Nosql,分布式存储

4、怎么看到高性能架构? 不是性能越高越好,考虑成本,不是追求单次请求的速度,而是平均的速度,而且性能还跟规模并发量相关。

高可用架构

1、什么是高可用架构 能够正常提供服务的时间比例 对外是服务承诺(百度,微信,腾讯课堂,淘宝) 对内是考核指标(偷偷恢复,甩锅,免得扣钱)

微服务架构概念:Microservice,架构的概念/风格,希望将系统中的各个功能分解到独立的服务里面来完成,这样可以起到对解决方案的解耦----UI–BLL(用户/订单/财务)–DAL
把一个独立的大型应用程序拆分成N个服务合作完成

单体式开发优缺点:
优点:开发简单-集中管理 不会重复开发,没有分布式的管理和损耗
缺点:不好维护,升级很难,扩展性不足,无法应对现代化的迭代节奏,

微服务架构 特征&标准

1 一组独立的服务来组装系统
2 运行在独立的进程,单独部署
3 团队管理–项目分工
4 分布式管理—
5 隔离–

SOA和微服务的差异

1 SOA是为重用,微服务架构是为了重写 2 SOA更水平,微服务是垂直的 3 SOA自上而下,微服务自下而上

POP面向过程编程

符合逻辑思维,线性的处理问题—无法应对复杂的系统

OOP面向对象编程

万物皆对象,对象交互完成功能,功能叠加成模块,模块组成系统,去搭建复杂的大型软件系统

AOP面向切面编程

(Aspect)在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程.
AOP是一种编程思想,是OOP思想的补充 正是因为能够动态的扩展功能,所以在程序设计时就可以有一下好处:
1、聚焦核心业务逻辑,权限/异常/日志/缓存/事务,通用功能可以通过AOP方式添加,程序设计简单。
2、功能动态扩展,集中管理,代码复用,规范化。

实现AOP的多种方式

1、装饰器模式/代理模式—静态实现
2、动态实现—Remoting/Castle(Emit)
3、静态织入—PostSharp(收费)–扩展编译工具,生成的加入额外代码 4、依赖注入容器的AOP扩展
5、MVC的Filter–特性标记,然后该方法执行前/后就多了逻辑,invoker调用中心–负责反射调用方法–检查特性–有则执行额外逻辑
6、Unity

什么叫分布式部署?

通过两台或以上的服务器发布项目

如何防止IIS终止运行后停止服务?

在vs中工具》选项》调试》编辑并继续中取消选中即可

跨域访问

context.Response.AddHeader("Access-Control-Allow-Origin", "*");

ORM框架

一、ORM简介

对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法。

这种方案存在以下不足:
1.持久化层缺乏弹性。一旦出现业务需求的变更,就必须修改持久化层的接口
2.持久化层同时与域模型与关系数据库模型绑定,不管域模型还是关系数据库模型发生变化,毒药修改持久化曾的相关程序代码,增加了软件的维护难度。
ORM提供了实现持久化层的另一种模式,它采用映射元数据来描述对象关系的映射,使得ORM中间件能在任何一个应用的业务逻辑层和数据库层之间充当桥梁。Java典型的ORM中间件有:Hibernate,ibatis,speedframework。

ORM的方法论基于三个核心原则:   ·
简单:以最基本的形式建模数据。   
传达性:数据库结构被任何人都能理解的语言文档化。   
精确性:基于数据模型创建正确标准化了的结构。

二、ORM的概念

让我们从O/R开始。字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和用户界面层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。

当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。你在DAL中写了很多的方法来读取对象数据,改变状态对象等等任务。而这些代码写起来总是重复的。

ORM解决的主要问题是对象关系的映射。域模型和关系模型分别是建立在概念模型的基础上的。域模型是面向对象的,而关系模型是面向关系的。一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段。

ORM技术特点:
1.提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。
2.ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。
3.降低开发错误率

三、ORM的优缺点

ORM的缺点是会牺牲程序的执行效率和会固定思维模式。
从系统结构上来看,采用ORM的系统一般都是多层系统,系统的层次多了,效率就会降低。ORM是一种完全的面向对象的做法,而面向对象的做法也会对性能产生一定的影响。
在我们开发系统时,一般都有性能问题。性能问题主要产生在算法不正确和与数据库不正确的使用上。ORM所生成的代码一般不太可能写出很高效的算法,在数据库应用上更有可能会被误用,主要体现在对持久对象的提取和和数据的加工处理上,如果用上了ORM,程序员很有可能将全部的数据提取到内存对象中,然后再进行过滤和加工处理,这样就容易产生性能问题。
对对象做持久化时,ORM一般会持久化所有的属性,有时,这是不希望的。
但ORM是一种工具,工具确实能解决一些重复,简单的劳动。这是不可否认的。但我们不能指望工具能一劳永逸的解决所有问题,有些问题还是需要特殊处理的,但需要特殊处理的部分对绝大多数的系统,应该是很少的。

EF(Entity Framework 实体框架)是ORM的一种 微软出品
EF优点:开发效率提高、错误率降低 EF缺点:执行复杂查询效率不高

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.NET面试题及答案详解主要涉及以下几个方面:基础知识、框架、语言特性、数据库操作、多线程等。 首先,针对基础知识的问题,可能会问到.NET是什么、.NET框架的组成部分、CLR是什么、以及C#和VB.NET的区别等。面试者可以回答.NET是一个面向对象的软件开发框架,包括CLR、FCL、ASP.NET等组成部分,CLR是公共语言运行库,C#和VB.NET都是.NET平台上的开发语言,其中C#更加常用。 其次,针对框架的问题,面试官可能会询问ASP.NET MVC和ASP.NET Web Forms的区别、Entity Framework的作用和优势、以及WCF和Web API的应用场景等。面试者应该了解ASP.NET MVC是一种基于模型-视图-控制器的开发模式,而Web Forms是一种传统的页面式开发模式;Entity Framework是.NET下的对象关系映射框架,简化了数据库操作;WCF用于构建分布式应用程序,而Web API主要用于构建RESTful服务。 此外,还可能会涉及到语言特性,例如面向对象的特性、委托和事件的使用、LINQ的特点等。面试者应该对这些概念有清晰的理解,并能够举出实际应用的例子。 另外,针对数据库操作和多线程方面的问题,面试官可能会考察ADO.NET的使用、并发编程、以及异步编程等。面试者需要熟悉ADO.NET的各种操作方式,以及多线程和异步编程的相关知识。 总之,针对.NET面试题及答案的详解需要面试者全面了解.NET相关的知识点,并能够结合实际应用进行深入阐述,展现出自己的专业能力和经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值