当前位置: 首页 > news >正文

医院网站建设情况汇报查排名网站

医院网站建设情况汇报,查排名网站,北京网站建设有哪些公司好,网站素材网站文章目录1. 什么是 ASP.net core2. .net 术语3. 托管资源 和 非托管资源4. GC 和 垃圾回收5. .net中所有类的基类6. 如何实现对象的深拷贝7. 依赖注入,为什么使用依赖注入8. IOC容器的注入方法9. ASP.net core 中 服务生命周期10. scoped的 service 可以注入到 sing…

文章目录

    • 1. 什么是 ASP.net core
    • 2. .net 术语
    • 3. 托管资源 和 非托管资源
    • 4. GC 和 垃圾回收
    • 5. .net中所有类的基类
    • 6. 如何实现对象的深拷贝
    • 7. 依赖注入,为什么使用依赖注入
    • 8. IOC容器的注入方法
    • 9. ASP.net core 中 服务生命周期
    • 10. scoped的 service 可以注入到 singleton的 service中吗
    • 11. AOP?
    • 12. jwt token 的原理
    • 13. asp.net 中 middleware的概念
    • 14. unmanaged types
    • 15. unmanaged code, IDisposable
    • 16. unsafe code
    • 17. 值类型和引用类型
    • 18. 装箱和拆箱
    • 19. string a="" 和 string a = null 的 区别
    • 20. int 和 System.Int32
    • 21. int 是 System.Int32,最终也继承自object,为什么是值类型
    • 22. string 和 System.String
    • 23. string具有值类型的表现,为什么是引用类型
    • 24 设计模式 设计原则
    • 25 LockMethod(20)会死锁吗,竟然是不会的
    • 26 await 和 task.wait
    • 28.泛型?
    • 28.泛型约束
    • 29 泛型 为什么可以减少装箱拆箱的损耗


1. 什么是 ASP.net core

微软的 开源的 跨平台的 Web框架。比起asp.net更容易配置/模块化/扩展。

2. .net 术语

1. CLR,公共语言运行时(Common Language Runtime)
2. CIL,公共中间语言(Common Intermediate Language)
3. CTS,通用类型系统(Common Type System)
4. CLS,公共语言规范(Common Language Specification)
5. CLI,公共语言基础架构(Common Language Infrastructure)
6. BCL,基础类库(Base Class Library)
7. FCL,框架类库(Framework Class Library)
8. JIT,是.Net边运行边编译的一种机制(Just In Time)

3. 托管资源 和 非托管资源

1. 托管资源: 由CLR管理分配和释放的资源,也就是我们直接new出来的对象;(公共语言运行时的垃圾回收器回收托管对象使用的内存)。
2. 不受CLR控制的资源,也就是不属于.NET本身的功能,往往是通过调用跨平台程序集(如C++)或者操作系统提供的一些接口,比如Windows内核对象、文件操作、数据库连接、socket、Win32API、网络等。

4. GC 和 垃圾回收

GC:.NET Framework 的垃圾回收器管理应用程序的内存分配和释放

工作方式:每次您使用 new 运算符创建对象时,运行库都从托管堆为该对象分配内存。只要托管堆中有地址空间可用,运行库就会继续为新对象分配空间。但是,内存不是无限大的。最终,垃圾回收器必须执行回收以释放一些内存。垃圾回收器优化引擎根据正在进行的分配情况确定执行回收的最佳时间。当垃圾回收器执行回收时,它检查托管堆中不再被应用程序使用的对象并执行必要的操作来回收它们占用的内存。

.NET 的垃圾回收器管理应用程序的内存分配和释放。 每当有对象新建时,公共语言运行时都会从托管堆为对象分配内存。 只要托管堆中有地址空间,运行时就会继续为新对象分配空间。 不过,内存并不是无限的。 垃圾回收器最终必须执行垃圾回收来释放一些内存。 垃圾回收器的优化引擎会根据所执行的分配来确定执行回收的最佳时机。 执行回收时,垃圾回收器会在托管堆中检查应用程序不再使用的对象,然后执行必要的操作来回收其内存。

5. .net中所有类的基类

Object

6. 如何实现对象的深拷贝

1. 实现一个方法来new一个新的对象,对其中的引用类型属性全部new出来,值类型的对应旧对象依次赋值。2. 序列化成json等格式,再反序列化。

7. 依赖注入,为什么使用依赖注入

依赖注入将对象的生命周期交给DI框架来管理,在使用这些对象的时候,不需要new出来,而是直接从container中获取,从而降低了耦合性,降低了依赖,

使用依赖注入我们可以很好的管理类跟类之间的依赖,在我们设计应用程序的时候遵循这几原则,确保代码的可维护性和扩展性;另外在Core的架构中依赖注入提供了对象创建和生命周期管理的核心能力,各个组件之间的相互协作也是由依赖注入框架来实现的。

8. IOC容器的注入方法

1. 构造函数注入,在构造函数中将服务已参数的方式注入到类中。
2. 方法注入,通过指定的方法将服务实例传入类中。
3. 属性注入,通过设置实例到属性将服务实例注入到类中。DI 容器暂不支持该注入方式(autofac支持)。

9. ASP.net core 中 服务生命周期

1. Singleton 单例的,注册时创建,永久存在,相当于静态类,适合使用频繁,工具类类型的service。
2. Scoped 每个request创建一次实例,单个reqest之中在不同地方多次请求时返回的是同一个实例。适合大多数业务service。
3. Transient 同一request中的每次请求也会创建实例。适合轻量级的,无状态的service。

10. scoped的 service 可以注入到 singleton的 service中吗

通过构造函数注入的话是不被允许的,因为singleton的service在注册时需要被创建,而scoped service在此时并不存在实例,所以无法被注入到singleton的service中。 短生命周期的无法被注入到长生命周期的service中。

通过方法注入的话,可以在singlton中注入 IServiceScopeFactory/IServiceProvider,通过create scope,在cope中通过serviceProvider来request相应的scoped service。

11. AOP?

AOP(Aspect Oriented Programming),即面向切面编程。采用“横切”的思想,将软件系统的系统功能和业务功能分开。

常用的比如:
1. 缓存,http request 过来之后,先尝试查找缓存。
2. 验证,http request过来之后,立即对request进行验证。
3. 日志, http请求过来之后和出去之前,对request和response记录日志。

可以通过filter或者其他来实现。

12. jwt token 的原理

json web token,由server端生成,返回给前端,前端的request header中携带token。
token由三部分构成,头部header,荷载payload,签名signature。
header和payload是base64加密的可以被解析出来,signature指定盐值或者私钥指定加密算法来对前两部分的base64码加密,类似于校验和,密码等,server通过该signature来判断是否是合法token。
常用加密算法 SHA256, RS256, RSA.

13. asp.net 中 middleware的概念

位于request和 response之间的 用来出里request或者修改response的这样的组件。可以串联执行,通过next方法来进入下一个middleware的处理,next前后均可以添加code。

14. unmanaged types

A type is an unmanaged type if it’s any of the following types:

sbyte, byte, short, ushort, int, uint, long, ulong, nint, nuint, char, float, double, decimal, or bool
Any enum type
Any pointer type
Any user-defined struct type that contains fields of unmanaged types only.

15. unmanaged code, IDisposable

Managed Code - Code that could be understood and managed by CLR,只会与虚拟机交互

Unmanaged Code - Code that could not handled by CLR,需要直接访问虚拟机之外,CLR无法完成的操作。

16. unsafe code

C# supports an unsafe context, in which you may write unverifiable code. In an unsafe context, code may use pointers, allocate and free blocks of memory, and call methods using function pointers. Unsafe code in C# isn’t necessarily dangerous; it’s just code whose safety cannot be verified.

Unsafe code has the following properties:

Methods, types, and code blocks can be defined as unsafe.
In some cases, unsafe code may increase an application’s performance by removing array bounds checks.
Unsafe code is required when you call native functions that require pointers.
Using unsafe code introduces security and stability risks.
The code that contains unsafe blocks must be compiled with the AllowUnsafeBlocks compiler option.

17. 值类型和引用类型

基类不同:
值类型继承自 System.ValueType;
引用类型继承自 System.Object;
内存分配不同
值类型的实例通常是在线程栈上分配的(静态分配),但是在某些情形下可以存储在堆中。引用类型的对象总是在进程堆中分配(动态分配)。
equal比较不同
值类型由于ValueType重写了Object的Equals()方法,会使用实例的值来比较,而不是地址;
引用类型是使用引用地址来判断是否相等。
初始值不同
值类型具有初始值(0,‘\0’,false’);
引用类型初始值是null。
生命周期不同
值类型生命周期是其定义域。当离开定义域后立即销毁释放。
引用类型是由CLR的垃圾回收策略控制回收的,具体销毁时间对开发者来说是透明的不可见的。

值类型包括C#的基本类型(用关键字int、char、float等来声明),结构(用struct关键字声明的类型),枚举(用enum关键字声明的类型),可空类型(int?,char?);而引用类型包括类(用class关键字声明的类型)和委托(用delegate关键字声明的特殊类)。 C#中的每一种类型要么是值类型,要么是引用类型。所以每个对象要么是值类型的实例,要么是引用类型的实例。

18. 装箱和拆箱

装箱:将值类型转换为一个引用类型
装箱步骤:
1. 在托管堆上分配内存,内存大小为值类型所有字段的大小和类型对象指针加上同步块索引的大小。
2. 将值类型的所有字段复制到刚分配的内存中。
3. 返回刚分配的内存地址

拆箱:将引用类型转换成值类型
拆箱步骤:
获取引用类型所有字段对应的地址,这里拆箱已经完成了。
拆箱操作完成后,会发生一次字段的复制。

19. string a=“” 和 string a = null 的 区别

string a = “” 用空字符串创建了一个新的字符串实例,a指向该字符串实例,只是该字符串为空,可以调用方法,比如a.concat/split 不会报错。分配了两块内存,一块存a本身,一块存a指向的字符串"".

string a = null 将a设置为空引用,不指向任何地址,如果调用a.concat/split会报错null reference。只分配了一块内存,存a本身。

20. int 和 System.Int32

int 是C#中对.net的 System.Int32的别名。
Object->ValueType->Int32

21. int 是 System.Int32,最终也继承自object,为什么是值类型

System.Object->System.ValueType(abstract)->Int32

22. string 和 System.String

别名

23. string具有值类型的表现,为什么是引用类型

不是继承自System.ValueType,所以不是值类型而是引用类型;因为改写了Equals方法,同时不可变,所以表现的像是值类型。

24 设计模式 设计原则

设计模式:
1. 创建型模式:工厂模式,单例模式,建造者模式
2. 结构型模式:代理模式,外观模式,桥接模式
3. 行为型模式:观察者模式,命令模式,状态模式,访问者模式,中介者模式,

设计原则:
1. 开闭原则(Open Closed Principle),一个软件实体,如类、模块和函数应该 对扩展开放,对修改关闭。
2. 单一职责原则(Single Responsibility Principle),一个类应该只有一个发生变化的原因。
3. 里氏替换原则(Liskov Substitution Principle),所有引用基类的地方必须能透明地使用其子类的对象。
4. 依赖倒置原则(Dependence Inversion Principle),上层模块不应该依赖底层模块,它们都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象。
5. 接口隔离原则(Interface Segregation Principle),每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。使用多个隔离的接口,比使用单个接口(多个接口方法集合到一个的接口)要好。
6. 迪米特法则(最少知道原则)(Law of Demeter),一个类对自己依赖的类知道的越少越好。无论被依赖的类多么复杂,都应该将逻辑封装在方法的内部,通过public方法提供给外部。这样当被依赖的类变化时,才能最小的影响该类。
7. 合成复用原则(Composite Reuse Principle),尽量使用对象组合/聚合,而不是继承关系达到软件复用的目的。

25 LockMethod(20)会死锁吗,竟然是不会的

    private static readonly object lock1 = new object();public void LockMethod(int n){lock (lock1){if (n > 10){n--;LockMethod(n);}}}

将这段代码拷入VS中运行,发现没有进入死锁,于是想找个权威的理由来解释它,终于在《CLR via C#》第二版(中文版,清华大学出版社出版)的第530页中第7行找到了这样的描述:“同样需要引起注意的是线程可以递归拥有同步块”。即同一线程可以递归调用lock语句。

26 await 和 task.wait

await 是 异步等待,会切换线程;
task.wait 是 同步等待。

28.泛型?

List, List

28.泛型约束

约束 描述
where T : struct 类型参数必须是不可为 null 的值类型。 有关可为 null 的值类型的信息,请参阅可为 null 的值类型。 由于所有值类型都具有可访问的无参数构造函数,因此 struct 约束表示 new() 约束,并且不能与 new() 约束结合使用。 struct 约束也不能与 unmanaged 约束结合使用。

where T : class 类型参数必须是引用类型。 此约束还应用于任何类、接口、委托或数组类型。 在 C#8.0 或更高版本中的可为 null 上下文中,T 必须是不可为 null 的引用类型。

where T : class? 类型参数必须是可为 null 或不可为 null 的引用类型。 此约束还应用于任何类、接口、委托或数组类型。

where T : notnull 类型参数必须是不可为 null 的类型。 参数可以是 C# 8.0 或更高版本中的不可为 null 的引用类型,也可以是不可为 null 的值类型。

where T : default 重写方法或提供显式接口实现时,如果需要指定不受约束的类型参数,此约束可解决歧义。 default 约束表示基方法,但不包含 class 或 struct 约束。 有关详细信息,请参阅default约束规范建议。

where T : unmanaged 类型参数必须是不可为 null 的非托管类型。 unmanaged 约束表示 struct 约束,且不能与 struct 约束或 new() 约束结合使用。

where T : new() 类型参数必须具有公共无参数构造函数。 与其他约束一起使用时,new() 约束必须最后指定。 new() 约束不能与 struct 和 unmanaged 约束结合使用。

where T : 类型参数必须是指定的基类或派生自指定的基类。 在 C# 8.0 及更高版本中的可为 null 上下文中,T 必须是从指定基类派生的不可为 null 的引用类型。

where T : ? 类型参数必须是指定的基类或派生自指定的基类。 在 C# 8.0 及更高版本中的可为 null 上下文中,T 可以是从指定基类派生的可为 null 或不可为 null 的类型。

where T : 类型参数必须是指定的接口或实现指定的接口。 可指定多个接口约束。 约束接口也可以是泛型。 在 C# 8.0 及更高版本中的可为 null 上下文中,T 必须是实现指定接口的不可为 null 的类型。

where T : ? 类型参数必须是指定的接口或实现指定的接口。 可指定多个接口约束。 约束接口也可以是泛型。 在 C# 8.0 中的可为 null 上下文中,T 可以是可为 null 的引用类型、不可为 null 的引用类型或值类型。 T 不能是可为 null 的值类型。

where T : U 为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。 在可为 null 的上下文中,如果 U 是不可为 null 的引用类型,T 必须是不可为 null 的引用类型。 如果 U 是可为 null 的引用类型,则 T 可以是可为 null 的引用类型,也可以是不可为 null 的引用类型。

29 泛型 为什么可以减少装箱拆箱的损耗

list写死是objectList的话,也完全可以替代 List 和 List,但是此时比如list.add(1)的时候,这个1就会先进行装箱。由这里例子可以看出,泛型可以一定程度上避免直接使用object来涵盖所有类型的用法,从而避免装箱损耗。

http://www.hrbkazy.com/news/52320.html

相关文章:

  • 免费网站空间和域名百度写作助手
  • 做门窗生意进哪个网站郑州seo博客
  • 为审核资质帮别人做的网站网络营销实训总结报告
  • 哪些网站专做新闻网站入口
  • seo应用领域专业的seo搜索引擎优化培训
  • 龙华区是深圳最差的区seo怎么读
  • 花钱做的网站推广被骗天津seo关键词排名优化
  • 方城企业网站制作哪家好东莞网站公司
  • 郑州专业做网站的软文形式推广产品
  • icp网站备案系统seo门户
  • 网站制作备案上线流程精准营销的典型案例
  • 博客网站做啥好谷歌搜索引擎优化
  • 自己做网站的各种代码指数型基金怎么买
  • 高州手机网站建设公司怎样做推广更有效
  • 广州专业做网站公司有哪些app怎么开发出来的
  • 推荐个做兼职的网站网站收录量
  • .net做网站开发吗制造业中小微企业
  • 网站设计与制作是网页吗今日关键词
  • 安徽做网站的公司男生技能培训班有哪些
  • 17做网店类似网站合肥今日头条最新消息
  • 亿玫网站建设产品推广朋友圈文案
  • 门户网站布局百度资源分享网页
  • 网站地图怎么添加指数基金怎么买
  • 电商公司网站建设流程热门关键词
  • 小程序 手机网站百度快速seo
  • 哪个网站做自行车评测的大众网疫情最新消息
  • 网站建设 关于我们怎样免费制作网页
  • 越秀低价网站建设赣州seo排名
  • 江苏公司响应式网站建设报价互联网营销推广方案
  • 做精细化工网站如何修改百度上面的门店号码