7. C# / .NET 答辩
本章收录 64 道老师常问问题,高频题靠前。回答时尽量结合自己的项目举例。
1. C#与.NET的关系、各自作用?
C#是编程语言,负责编写业务逻辑代码;.NET是运行框架,提供类库、运行环境、编译机制,所有C#程序必须依托.NET框架运行,框架封装大量通用方法,简化桌面和Web开发。
2. ADO.NET数据库操作流程?
- 第一步创建数据库连接对象、配置连接字符串
- 第二步打开数据库连接
- 第三步创建Command对象执行SQL语句
- 第四步接收处理返回数据
- 第五步关闭连接、释放资源,全程捕获异常,保证操作稳定。
3. C#面向对象在项目中的实际应用?
- 封装:将数据库操作、弹窗提示封装为工具类
- 继承:窗体基类封装通用功能,子类直接复用
- 多态:重写虚方法实现差异化业务逻辑,提升代码复用和维护性。
4. C#异常处理机制?
使用try-catch-finally捕获异常,try执行核心逻辑,catch捕获报错并提示用户,finally释放资源,避免程序闪退崩溃,提升系统稳定性。
5. 为什么选 C# / .NET?
DTO/VO/Entity 分层:Entity 映射表,DTO 传参,VO 返前端,避免暴露密码等敏感列。
- Controller 接 DTO,Service 转 Entity
- 返回 VO 控制字段可见性
- 答辩体现规范分层意识
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
6. ASP.NET Core 与 Framework 区别?
统一异常处理避免把堆栈直接返回前端,提升体验与安全。
- @ControllerAdvice + @ExceptionHandler 捕获业务/系统异常
- 封装统一 Result(code/msg/data)
- 记录日志便于排错,答辩可展示全局异常类
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
7. MVC 在项目中如何体现?
Controller 接收请求并调度;Model(实体/DTO)承载数据;View 或 WebAPI 负责展示/JSON 输出;复杂业务下沉到 Service,避免控制器臃肿。
- Controller:路由与参数校验
- Service:业务与事务
- View/API:页面或接口返回
结合毕设点名你的控制器类与对应页面/接口。
8. 依赖注入怎么用的?
Startup/Program 注册服务生命周期(Singleton/Scoped/Transient),构造器注入。
9. Entity Framework 做了什么?
Entity Framework Core 是 .NET ORM,Code First 迁移、LINQ 查询。
- DbContext 管理会话
- 复杂 SQL 可原生 ADO/Dapper
- 答辩展示一个实体映射
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
10. 如何做身份认证?
JWT 无状态令牌,Header.Payload.Signature,服务端验签即可,适合前后端分离。
- 过期时间与刷新策略
- 失效黑名单或短 TTL
- 答辩对比 Session 优劣
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
11. 异步 async/await 为何重要?
@Async 将方法放线程池异步执行,适合发邮件、写日志等非主路径任务。
- 需 @EnableAsync 与自定义 Executor
- 异步方法同类调用不生效
- 答辩说明是否使用及线程池参数
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
12. 值类型和引用类型详细区别?
值类型存栈内存,存储真实数据,赋值拷贝数值,互不影响,如int、double;引用类型存堆内存,栈存地址,赋值拷贝地址,指向同一数据,修改相互影响,如string、数组、窗体对象。
13. 如何防 SQL 注入?
SQL 注入通过拼接恶意 SQL 篡改语句,防护核心是 预编译 #{} 与参数校验。
- MyBatis #{} 使用 PreparedStatement
- ${} 仅用于表名/排序等不可预编译场景
- 永不拼接用户输入到 SQL
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
14. 如何部署?
部署流程:准备 JDK/DB→导 SQL→改配置→打包上传→启动→Nginx 反代→验证。
- 防火墙开放端口
- 进程守护 systemd
- 答辩能口述完整步骤
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
15. CLR 是什么?
CLR 是 .NET 公共语言运行时,负责 JIT 编译、GC、类型安全与异常。
- C# 代码编译为 IL 由 CLR 执行
- 跨语言互操作
- 答辩说明 .NET 运行模型
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
16. CTS / CLS?
static 属于类而非实例,静态方法/变量随类加载,无 this。
- 工具方法常用 static
- 静态变量注意线程安全
- 答辩对比实例成员
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
17. 托管代码?
CLR 是 .NET 公共语言运行时,负责 JIT 编译、GC、类型安全与异常。
- C# 代码编译为 IL 由 CLR 执行
- 跨语言互操作
- 答辩说明 .NET 运行模型
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
18. GC?
GC 自动回收无引用对象,分代:新生代 Minor GC、老年代 Full GC。
- 强软弱虚引用了解
- 避免内存泄漏
- 答辩不必背调参细节
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
19. 属性与字段?
简要结论:封装访问。
关于「属性与字段」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:
- 先用一句话说清定义或结论(如上)
- 补充 2~3 个技术要点或注意事项,体现理解深度
- 在 C# / ASP.NET 项目中,结合自己的代码、配置或表结构举例,避免只背关键词
20. 索引器?
索引加速查询,B+ 树结构;过多索引影响写入;遵循最左前缀联合索引。
- where/order by 字段考虑索引
- 避免函数包列导致失效
- 答辩指出项目索引字段
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
21. 委托?
简要结论:方法引用。
关于「委托」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:
- 先用一句话说清定义或结论(如上)
- 补充 2~3 个技术要点或注意事项,体现理解深度
- 在 C# / ASP.NET 项目中,结合自己的代码、配置或表结构举例,避免只背关键词
22. 事件?
简要结论:观察者模式。
关于「事件」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:
- 先用一句话说清定义或结论(如上)
- 补充 2~3 个技术要点或注意事项,体现理解深度
- 在 C# / ASP.NET 项目中,结合自己的代码、配置或表结构举例,避免只背关键词
23. Linq?
LINQ 统一查询语法,对集合/IQueryable 用 where/select 等,延迟执行。
- 方法语法与查询语法等价
- 注意 N+1 与 ToList 时机
- 答辩结合查询代码
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
24. 扩展方法?
简要结论:扩展已有类型。
关于「扩展方法」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:
- 先用一句话说清定义或结论(如上)
- 补充 2~3 个技术要点或注意事项,体现理解深度
- 在 C# / ASP.NET 项目中,结合自己的代码、配置或表结构举例,避免只背关键词
25. 泛型?
泛型在编译期约束类型,避免强转与 ClassCastException,如 List<User>。
- 通配符 ? extends/super
- 擦除机制了解即可
- 答辩说明集合类型安全
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
26. 接口与抽象类?
慢接口排查:日志耗时、Arthas、SQL EXPLAIN、索引、N+1、缓存。
- 定位是 DB 还是代码逻辑
- 优化后对比响应时间
- 答辩可讲真实优化案例
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
27. 可空类型?
简要结论:int? 等。
关于「可空类型」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:
- 先用一句话说清定义或结论(如上)
- 补充 2~3 个技术要点或注意事项,体现理解深度
- 在 C# / ASP.NET 项目中,结合自己的代码、配置或表结构举例,避免只背关键词
28. 异常处理?
统一异常处理避免把堆栈直接返回前端,提升体验与安全。
- @ControllerAdvice + @ExceptionHandler 捕获业务/系统异常
- 封装统一 Result(code/msg/data)
- 记录日志便于排错,答辩可展示全局异常类
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
29. using?
Session 在服务端保存登录态,Cookie 携带 JSESSIONID,拦截器校验是否登录。
- 登录成功写入 userId/role 等信息
- 集群需 Redis 共享 Session 或改 JWT
- 答辩能口述登录→访问受保护接口流程
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
30. IEnumerable?
枚举/constants 管理订单状态等,状态机规定合法迁移,防止非法跳转。
- 如 待支付→已支付→已完成
- 更新时校验当前状态
- 答辩结合业务状态字段
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
31. Task?
定时任务按 cron 周期执行,Spring @Scheduled 或 Quartz 管理。
- 如每日统计、过期数据清理
- 注意集群下避免重复执行(分布式锁)
- 答辩说明是否使用及触发时间
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
32. 线程池?
线程池复用线程、限制并发,避免无界 new Thread 导致资源耗尽。
- 核心/最大线程数、队列、拒绝策略
- Boot 可 @Bean ThreadPoolTaskExecutor
- 答辩结合 @Async 或定时任务说明
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
33. 锁 lock?
CLR 是 .NET 公共语言运行时,负责 JIT 编译、GC、类型安全与异常。
- C# 代码编译为 IL 由 CLR 执行
- 跨语言互操作
- 答辩说明 .NET 运行模型
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
34. 记录类型 record?
Java 16+ Record 不可变数据载体,自动生成构造/getter/equals/hashCode。
- 适合 DTO/值对象
- 组件不可变
- 答辩了解新特性即可
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
35. 中间件管道?
简要结论:请求处理链。
关于「中间件管道」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:
- 先用一句话说清定义或结论(如上)
- 补充 2~3 个技术要点或注意事项,体现理解深度
- 在 C# / ASP.NET 项目中,结合自己的代码、配置或表结构举例,避免只背关键词
36. 过滤器 Filter?
Filter 是 Servlet 规范组件,在容器最外层,常用于编码、CORS、XSS 过滤。
- 执行早于 Interceptor
- @WebFilter 或 FilterRegistrationBean 注册
- 答辩区分 Filter 与 Interceptor 顺序
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
37. 模型绑定?
简要结论:请求到对象。
关于「模型绑定」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:
- 先用一句话说清定义或结论(如上)
- 补充 2~3 个技术要点或注意事项,体现理解深度
- 在 C# / ASP.NET 项目中,结合自己的代码、配置或表结构举例,避免只背关键词
38. 模型验证?
IO 阻塞流式读写;NIO Channel/Buffer 非阻塞,适合高并发网络(了解即可)。
- 文件读写用 BufferedReader
- 用完 close 或 try-with-resources
- 答辩说明上传下载用过哪些类
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
39. Winform和ASP.NET核心差异?
Winform是桌面客户端开发,本地运行、无需浏览器、响应快,适合单机局域网系统;ASP.NET是Web开发,浏览器访问、跨设备、可远程访问,适合线上管理平台,根据项目场景选型开发。
40. 仓储模式?
简要结论:封装数据访问。
关于「仓储模式」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:
- 先用一句话说清定义或结论(如上)
- 补充 2~3 个技术要点或注意事项,体现理解深度
- 在 C# / ASP.NET 项目中,结合自己的代码、配置或表结构举例,避免只背关键词
41. 工作单元?
事务保证一组 SQL 同成功同失败,Spring @Transactional 或数据库 BEGIN/COMMIT。
- 下单扣库存典型场景
- 隔离级别影响并发问题
- 答辩指出哪些 Service 加了事务
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
42. 迁移 Migration?
@ConfigurationProperties 将配置前缀批量绑定到 Java 对象,类型安全可读。
- 比 scattered @Value 更易维护
- 配合 @EnableConfigurationProperties 注册
- 答辩可展示自定义配置类
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
43. Code First?
@ConfigurationProperties 将配置前缀批量绑定到 Java 对象,类型安全可读。
- 比 scattered @Value 更易维护
- 配合 @EnableConfigurationProperties 注册
- 答辩可展示自定义配置类
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
44. 懒加载?
类加载:加载→验证→准备→解析→初始化;双亲委派先让父加载器加载,防核心类被篡改。
- 自定义 ClassLoader 了解
- Tomcat 可打破委派
- 答辩说明 JVM 如何找到类
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
45. N+1?
N+1 问题:查 N 条主记录后又逐条查关联,产生大量 SQL。
- 解决:JOIN 一次查出、批量 IN 查询、MyBatis 嵌套/延迟加载谨慎使用
- ORM 项目常见性能坑
- 答辩可结合列表页关联展示说明优化
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
46. 事务?
事务保证一组 SQL 同成功同失败,Spring @Transactional 或数据库 BEGIN/COMMIT。
- 下单扣库存典型场景
- 隔离级别影响并发问题
- 答辩指出哪些 Service 加了事务
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
47. 缓存?
MyBatis 一级缓存是 SqlSession 级别,默认开启,同一会话内重复查询命中缓存。
- 增删改会清空当前 session 缓存
- 会话关闭后缓存失效
- 答辩对比二级缓存的跨 Session 共享特性
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
48. 日志?
日志用于排错、审计与性能分析,常用 SLF4J + Logback/Log4j2。
- 分级别:ERROR/WARN/INFO/DEBUG
- 关键业务、异常、慢接口应记录
- 生产避免打印敏感信息与过量 DEBUG
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
49. 配置?
配置分 dev/test/prod 环境,application-{profile}.yml 或 properties 切换。
- spring.profiles.active 指定环境
- 敏感信息用环境变量,不入库
- 答辩说明本地与服务器配置差异
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
50. 跨域?
跨域是浏览器同源策略限制不同源 AJAX 请求,需服务端 CORS 或 Nginx 反代。
- @CrossOrigin、WebMvcConfigurer、Filter 均可配置
- 允许 Origin、Methods、Headers 需最小化
- 前后端分离联调时高频考点
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
51. Swagger?
Swagger/Knife4j 自动生成接口文档,便于前后端联调与答辩展示。
- @ApiOperation 描述接口
- 生产环境常关闭或加鉴权
- 答辩可打开 doc.html 演示
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
52. 文件上传?
文件上传通过 MultipartResolver 解析 multipart 表单,Controller 接收 MultipartFile。
- 限制大小、后缀白名单,防止恶意文件
- 存储本地目录或 OSS,数据库只存访问 URL
- 答辩可演示上传头像/附件的完整流程
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
53. SignalR?
定时任务按 cron 周期执行,Spring @Scheduled 或 Quartz 管理。
- 如每日统计、过期数据清理
- 注意集群下避免重复执行(分布式锁)
- 答辩说明是否使用及触发时间
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
54. Blazor?
消息队列异步解耦生产消费,削峰填谷;毕设单体可说明同步足够、MQ 为扩展方向。
- 生产者发消息,消费者订阅
- 保证可靠投递与幂等消费
- 答辩如实说明是否引入
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
55. WPF / WinForms?
@ConfigurationProperties 将配置前缀批量绑定到 Java 对象,类型安全可读。
- 比 scattered @Value 更易维护
- 配合 @EnableConfigurationProperties 注册
- 答辩可展示自定义配置类
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
56. 与 Java 对比?
Java 基础题答辩策略:先答概念,再指项目中类/方法/配置印证,最后说注意点。
- 准备 2~3 段可打开的核心代码
- 避免只背八股
- 体现真的写过代码
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
57. NuGet?
DTO/VO/Entity 分层:Entity 映射表,DTO 传参,VO 返前端,避免暴露密码等敏感列。
- Controller 接 DTO,Service 转 Entity
- 返回 VO 控制字段可见性
- 答辩体现规范分层意识
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
58. 单元测试?
单元测试验证模块逻辑,SpringTest + JUnit/Mockito 可 Mock 依赖测 Service。
- 覆盖核心工具方法与关键分支
- 集成测试 @SpringBootTest 启动容器测接口
- 答辩如实说明测试范围与用例数
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
59. 集成测试?
@SpringBootTest 启动完整容器做集成测试,@WebMvcTest 只测 MVC 层。
- MockMvc 模拟 HTTP 请求
- Testcontainers 可启真实 DB
- 答辩说明测试覆盖范围
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
60. 发布配置?
简要结论:Release 优化。
关于「发布配置」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:
- 先用一句话说清定义或结论(如上)
- 补充 2~3 个技术要点或注意事项,体现理解深度
- 在 C# / ASP.NET 项目中,结合自己的代码、配置或表结构举例,避免只背关键词
61. 健康检查?
健康检查 URL 供负载均衡/运维探测服务存活,返回 UP/DOWN 状态。
- Actuator /health 或自建 ping
- 检查 DB、Redis 等依赖
- 答辩说明部署后如何验证
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
62. 密钥管理?
简要结论:UserSecrets / 环境变量。
关于「密钥管理」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:
- 先用一句话说清定义或结论(如上)
- 补充 2~3 个技术要点或注意事项,体现理解深度
- 在 C# / ASP.NET 项目中,结合自己的代码、配置或表结构举例,避免只背关键词
63. 最大难点?
答辩「最大难点」应讲 真实问题:现象→定位→方案→验证。
- 如联表同步、权限越权、分页性能、跨域联调等
- 体现日志、断点、SQL 优化等排错过程
- 避免空泛说「技术难」,要有故事线
结合毕设:在 C# / ASP.NET 项目中,可指出具体类名、配置项或表结构,避免只背概念。
64. 答辩重点?
简要结论:分层清晰、可演示。
关于「答辩重点」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:
- 先用一句话说清定义或结论(如上)
- 补充 2~3 个技术要点或注意事项,体现理解深度
- 在 C# / ASP.NET 项目中,结合自己的代码、配置或表结构举例,避免只背关键词