基础技术概念
WebService是跨编程语言和跨操作系统平台的远程调用技术。
WCF面向服务的分布式编程框架。统一COM和.Net Remoting提供通用,可靠的分布式编程模型。
web api 是构建HTTP服务的轻型框架,覆盖广泛的客户端, RESTful风格
.NET Core 是开源、跨平台框架,构建基于网络连接的现代云应用程序
三层架构:
数据访问层:对数据库的操作
业务逻辑层:对数据业务逻辑处理
界面层:交互界面
目的即为了“高内聚低耦合”
任何一层发生变化都不会影响到另外一层!!!
优点
1 只关注其中一层
2 新的实现替换某一层
3 可重用
4 可维护
5 可扩展
缺点
1 降低性能
2 开发成本高
3 导致联级修改
MVC框架优缺点
视图(View):代表用户交互界面
模型(Model):表示用户对其数据的操作的一个封转
控制器(Controller):控制器可以理解为从用户接收请求,将模型与视图匹配在一起,共同完成用户的请求。
MVC的优点:
1可维护性2 可移植性3 可扩展性4 可重用性
MVC的缺点:
1 增加了系统结构和实现的复杂性。2 视图与控制器间的过于紧密的连接。
3 视图对模型数据的低效率访问。
MVC和三层区别
三层是基于业务逻辑来分的,而mvc是基于页面来分的
三层模式是体系结构模式,MVC是设计模式
三层模式又可归于部署模式,MVC可归于表示模式
LINQ
LINQ,语言集成查询,查询数据库相同的方式操作内存数据。
lambda 是创建委托或表达式树类型的匿名函数。
ef : 支持面向数据的应用程序的技术的ORM框架
ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的相互转换。
Object Relational Mapping O=>表实体 M=>映射关系 R=>数据库.表
EF框架的优点
- 可维护性,易于理解的代码,无需创造大的数据访问层。
- 提供LINQ查询数据库,编译语法检查。
- 跨数据库支持能力强大
- 提升开发效率
EF的缺点
- 性能差(生成Sql脚本阶段),在复杂查询的时候生成的脚本不是很高
- 第一次执行时会有预热,
基础概念
堆和栈的区别
- 值类型在栈上,引用类型在堆上;
- 栈由操作系统管理,变量在作用域完成释放。堆受CLR的GC控制;
- 栈是基于线程的,线程初始有1M的线程栈。堆是基于进程,大小由GC根据运行动态控制;
栈和队列的区别
- 栈先进后出,队列先进先出。
- 栈限在一端插入和删除,队列是一端插入,另一端删除。
- 遍历数据速度不同。栈得开辟临时空间。保持数据一致性。队列基于指针遍历,无需开辟临时空间。
- 应用场景不同; 函数调用和递归实现等;队列包括 消息缓冲器的管理等。
结构体和类的区别
- 结构体是值类型,类是引用类型
- 结构不支持无惨构造函数,不支持析构函数,并且不能有protected修饰;
- 结构常用于数据存储,类class多用于行为;
- class需要用new关键字实例化对象,struct可以不用new关键字;
- class可以为抽象类,struct不支持抽象;
抽象类和接口的区别
- 继承:接口支持多继承;抽象类不能多继承。
- 表达的概念:抽象类是一类事物的高度聚合,而接口定义行为规范
- 方法实现:抽象类中的方法,可以给出实现部分;接口不能给出实现部分,不能加修饰符。
- 子类重写:抽象类定义的抽象方法,可以不用重写;接口类定义的方法必须重写
- 新增方法的影响:在抽象类中,新增方法的话,继承类中可以不用处理;接口来说,修改继承类提供新定义的方法。
- 接口可以作用于值类型(枚举可以实现接口)和引用类型;抽象类只能作用于引用类型。
- 接口不能包含字段和已实现的方法,接口只包含方法、属性、索引器、事件的签名;抽象类可以定义字段、属性、包含有实现的方法。
string与stringbuilder的区别
- string 对象时恒定不变,任何改变都会产生新的字符串。stringBuider是可变的
- 少量字符串连接使用string,大量使用stringBuider
remoting和webservice的区别
- Remoting灵活定义协议
- Remoting不是标准,而Web Service是标准。
- Remoting通过Windows服务启动,iis部署,Web Service在IIS启动。
- 在VS中对Web Service的调用进行封装。
- remoting用于framework之下,WebService是平台独立的,跨语言
new 关键字用法(*)
- 运算符 用于创建对象和调用构造函数。
- 修饰符 用于向基类成员隐藏继承成员。
- 约束 用于在泛型声明中约束可能用作类型参数的参数的类型。
委托
委托是封装方法的引用类型,把方法当指针传递,面向对象、类型安全的;
事件是特殊的委托,通过多播委托的方式被多个方法订阅,当事件触发,响应处理方法将会被引用(概念)
委托的实质:
- 委托定义了方法的参数和返回类型
- 通过委托构造函数,可以把符合定义的方法赋值给委托
- 调用委托的实例方法Invoke执行了方法
事件特殊:
- 不可以在事件类外直接调用事件方法
- 不能对事件对象赋值,只能+=
GC
GC是垃圾回收(Garbage Collect)的缩写,工作原理就是遍历托管堆中的对象,标记哪些被使用对象(那些没人使用的就是所谓的垃圾),然后把可达对象转移到一个连续的地址空间(也叫压缩),其余没用的对象被回收掉。
GC是什么? 为什么要有GC?
GC是垃圾收集器。 ,因为垃圾收集器会自动进行内存管理。GC只能处理托管内存资源的释放,对于非托管资源则手工回收,一个例子就是FileStream或者SqlConnection需要程序员调用Dispose进行资源的回收。
要请求垃圾收集,可以调用下面的方法:GC.Collection()
索引器与属性
索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数
索引器与属性的区别:
- 索引器以 this 标识,而属性用名称标识,
- 索引器可以重载,而属性不能重载。
- 索引器不用static 声明,而属性可以。
以字符串作为下标,对索引器进行存取:
仅当成员(属性or索引器)既有get访问器也有set访问器时,其访问器才能有访问修饰符
重写,覆盖
覆盖:用 new 修饰与父类同名的方法。
重写:用override修饰与父类同名虚方法。
用 virtual 修饰的方法,叫虚方法。可以在子类中用override 声明同名的方法。
override(重写) (发生在子类与父类中)
- 方法名、参数、返回值相同。
- 不能缩小父类方法的访问权限。
- 不能抛出比父类方法更多的异常。
- 存在于父类和子类之间。
- 方法被定义为final不能被重写。
overload(重载) (发生在同一个方法中)
- 参数类型、个数、顺序至少有一个不相同。
- 不能重载只有返回值不同的方法名。
- 存在于父类和子类、同类中。
重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要。重载(overload)是面向过程的概念。
Override 是进行基类中函数的重写。Override是面向对象的概念
params 是C#的关键字, 可变长参数,是在声明方法时参数类型或者个数不确定时使用
CLR(公共语言运行库)的作用
高级语言通过解释器,解释成IL的字节码,最后通过CLR 特定的JIT(实时编译器)编译成机器码。
C# 是强类型语言;因此每个变量和对象都必须具有声明类型。
C#可否对内存进行直接的操作
C#可以直接对内存进行操作。但是默认情况下,为了保持类型安全,C#不支持指针运算。不过,通过使用 unsafe 关键字,可以定义可使用指针的不安全上下文。
fixed在非安全代码下用到。负责对指针所指向的“动态分配内存成员”简称“对象”进行锁定
抽象类可继承实体类,但前提是实体类必须有明确的构造函数
try{} finally{} return 先执行 标记返回值, 再执行finally
其他:
Remoting
定义:是分布处理方式, 提供处理远程对象的方法
作用:允许对象通过应用程序域与另一对象进行交互的框架
工作原理:服务器端向客户端发送进程编号,程序域编号,确定对象位置。
实现1 注册通道2 注册远程对象3 注销通道
优点: 1、分布式开发 2、Tcp通道快 3、接近于本地调用对象
4、保持对象的状态 5、没有应用程序限制,可以是,iis,windows等承载远程对象
缺点: 1、非标准的应用因此有平台限制 2、脱离iis的话需要有自己的安全机制
Web 服务基于消息传递提供简单模型,
Remoting 提供支持通过值或引用传递对象、回调,生命周期管理等
Redis是的Key/Value的内存数据库:
单链表是链式存取的,用地址任意的存储单元存放数据元素。
DataReader和DataSet的异同?
- DataReader 一次加载一条数据,始终占有数据库连接
- DataSet 一次加载到内存,抛弃数据库连接
remoting和webservice两项技术的理解
WebService利用HTTP,穿透防火墙。而Remoting利用TCP/IP,二进制传送提高效率。
高并发百度解决方案
1缓解数据库读取压力:使用Cache, Redis内存数据库, MemCached分布式缓存
2缓解Web服务器压力:将附件通过FTP上传到另一个地方
3 负载均衡:服务器管理添加网络负载均衡。
4 缓解数据库压力:读写分离
参考文献:
事件:https://www.cnblogs.com/joeymary/p/8486358.html
C# 中的委托和事件(详解) : https://blog.youkuaiyun.com/u011555996/article/details/53141717