上海特斯拉.NET程序员工资在20-25千之间,面试题分享:

1. C#中什么是值类型和引用类型?

在 C# 中,值类型和引用类型是用来表示变量存储方式的两种不同类型。

值类型包括基本数据类型(如 int、float、bool)和结构体(struct)。它们直接存储在堆栈上,变量直接包含它们的实际数据值。

引用类型包括类(class)、接口(interface)、委托(delegate)等,它们存储在托管堆中,并且变量存储的是对象的引用(内存地址)而不是实际的数据值。

2.谈谈JWT认证

JWT(JSON Web Token)是一种用于在网络应用之间传递声明的开放标准。

它由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。

在认证过程中,用户认证成功后会生成一个包含用户信息的 JWT,之后客户端每次请求都会在 Authorization 头中携带这个 JWT,服务端通过验证 JWT 的签名来确认用户身份和权限。

3. 介绍一下如何使用docker部署.NET网站以及常用命令。

使用 Docker 部署 .NET 网站需要创建一个 Dockerfile 来定义镜像,然后运行容器。

常用命令包括:

  • docker build -t <image_name>:<tag>:构建 Docker 镜像。
  • docker run -d -p <host_port>:<container_port> <image_name>:运行容器。
  • docker ps:列出正在运行的容器。
  • docker stop <container_id>:停止容器。
  • docker rm <container_id>:删除容器。
  • docker rmi <image_id>:删除镜像。

4.告诉我如何配置ef core多对多。

在 EF Core 中配置多对多关系需要使用 Fluent API 或者数据注解。

通过 Fluent API,你可以使用 HasMany() 和 WithMany() 方法来建立多对多的关系,并使用 UsingEntity() 方法定义中间表。

数据注解的方式可以通过 [ForeignKey] 和 [InverseProperty] 等标签来标识多对多关系。

5.你用过EF的东西吗?具体如何实施呢?

我在 EF 中用过一些功能,比如建立模型、定义关系、进行查询和数据操作等。

一般步骤包括定义实体类(Entity),配置关系(Relationship),创建上下文(DbContext),进行数据迁移(Migration)以及编写 LINQ 查询等来操作数据。

6. 如何使用正则表达式实现身份验证

通过正则表达式可以验证身份证号码、邮箱、手机号码等格式。例如,使用适当的正则表达式验证输入字符串是否符合特定的格式要求。

7. 从您的简历来看,您似乎使用过 RabbitMQ。队列异常如何处理?

在 RabbitMQ 中,处理队列异常可以通过以下方式:

  • 设置死信队列(DLX),当消息处理失败时将消息发送到死信队列。
  • 实现重试机制,在处理失败时重新将消息发送到队列,但需要小心避免出现无限循环。
  • 记录错误日志并进行手动处理。

8.讨论事件和委托之间的区别

委托是一种类型,允许将方法作为参数传递或者引用,并且可以动态绑定和调用这些方法。

事件基于委托,是一种机制,允许类声明自己的事件,并允许其他类订阅或取消订阅这些事件。事件可以看作是委托的一种特殊用法,提供更安全的方式来发布和订阅通知。

9.IOC容器注入有多种方式

构造函数注入(Constructor Injection)

属性注入(Property Injection)

方法注入(Method Injection)

10、Startup类中ConfigureServices()和Configure()方法的作用

ConfigureServices():用于配置应用程序的服务,例如添加数据库上下文、认证服务、依赖注入等。

Configure():用于配置应用程序的 HTTP 请求管道,例如添加中间件来处理请求、路由、错误处理等。

11、配置文件,appsettings.json和appsettings.Development.json有什么区别以及如何控制程序读取哪个配置文件?

appsettings.json 是应用程序的默认配置文件,包含常规的配置信息。

appsettings.Development.json 是针对开发环境的特定配置文件,它会覆盖 appsettings.json 中的相同配置。

程序会根据运行环境自动选择读取哪个配置文件。通常,在开发环境下会优先读取 appsettings.Development.json。可以通过设置环境变量来改变程序读取的配置文件。

12. .net core 版本中依赖于框架的部署和独立于框架的部署有什么区别?

依赖于框架的部署(FDD):

FDD 部署方式依赖于目标系统上已安装的 .NET Core 运行时(runtime)。应用程序只包含应用程序本身的代码和依赖项,而不包含 .NET Core 运行时。

当运行 FDD 应用程序时,系统必须已安装与应用程序所目标的 .NET Core 版本兼容的运行时。如果系统上没有所需版本的 .NET Core 运行时,需要进行安装。

独立于框架的部署(SCD):

SCD 部署方式将应用程序及其所有依赖项,包括 .NET Core 运行时,一起打包成一个自包含的部署包。

这种部署方式允许在不需要预先安装 .NET Core 的情况下在目标系统上运行应用程序。因为应用程序已经包含了特定版本的 .NET Core 运行时,所以它是完全独立的。

区别主要在于依赖于框架的部署需要目标系统上已安装了相应的 .NET Core 运行时,而独立于框架的部署将所有运行时和应用程序打包在一起,使得应用程序可以在没有预先安装 .NET Core 的系统上运行。选择部署方式取决于应用程序的需求以及对部署的控制要求。