6、HTTP中常见的状态码有哪些?【中高频】

 五大类 HTTP 状态码

  • 1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。

  • 2xx 类状态码 表示服务器成功处理了客户端的请求,也是我们最愿意看到的状态。

    • 「200 OK」是最常见的成功状态码,表示一切正常。如果是非 HEAD 请求,服务器返回的响应头都会有 body 数据。
    • 「204 No Content」也是常见的成功状态码,与 200 OK 基本相同,但响应头没有 body 数据。
    • 「206 Partial Content」是应用于 HTTP 分块下载或断点续传,表示响应返回的 body 数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。
  • 3xx 类状态码 表示客户端请求的资源发生了变动,需要客户端用新的URL重新发送请求 来获取资源,也就是重定向

    • 「301 Moved Permanently」表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。
    • 「302 Found」表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。301 和 302 都会在响应头里使用字段 Location,指明后续要跳转的 URL,浏览器会自动重定向新的 URL。
    • 「304 Not Modified」不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存重定向,也就是告诉客户端可以继续使用缓存资源,用于缓存控制。
  • 4xx 类状态码表示客户端发送的报文有误,服务器无法处理,也就是错误码的含义

    • 「400 Bad Request」表示客户端请求的报文有错误,但只是个笼统的错误。
    • 「403 Forbidden」表示服务器禁止访问资源,并不是客户端的请求出错。
    • 「404 Not Found」表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。
  • 5xx 类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码

    • 「500 Internal Server Error」与 400 类型,是个笼统通用的错误码,服务器发生了什么错误,我们并不知道。
    • 「501 Not Implemented」表示客户端请求的功能还不支持,类似“即将开业,敬请期待”的意思。
    • 「502 Bad Gateway」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。
    • 「503 Service Unavailable」表示服务器当前很忙,暂时无法响应客户端,类似“网络服务正忙,请稍后重试”的意思。
<think>嗯,用户之前问过Go语言的面试问题,现在又问.NET开发的面试问题,看来可能是在准备不同技术栈的面试,或者想扩展自己的知识面。需要确保回答的结构和之前类似,这样用户容易比较和参考。 首先,用户需要的是.NET开发相关的面试问题总结,应该覆盖基础概念、语言特性、框架、数据库、Web开发、设计模式、调试部署等方面。得确保每个部分都有常见问题,并且给出简明扼要的回答,可能用户需要快速复习或者准备答案。 考虑到用户之前得到的是Go的总结,这里也需要分点,用清晰的标题和问题列表。注意使用中文,并且避免使用Markdown格式,但根据用户提供的示例,他们可能接受某种结构化的格式,比如用###和列表项。 要注意.NET的不同组成部分,比如C#语言特性、ASP.NET Core、Entity Framework等。可能还需要包括版本差异,比如.NET Core和.NET Framework的区别,这是常见的问题。 另外,用户可能对实际项目经验相关的问题感兴趣,比如设计模式的应用、性能优化、单元测试等。这些内容需要包含在项目实践部分。 需要检查是否有遗漏的重要主题,比如依赖注入、中间件、RESTful API设计、安全机制等。这些都是.NET开发中常被问到的点。 最后,确保回答的准确性和实用性,给出示例代时可能需要用代块,但根据之前的回复,用户可能接受简短的代示例,比如在问题中插入关键代片段。 总结下来,回答的结构应该包括基础、语言特性、框架、数据库、Web API、设计模式、调试部署、项目实践和进阶问题,每个部分列出几个典型问题并简要回答。同时,保持与之前Go回答类似的格式,方便用户对照。</think>以下是.NET开发常见面试问题总结,涵盖基础概念、语言特性、框架使用、项目实践等方向: --- ### **一、基础概念** 1. **`.NET Core`与`.NET Framework`区别?** - 跨平台支持(Core支持Linux/macOS,Framework仅Windows) - 开源协议(Core完全开源) - 模块化设计(Core按需加载依赖) 2. **CLR(公共语言运行时)的作用?** - 管理内存(垃圾回收) - 代编译(JIT编译IL代为机器) - 异常处理与线程管理 3. **什么是托管代与非托管代?** - 托管代:由CLR管理执行(如C#) - 非托管代:直接编译为机器(如C++ DLL) --- ### **二、C#语言特性** 1. **`ref`和`out`参数的区别?** - `ref`参数必须初始化,`out`参数在方法内必须赋值 - `out`适用于返回多个值的场景 2. **`async/await`的工作原理?** - 异步方法被编译为状态机 - `await`释放当前线程,任务完成后恢复上下文 3. **装箱(Boxing)与拆箱(Unboxing)的代价?** - 装箱:值类型转引用类型(堆内存分配) - 拆箱:引用类型转值类型(类型检查开销) --- ### **三、ASP.NET Core** 1. **中间件(Middleware)的执行顺序?** - 按`Use`注册顺序正向执行,响应时反向执行 ```csharp app.UseMiddleware1(); app.UseMiddleware2(); // 先执行Middleware1,再Middleware2 ``` 2. **依赖注入(DI)的生命周期选项?** - `Transient`(每次请求新实例) - `Scoped`(同一请求内共享) - `Singleton`(全局单例) 3. **如何实现JWT身份验证?** - 使用`Microsoft.AspNetCore.Authentication.JwtBearer`包 - 配置`AddAuthentication`和`AddJwtBearer` --- ### **四、数据库与ORM** 1. **Entity Framework Core的`IQueryable`与`IEnumerable`区别?** - `IQueryable`在数据库端执行查询(生成SQL) - `IEnumerable`在内存中过滤数据 2. **什么是延迟加载(Lazy Loading)?如何启用?** - 首次访问导航属性时加载关联数据 - 安装`Microsoft.EntityFrameworkCore.Proxies`并启用`UseLazyLoadingProxies` 3. **如何优化EF Core查询性能?** - 使用`AsNoTracking()`避免变更跟踪 - 通过`Select`仅加载所需字段 --- ### **五、Web API与RESTful** 1. **`[FromBody]`和`[FromForm]`的区别?** - `FromBody`解析JSON/XML请求体 - `FromForm`解析表单数据(Content-Type: application/x-www-form-urlencoded) 2. **如何实现版本控制(API Versioning)?** - URL路径(`/api/v1/products`) - 查询字符串(`/api/products?api-version=1.0`) - 使用`Microsoft.AspNetCore.Mvc.Versioning`库 --- ### **六、设计模式与架构** 1. **MVC与MVVM的区别?** - MVC:Controller处理逻辑,View无状态(Web场景) - MVVM:ViewModel绑定数据,View自动更新(桌面/WPF场景) 2. **仓储模式(Repository Pattern)的作用?** - 解耦数据访问层与业务逻辑 - 集中管理数据查询逻辑 --- ### **七、调试与部署** 1. **如何捕获全局异常?** - 使用`UseExceptionHandler`中间件 ```csharp app.UseExceptionHandler(errorApp => { /* 自定义处理逻辑 */ }); ``` 2. **Docker部署ASP.NET Core应用的步骤?** - 添加`Dockerfile`并构建镜像 - 运行容器并映射端口 --- ### **高频进阶问题** - 如何实现缓存(MemoryCache/Redis)? - SignalR如何实现实时通信? - 单元测试框架(xUnit/MSTest)的使用技巧? - 微服务架构中如何保证服务间通信可靠性? --- **建议**:结合实际项目经验准备案例(如性能优化、高并发解决方案),并熟悉代手写题(如LINQ查询、算法实现)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值