对于专业知识面试时的简要回答

前后端分离:

前端后端交互,基本上是基于http+json的形式。后端人员专注于提供数据,更重要职责是维护系统架构的稳定,保证数据的安全。前端人员专注于交互,快速响应UI的变化
双方交互基于http+json接口,后端人员基本只对接口负责,无需负责js和html的代码。前端人员只对界面的展示与交互负责,对于后端http接口如何提供正确的数据无需负责。
前后端分离的核心就是:后台提供数据,前端负责显示。

前后端分离也是有意义的,在提高工作效率、局部的性能提升、降低维护成本、减少后端新人上手的难度、以及提高产品的可拓展性都有其重要意义。

.NET MVC

MVC顾名思义:Model, View, Controller,是UI端分层的三层模式。跟三层架构有着本质区别。

.Net MVC彻底的分离了前后端,以及抽象层结构的依赖注入,横切编程模式。

.Net MVC 为UI端分层框架,是微软在改进WebForm框架的基础上革新的一个轻量级Framework。

它与WebForm不同之处在于,更新了与Web本质上渐行渐远的事件驱动模式

ORM

对象关系映射(英语:Object Relational Mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。简单的说:ORM相当于中继数据。

应用到产品中:

ADO.NET Entity Framework是微软以 ADO.NET 为基础所发展出来的对象关系对应的解决方案。该框架曾经为.NET Framework的一部分,version 6之后从.NET Framework中分离出来。

Dapper是.NET下一个ORM框架,它和Entity Framework不同,属于轻量级的,并且是半自动的。也就是说实体类都要自己写。它没有复杂的配置文件,一个单文件就可以了。

个人觉得它非常好用,Dapper是对SqlMapper.cs类的封装,取代了原来的SqlHelper。优点:

  1. 使用Dapper可以自动进行对象映射!
  2. 轻量级,单文件。
  3. 支持多种数据库。
  4. Dapper原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象。

Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。

ASP.NET Core

ASP.NET Core是一个免费开源且轻量级的Web框架,可跨平台运行。

该框架是一个完整的重写,它将先前单独的ASP.NET MVC和ASP.NET Web API整合到单一编程模型中。

尽管它是一个新的框架,建立在新的Web栈上,但它与ASP.NET MVC具有高度的概念兼容性。 ASP.NET Core应用程序支持并排版本控制,其中运行在同一台机器上的不同应用程序可以以不同版本的ASP.NET Core为目标。 这对于以前版本的ASP.NET来说是不可能的 。

Docker

Docker 容器是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何安装了docker引擎的服务器上(Linux机器、windows机器),也可以实现虚拟化

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。

几乎没有性能开销,可以很容易地在机器和数据中心中运行。

最重要的是,他们不依赖于任何语言、框架包括系统

死锁

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

预防死锁

理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和解除死锁。只要打破四个必要条件之一就能有效预防死锁的发生:

①打破互斥条件:改造独占性资源为虚拟资源,大部分资源已无法改造。

②打破不可抢占条件:当一进程占有一独占性资源后又申请一独占性资源而无法满足,则退出原占有的资源。

③打破占有且申请条件:采用资源预先分配策略,即进程运行前申请全部资源,满足则运行,不然就等待,这样就不会占有且申请。

④打破循环等待条件:实现资源有序分配策略,对所有设备实现分类编号,所有进程只能采用按序号递增的形式申请资源。

Lambda 表达式

Lambda 表达式(lambda expression)是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包。 Lambda表达式的本质是“匿名方法”,即当编译我们的程序代码时,“编译器”会自动将“Lambda表达式”转换为“匿名方法”。

最常见的客户端架构有三种:

  • MVC: Model-View-Controller
  • MVP: Model-View-Presenter
  • MVVM: Model-View-ViewModel

相同部分:

  • View:负责数据可视化的呈现和用户交互,通俗讲就是展示的视图界面。
  • Model:业务逻辑数据的提供者,在面向对象语言中往往是数据实体模型的获取及处理等,一般靠近数据库。
    不同的是,三者采用了不同的形式来将Model和View连接起来。只有真正搞清楚了每一层用途,才能理解模式的原理。

MVVM详解:

ViewModel可以看作是抽象的View,包含了所有的UI逻辑和业务对象类的引用,充分利用Commands(命令)和Behaviors(行为)机制搭建起View和Model之间的桥梁。

其实抛开编程语言和开发平台来讲,MVVM模式的目的都是分层让界面和逻辑分离,也是让项目开发中的UI设计人员和代码开发人员各司其职、互不依赖。那么只要解决好核心的ViewModel层的问题,其他的自然不再话下。对于MVVM模式而言,其核心原则就是:

无论发生任何外部变化,仅操作 ViewModel 中的数据

存储过程

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。

Linq

语言集成查询(Language Integrated Query),发音"link",是微软的一项技术,新增一种自然查询的SQL语法到.NET Framework的编程语言中,当前可支持C#以及Visual Basic .NET语言。2007年11月19日随[.NET Framework](https://baike.baidu.com/item/.NET Framework) 3.5发布了LINQ技术。

包括LINQ to Objects、LINQ to SQL、LINQ to Datasets、LINQ to Entities、LINQ to Data Source、LINQ to XML/XSD等。

ADO.NET Entity Framework

ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案。该框架曾经为.NET Framework的一部分,但version 6之后从.NET Framework分离出来。

SQL

游标

游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次一行或者多行前进或向后浏览数据的能力。

游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标可以被看作是一个查询结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成的一个临时文件,提供了在查询结果集中向前或向后浏览数据、处理结果集中数据的能力。有了游标,用户就可以访问结果集中任意一行数据,在将游标放置到某行之后,可以在该行或从该位置的行块上执行操作。

索引

索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。索引是针对而建立的,它是由数据页面以外的索引页面组成的,每个索引页面中的行都会含有逻辑指针,以便加速检索物理数据。

临时表

临时表是建立在系统临时文件夹中的表,如果使用得当,完全可以像普通表一样进行各种操作,在VFP(Visual FoxPro简称VFP,是Microsoft公司推出的数据库开发软件)退出时自动被释放。

事务

是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transactionend transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

事务是恢复并发控制的基本单位。

触发器

触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行是由事件来触发的。触发器经常用于加强数据的完整性约束和业务规则等。

触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。SQL3的触发器是一个能由系统自动执行对数据库修改的语句。

触发器可以查询其他表,而且可以包含复杂的SQL语句。它们主要用于强制服从复杂的业务规则或要求。例如:您可以根据客户当前的帐户状态,控制是否允许插入新订单。

触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。

触发器与存储过程的唯一区别是触发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行。

此外触发器是逻辑电路的基本单元电路,具有记忆功能,可用于二进制数据储存,记忆信息等。

设计模式六大原则

1,设计模式的目的是为了更好的代码重用,可读性,可靠性,可维护性。

2,常用的六大设计模式

  1. 单一职责原则
  2. 里氏替换原则
  3. 依赖倒置原则
  4. 接口隔离原则
  5. 迪米特原则
  6. 开闭原则

(1)单一职责原则

1该原则针对类来说的,即一个类应该只负责一项职责。

2 遵循单一职责的优点:

  1. 降低类的复杂度,一个类只负责一项职责。
  2. 提高类的可读性,可维护性。
  3. 降低变更引起的风险

(2)里氏替换原则

  1. 换句话说,所有引用基类的地方必须能透明地使用其子类地对象,即子类型对象可以赋值给父类变量。
  2. 由定义可知,在使用继承时,遵循里氏替换原则,在子类中尽量不要重写和重载父类的方法。不要破换整个继承体系,而里氏替换原则就是表达了这一层含义。
  3. 文章有的地方描述的有问题。 里氏替换原则:在使用继承时,子类中尽量不要重定义或覆盖父类的方法。

(3)依赖倒置原则

  1. 高层模块不应该依赖于底层模块,二者都应该依赖于其抽象;抽象不应该依赖细节,细节应该依赖抽象。
  2. 依赖倒置地原则基于这样一个事实:相对于细节地多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。
  3. 在C#中,抽象指的是接口或者抽象类,细节就是具体的实现类。
  4. 依赖倒置的中心思想就是面向接口编程。
  5. 底层模块尽量都要有抽象类或者接口,或者两者都有。高层模块依赖接口,底层模块实现接口,高层类通过接口与底层类发生关系。
  6. 变量的声明类型尽量使抽象类或接口。
  7. 使用继承时遵循里氏替换原则。

(4)接口隔离原则

  1. 客户端不应该依赖于它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。
  2. 说到这里可能会觉得接口隔离原则和之前的单一职责原则很相似,其实不然。一,单一职责注重职责,而接口隔离原则注重对接口的依赖的隔离;二,单一职责是约束类,其次是方法,针对的是程序中的实现和细节;而接口隔离原则约束的是接口,针对的是抽象,程序整体框架的构建。

(5)迪米特法则

  1. 迪米特法则的初衷是降低类之间的耦合,由于每个类都减少了不必要的依赖,因此的确可以降低耦合关系。
  2. 一个对象应该对其他对象保持最少的了解。
  3. 类与类关系越密切,耦合度越大。
  4. 迪米特法则又叫少知道原则,即一个类对自己依赖的类知道的越少越好。就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对除外提供的public方法,不对外泄露任何信息。
  5. 迪米特法则还有个更简单的定义:只与直接朋友通信,什么是直接朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这连个对象之间是朋友关系。耦合方式有很多,依赖、关联、组合、聚合等。其中我们称出现成员变量、方法参数、方法返回值中的类为直接朋友。

(6)开闭原则

  1. 一个软件实体类,模块和函数应该对扩展开发,对修改关闭。用抽象构建框架,用程序实现扩展细节。
  2. 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

三层架构

三层架构就是为了符合“高内聚,低耦合”思想,把各个功能模块划分为表示层(UI)业务逻辑层(BLL)和数据访问层(DAL)三层架构,各层之间采用接口相互访问,并通过对象模型的实体类(Model)作为数据传递的载体,不同的对象模型的实体类一般对应于数据库的不同表,实体类的属性与数据库表的字段名一致。 [1]

三层架构区分层次的目的是为了 “高内聚,低耦合”。开发人员分工更明确,将精力更专注于应用系统核心业务逻辑的分析、设计和开发,加快项目的进度,提高了开发效率,有利于项目的更新和维护工作。

vue

Vue.js是一套构建用户界面的渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。

Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件 。

Vue.js 自身不是一个全能框架——它只聚焦于视图层。因此它非常容易学习,非常容易与其它库或已有项目整合。另一方面,在与相关工具和支持库一起使用时 ,Vue.js 也能完美地驱动复杂的单页应用。

更多面试题请访问以下链接:
.NET面试题网

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值