Skip to main content

常识

Net与 Mono 的关系?

Mono是.NET的一个开源跨平台实现,它们共享许多相似的技术基础,但在实现方式、特性和授权上存在差异。Mono的目的是为了让.NET应用程序能够在多个平台上运行,而.NET Framework则主要面向Windows平台。

类似java虚拟机,java本身不是跨平台语言,但运行在虚拟机上就能够实现了跨平台。.net只能在windows下运行,Mono可以实现跨平台跑,可以运行于linux,Unix,Mac OS等(因为不同平台上有各自对应的虚拟机,字节码在虚拟机上运行,实现跨平台)。

C#语言特性

C#本身特性很强大,所以在面试的时候,总会问 **C#值类型,引用类型,内存分布,垃圾回收(GC)**等

  1. 纯面向对象 - 对真实世界进行抽象(完全支持封装、继承、多态)
  2. 强类型系统 - 在编译时可以捕获大多数类型错误,值类型和引用类型的合理设计
  3. 自动内存管理 - 通过垃圾回收机制自动管理内存,减少了内存泄漏的可能性
  4. 现代化的语言特性 - 支持lambda表达式、LINQ、异步编程等现代编程范
  5. 丰富的开发工具和生态系统

C#拥有强大的开发工具和集成开发环境(IDE),如Visual Studio:

  • 提供代码自动完成、智能提示、重构等高级功能
  • 内置强大的调试和性能分析工具
  • 与Unity引擎深度集成
  • 拥有NuGet包管理系统,方便引入第三方库

跨平台

  • 即时编译(JIT):将IL代码转换为优化的本地机器码

  • AOT编译:如通过IL2CPP提前编译为本地代码

  • 可以在Windows、Linux、macOS等多种操作系统上运行

  • 支持移动平台开发(Android/iOS)

  • 通过Unity引擎实现游戏的多平台 发布

  • "一次编写,多处运行" 的理念大大提高了开发效率

语言特性

  • LINQ(Language Integrated Query):提供了强大的数据查询能力,使得处理数据变得简单而高效
  • 异步编程模型async/await语法使异步编程变得简单直观
  • 属性与事件:简化了面向对象的设计模式实现
  • 泛型编程:提高代码重用性和类型安全性
  • 扩展方法:允许向现有类型添加方法而无需创建新派生类型

什么是 JIT、AOT

JIT(Just-In-Time)和AOT(Ahead-Of-Time)是两种不同的编译技术,它们在编译代码的时机上有根本的区别。

JIT

JIT,即“即时编译”(运行时可编译),是一种在代码执行过程中将其编译成机器码的技术。这意味着程序在运行时,JIT编译器会动态地将部分或全部代码翻译成机器码,以达到最佳的执行效率。

JIT编译器的优点在于它可以实时地根据硬件资源情况生成最优指令,并且可以在程序运行过程中进行热点优化,即针对频繁执行的代码段进行更深入的优化。然而,JIT编译也需要一定的运行时开销,包括编译时间和内存占用。

JIT更适合于需要动态优化和充分利用硬件资源的程序。

AOT

AOT,即“预先编译”,是在程序运行之前将代码编译成机器码的技术。

与JIT不同,AOT编译器在程序运行之前就已经完成了所有的编译工作,生成了可以直接在目标机器上执行的机器码。因此,AOT编译的程序在运行时无需进行额外的编译,可以直接执行,从而节省了JIT编译带来的运行时开销。然而,AOT编译的缺点在于它无法根据程序运行时的实际情况进行动态优化,也无法充分利用硬件资源。

AOT则更适合于对执行效率有较高要求,且无需动态优化的程序。