7. C# / .NET 答辩

本章收录 64 道老师常问问题,高频题靠前。回答时尽量结合自己的项目举例。

1. C#与.NET的关系、各自作用?

C#是编程语言,负责编写业务逻辑代码;.NET是运行框架,提供类库、运行环境、编译机制,所有C#程序必须依托.NET框架运行,框架封装大量通用方法,简化桌面和Web开发。

2. ADO.NET数据库操作流程?

  1. 第一步创建数据库连接对象、配置连接字符串
  2. 第二步打开数据库连接
  3. 第三步创建Command对象执行SQL语句
  4. 第四步接收处理返回数据
  5. 第五步关闭连接、释放资源,全程捕获异常,保证操作稳定。

3. C#面向对象在项目中的实际应用?

  1. 封装:将数据库操作、弹窗提示封装为工具类
  2. 继承:窗体基类封装通用功能,子类直接复用
  3. 多态:重写虚方法实现差异化业务逻辑,提升代码复用和维护性。

4. C#异常处理机制?

使用try-catch-finally捕获异常,try执行核心逻辑,catch捕获报错并提示用户,finally释放资源,避免程序闪退崩溃,提升系统稳定性。

5. 为什么选 C# / .NET?

DTO/VO/Entity 分层:Entity 映射表,DTO 传参,VO 返前端,避免暴露密码等敏感列。

  1. Controller 接 DTO,Service 转 Entity
  2. 返回 VO 控制字段可见性
  3. 答辩体现规范分层意识

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

6. ASP.NET Core 与 Framework 区别?

统一异常处理避免把堆栈直接返回前端,提升体验与安全。

  1. @ControllerAdvice + @ExceptionHandler 捕获业务/系统异常
  2. 封装统一 Result(code/msg/data)
  3. 记录日志便于排错,答辩可展示全局异常类

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

7. MVC 在项目中如何体现?

Controller 接收请求并调度;Model(实体/DTO)承载数据;View 或 WebAPI 负责展示/JSON 输出;复杂业务下沉到 Service,避免控制器臃肿。

  1. Controller:路由与参数校验
  2. Service:业务与事务
  3. View/API:页面或接口返回

结合毕设点名你的控制器类与对应页面/接口。

8. 依赖注入怎么用的?

Startup/Program 注册服务生命周期(Singleton/Scoped/Transient),构造器注入。

9. Entity Framework 做了什么?

Entity Framework Core 是 .NET ORM,Code First 迁移、LINQ 查询。

  1. DbContext 管理会话
  2. 复杂 SQL 可原生 ADO/Dapper
  3. 答辩展示一个实体映射

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

10. 如何做身份认证?

JWT 无状态令牌,Header.Payload.Signature,服务端验签即可,适合前后端分离。

  1. 过期时间与刷新策略
  2. 失效黑名单或短 TTL
  3. 答辩对比 Session 优劣

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

11. 异步 async/await 为何重要?

@Async 将方法放线程池异步执行,适合发邮件、写日志等非主路径任务。

  1. 需 @EnableAsync 与自定义 Executor
  2. 异步方法同类调用不生效
  3. 答辩说明是否使用及线程池参数

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

12. 值类型和引用类型详细区别?

值类型存栈内存,存储真实数据,赋值拷贝数值,互不影响,如int、double;引用类型存堆内存,栈存地址,赋值拷贝地址,指向同一数据,修改相互影响,如string、数组、窗体对象。

13. 如何防 SQL 注入?

SQL 注入通过拼接恶意 SQL 篡改语句,防护核心是 预编译 #{} 与参数校验。

  1. MyBatis #{} 使用 PreparedStatement
  2. ${} 仅用于表名/排序等不可预编译场景
  3. 永不拼接用户输入到 SQL

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

14. 如何部署?

部署流程:准备 JDK/DB→导 SQL→改配置→打包上传→启动→Nginx 反代→验证。

  1. 防火墙开放端口
  2. 进程守护 systemd
  3. 答辩能口述完整步骤

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

15. CLR 是什么?

CLR 是 .NET 公共语言运行时,负责 JIT 编译、GC、类型安全与异常。

  1. C# 代码编译为 IL 由 CLR 执行
  2. 跨语言互操作
  3. 答辩说明 .NET 运行模型

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

16. CTS / CLS?

static 属于类而非实例,静态方法/变量随类加载,无 this。

  1. 工具方法常用 static
  2. 静态变量注意线程安全
  3. 答辩对比实例成员

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

17. 托管代码?

CLR 是 .NET 公共语言运行时,负责 JIT 编译、GC、类型安全与异常。

  1. C# 代码编译为 IL 由 CLR 执行
  2. 跨语言互操作
  3. 答辩说明 .NET 运行模型

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

18. GC?

GC 自动回收无引用对象,分代:新生代 Minor GC、老年代 Full GC。

  1. 强软弱虚引用了解
  2. 避免内存泄漏
  3. 答辩不必背调参细节

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

19. 属性与字段?

简要结论:封装访问。

关于「属性与字段」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:

  1. 先用一句话说清定义或结论(如上)
  2. 补充 2~3 个技术要点或注意事项,体现理解深度
  3. 在 C# / ASP.NET 项目中,结合自己的代码、配置或表结构举例,避免只背关键词

20. 索引器?

索引加速查询,B+ 树结构;过多索引影响写入;遵循最左前缀联合索引。

  1. where/order by 字段考虑索引
  2. 避免函数包列导致失效
  3. 答辩指出项目索引字段

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

21. 委托?

简要结论:方法引用。

关于「委托」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:

  1. 先用一句话说清定义或结论(如上)
  2. 补充 2~3 个技术要点或注意事项,体现理解深度
  3. 在 C# / ASP.NET 项目中,结合自己的代码、配置或表结构举例,避免只背关键词

22. 事件?

简要结论:观察者模式。

关于「事件」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:

  1. 先用一句话说清定义或结论(如上)
  2. 补充 2~3 个技术要点或注意事项,体现理解深度
  3. 在 C# / ASP.NET 项目中,结合自己的代码、配置或表结构举例,避免只背关键词

23. Linq?

LINQ 统一查询语法,对集合/IQueryable 用 where/select 等,延迟执行。

  1. 方法语法与查询语法等价
  2. 注意 N+1 与 ToList 时机
  3. 答辩结合查询代码

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

24. 扩展方法?

简要结论:扩展已有类型。

关于「扩展方法」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:

  1. 先用一句话说清定义或结论(如上)
  2. 补充 2~3 个技术要点或注意事项,体现理解深度
  3. 在 C# / ASP.NET 项目中,结合自己的代码、配置或表结构举例,避免只背关键词

25. 泛型?

泛型在编译期约束类型,避免强转与 ClassCastException,如 List<User>。

  1. 通配符 ? extends/super
  2. 擦除机制了解即可
  3. 答辩说明集合类型安全

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

26. 接口与抽象类?

慢接口排查:日志耗时、Arthas、SQL EXPLAIN、索引、N+1、缓存。

  1. 定位是 DB 还是代码逻辑
  2. 优化后对比响应时间
  3. 答辩可讲真实优化案例

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

27. 可空类型?

简要结论:int? 等。

关于「可空类型」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:

  1. 先用一句话说清定义或结论(如上)
  2. 补充 2~3 个技术要点或注意事项,体现理解深度
  3. 在 C# / ASP.NET 项目中,结合自己的代码、配置或表结构举例,避免只背关键词

28. 异常处理?

统一异常处理避免把堆栈直接返回前端,提升体验与安全。

  1. @ControllerAdvice + @ExceptionHandler 捕获业务/系统异常
  2. 封装统一 Result(code/msg/data)
  3. 记录日志便于排错,答辩可展示全局异常类

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

29. using?

Session 在服务端保存登录态,Cookie 携带 JSESSIONID,拦截器校验是否登录。

  1. 登录成功写入 userId/role 等信息
  2. 集群需 Redis 共享 Session 或改 JWT
  3. 答辩能口述登录→访问受保护接口流程

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

30. IEnumerable?

枚举/constants 管理订单状态等,状态机规定合法迁移,防止非法跳转。

  1. 如 待支付→已支付→已完成
  2. 更新时校验当前状态
  3. 答辩结合业务状态字段

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

31. Task?

定时任务按 cron 周期执行,Spring @Scheduled 或 Quartz 管理。

  1. 如每日统计、过期数据清理
  2. 注意集群下避免重复执行(分布式锁)
  3. 答辩说明是否使用及触发时间

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

32. 线程池?

线程池复用线程、限制并发,避免无界 new Thread 导致资源耗尽。

  1. 核心/最大线程数、队列、拒绝策略
  2. Boot 可 @Bean ThreadPoolTaskExecutor
  3. 答辩结合 @Async 或定时任务说明

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

33. 锁 lock?

CLR 是 .NET 公共语言运行时,负责 JIT 编译、GC、类型安全与异常。

  1. C# 代码编译为 IL 由 CLR 执行
  2. 跨语言互操作
  3. 答辩说明 .NET 运行模型

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

34. 记录类型 record?

Java 16+ Record 不可变数据载体,自动生成构造/getter/equals/hashCode。

  1. 适合 DTO/值对象
  2. 组件不可变
  3. 答辩了解新特性即可

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

35. 中间件管道?

简要结论:请求处理链。

关于「中间件管道」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:

  1. 先用一句话说清定义或结论(如上)
  2. 补充 2~3 个技术要点或注意事项,体现理解深度
  3. 在 C# / ASP.NET 项目中,结合自己的代码、配置或表结构举例,避免只背关键词

36. 过滤器 Filter?

Filter 是 Servlet 规范组件,在容器最外层,常用于编码、CORS、XSS 过滤。

  1. 执行早于 Interceptor
  2. @WebFilter 或 FilterRegistrationBean 注册
  3. 答辩区分 Filter 与 Interceptor 顺序

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

37. 模型绑定?

简要结论:请求到对象。

关于「模型绑定」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:

  1. 先用一句话说清定义或结论(如上)
  2. 补充 2~3 个技术要点或注意事项,体现理解深度
  3. 在 C# / ASP.NET 项目中,结合自己的代码、配置或表结构举例,避免只背关键词

38. 模型验证?

IO 阻塞流式读写;NIO Channel/Buffer 非阻塞,适合高并发网络(了解即可)。

  1. 文件读写用 BufferedReader
  2. 用完 close 或 try-with-resources
  3. 答辩说明上传下载用过哪些类

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

39. Winform和ASP.NET核心差异?

Winform是桌面客户端开发,本地运行、无需浏览器、响应快,适合单机局域网系统;ASP.NET是Web开发,浏览器访问、跨设备、可远程访问,适合线上管理平台,根据项目场景选型开发。

40. 仓储模式?

简要结论:封装数据访问。

关于「仓储模式」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:

  1. 先用一句话说清定义或结论(如上)
  2. 补充 2~3 个技术要点或注意事项,体现理解深度
  3. 在 C# / ASP.NET 项目中,结合自己的代码、配置或表结构举例,避免只背关键词

41. 工作单元?

事务保证一组 SQL 同成功同失败,Spring @Transactional 或数据库 BEGIN/COMMIT。

  1. 下单扣库存典型场景
  2. 隔离级别影响并发问题
  3. 答辩指出哪些 Service 加了事务

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

42. 迁移 Migration?

@ConfigurationProperties 将配置前缀批量绑定到 Java 对象,类型安全可读。

  1. 比 scattered @Value 更易维护
  2. 配合 @EnableConfigurationProperties 注册
  3. 答辩可展示自定义配置类

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

43. Code First?

@ConfigurationProperties 将配置前缀批量绑定到 Java 对象,类型安全可读。

  1. 比 scattered @Value 更易维护
  2. 配合 @EnableConfigurationProperties 注册
  3. 答辩可展示自定义配置类

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

44. 懒加载?

类加载:加载→验证→准备→解析→初始化;双亲委派先让父加载器加载,防核心类被篡改。

  1. 自定义 ClassLoader 了解
  2. Tomcat 可打破委派
  3. 答辩说明 JVM 如何找到类

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

45. N+1?

N+1 问题:查 N 条主记录后又逐条查关联,产生大量 SQL。

  1. 解决:JOIN 一次查出、批量 IN 查询、MyBatis 嵌套/延迟加载谨慎使用
  2. ORM 项目常见性能坑
  3. 答辩可结合列表页关联展示说明优化

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

46. 事务?

事务保证一组 SQL 同成功同失败,Spring @Transactional 或数据库 BEGIN/COMMIT。

  1. 下单扣库存典型场景
  2. 隔离级别影响并发问题
  3. 答辩指出哪些 Service 加了事务

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

47. 缓存?

MyBatis 一级缓存是 SqlSession 级别,默认开启,同一会话内重复查询命中缓存。

  1. 增删改会清空当前 session 缓存
  2. 会话关闭后缓存失效
  3. 答辩对比二级缓存的跨 Session 共享特性

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

48. 日志?

日志用于排错、审计与性能分析,常用 SLF4J + Logback/Log4j2。

  1. 分级别:ERROR/WARN/INFO/DEBUG
  2. 关键业务、异常、慢接口应记录
  3. 生产避免打印敏感信息与过量 DEBUG

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

49. 配置?

配置分 dev/test/prod 环境,application-{profile}.yml 或 properties 切换。

  1. spring.profiles.active 指定环境
  2. 敏感信息用环境变量,不入库
  3. 答辩说明本地与服务器配置差异

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

50. 跨域?

跨域是浏览器同源策略限制不同源 AJAX 请求,需服务端 CORS 或 Nginx 反代。

  1. @CrossOrigin、WebMvcConfigurer、Filter 均可配置
  2. 允许 Origin、Methods、Headers 需最小化
  3. 前后端分离联调时高频考点

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

51. Swagger?

Swagger/Knife4j 自动生成接口文档,便于前后端联调与答辩展示。

  1. @ApiOperation 描述接口
  2. 生产环境常关闭或加鉴权
  3. 答辩可打开 doc.html 演示

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

52. 文件上传?

文件上传通过 MultipartResolver 解析 multipart 表单,Controller 接收 MultipartFile。

  1. 限制大小、后缀白名单,防止恶意文件
  2. 存储本地目录或 OSS,数据库只存访问 URL
  3. 答辩可演示上传头像/附件的完整流程

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

53. SignalR?

定时任务按 cron 周期执行,Spring @Scheduled 或 Quartz 管理。

  1. 如每日统计、过期数据清理
  2. 注意集群下避免重复执行(分布式锁)
  3. 答辩说明是否使用及触发时间

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

54. Blazor?

消息队列异步解耦生产消费,削峰填谷;毕设单体可说明同步足够、MQ 为扩展方向。

  1. 生产者发消息,消费者订阅
  2. 保证可靠投递与幂等消费
  3. 答辩如实说明是否引入

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

55. WPF / WinForms?

@ConfigurationProperties 将配置前缀批量绑定到 Java 对象,类型安全可读。

  1. 比 scattered @Value 更易维护
  2. 配合 @EnableConfigurationProperties 注册
  3. 答辩可展示自定义配置类

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

56. 与 Java 对比?

Java 基础题答辩策略:先答概念,再指项目中类/方法/配置印证,最后说注意点。

  1. 准备 2~3 段可打开的核心代码
  2. 避免只背八股
  3. 体现真的写过代码

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

57. NuGet?

DTO/VO/Entity 分层:Entity 映射表,DTO 传参,VO 返前端,避免暴露密码等敏感列。

  1. Controller 接 DTO,Service 转 Entity
  2. 返回 VO 控制字段可见性
  3. 答辩体现规范分层意识

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

58. 单元测试?

单元测试验证模块逻辑,SpringTest + JUnit/Mockito 可 Mock 依赖测 Service。

  1. 覆盖核心工具方法与关键分支
  2. 集成测试 @SpringBootTest 启动容器测接口
  3. 答辩如实说明测试范围与用例数

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

59. 集成测试?

@SpringBootTest 启动完整容器做集成测试,@WebMvcTest 只测 MVC 层。

  1. MockMvc 模拟 HTTP 请求
  2. Testcontainers 可启真实 DB
  3. 答辩说明测试覆盖范围

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

60. 发布配置?

简要结论:Release 优化。

关于「发布配置」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:

  1. 先用一句话说清定义或结论(如上)
  2. 补充 2~3 个技术要点或注意事项,体现理解深度
  3. 在 C# / ASP.NET 项目中,结合自己的代码、配置或表结构举例,避免只背关键词

61. 健康检查?

健康检查 URL 供负载均衡/运维探测服务存活,返回 UP/DOWN 状态。

  1. Actuator /health 或自建 ping
  2. 检查 DB、Redis 等依赖
  3. 答辩说明部署后如何验证

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

62. 密钥管理?

简要结论:UserSecrets / 环境变量。

关于「密钥管理」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:

  1. 先用一句话说清定义或结论(如上)
  2. 补充 2~3 个技术要点或注意事项,体现理解深度
  3. 在 C# / ASP.NET 项目中,结合自己的代码、配置或表结构举例,避免只背关键词

63. 最大难点?

答辩「最大难点」应讲 真实问题:现象→定位→方案→验证。

  1. 如联表同步、权限越权、分页性能、跨域联调等
  2. 体现日志、断点、SQL 优化等排错过程
  3. 避免空泛说「技术难」,要有故事线

结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。

64. 答辩重点?

简要结论:分层清晰、可演示。

关于「答辩重点」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:

  1. 先用一句话说清定义或结论(如上)
  2. 补充 2~3 个技术要点或注意事项,体现理解深度
  3. 在 C# / ASP.NET 项目中,结合自己的代码、配置或表结构举例,避免只背关键词