如何面试.NET/ASP.NET工程师?
链接:https://www.zhihu.com/question/20045362/answer/18131746
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2018-2-28 更新:距离这篇回答发布已经五年过去了,最近还经常受到关注。技术本身在发展,这令我感到有必要来更新一下,希望对新看到的朋友有用。
对于服务器上的 .NET 技术,最新的发展当然是 .NET Core 了,作为全新的 .NET 技术,它继承了旧的 .NET 技术中的优秀特性,剔除了一些广为诟病的遗留问题,以跨平台和开源的新面貌发布了出来。
因此,对 .NET Core 的掌握是一个新时代的 .NET 开发者应该具备的技能。在之前的答案基础上,补充这些新的技能衡量标准:
初级
- 能在 Windows 上使用 Visual Studio 开发基于 NETStandard、NETCoreApp 的应用程序
- 能够运用 Visual Studio 中的包管理工具管理程序中的依赖
- 能够使用 Kestrel 服务器开发自宿主 ASP.NET Core 程序
- 理解 MVC 的概念,以及 MVC 网站的典型代码结构,熟悉 cshtml 语法
- 借助 ASP.NET Core 内置的登录功能、日志工具和 EF Core 等完成常规业务功能的开发
- 运用 ASP.NET Core 内置的功能保护网站的安全
中级
- 理解 NETStandard 及 NETCoreApp 与传统 .NET 运行时的区别与联系
- 熟练使用 dotnet 命令行工具完成应用程序的创建、管理包依赖和打包
- 至少熟练运用一种非 Windows + Visual Studio 的开发环境(如 VSCode、Sublime Text)完成对 .NET Core 应用的开发和调试
- 理解 ASP.NET Core 的管道系统;能够独立基于设计好的多层 ASP.NET Core 应用继续开发;在应用程序中使用第三方组件替换 ASP.NET Core 内置组件(例如,日志工具,依赖注入工具等);遵循给定的设计思路实现复杂的业务需求
- 熟练使用至少一种源代码管理工具,了解基于 .NET Core 的单元测试方法,使用持续集成工具保障代码质量
- 至少熟悉一种热门的前端框架的工作机制(Angular、React 或 Vue 等)
- 熟练开发基于 API 的前后端分离的后端 API,理解对 API 的常规鉴权方法
- 能够在 Linux 和 Windows 服务器上部署基于 Kestrel 的应用程序(基于 IIS 模块或 nginx 的反向代理等)
高级
- 使用 dotnet 命令行工具完成创建应用程序、管理包依赖和单元测试,并能拓展新的工具命令
- 能够运用 TDD 和重构等典型的最佳实践快速完成代码开发,编写优美的代码
- 能够独立设计分布式、多层无状态 http://ASP.NET Core 应用程序
- 能够独立地将 ASP.NET Core 应用程序部署到服务器集群上,提供高性能、高可用的 Web 应用程序服务
- 掌握大量调试 .NET Core 应用程序的方法,高效地解决生产环境服务器上发生的各种问题
- 详细地了解源代码管理工具中的各种技能,支持团队完成代码审查、分支管理和产品发布等流程
- 掌握典型的持续集成和持续交付概念和常规工具的使用方法,能够运用脚本等方法对开发流程、持续集成和部署等步骤进行自动化
- 积极了解其他社区的典型实践与工具,并择优吸收运用到团队中,以改善产品质量、提升开发效率等
=========== 2013年的原回答如下 ============
题主应该是希望了解一些面试 http://ASP.NET 程序员的一些考察方法和方向。
如果您在搜索引擎上找过面试题的话,应该不难找到一些关于 页面生存周期、页面间传值的方法、访问修饰符的用法等“经典”的面试题。
那些都只是些面向初学者的“入门”考试“笔试”而已,完全不能称得上是面试题。
面试与笔试相比,最大的优势就是能通过与应试者当面交流来看出他面对问题时的反应,解决问题的思路和与人沟通的方式等。
因此,我认为面试应该与笔试加以区分。我们公司招聘工程师几乎没有笔试,仅在面试期间偶尔夹杂少许细节问题,以期了解应试者实践经验如何。
结合面试的特点,考察一些思路方面的问题(比如,如何在 Web 窗体与一般处理程序之间作出选择),而不必纠结于语言或平台中具体的某个知识点(如 private 与 protected 的区别)。本质上,它们考察的可能都是对某一项技能的掌握程度,但前者更具有实践意义。
根据所需人才的层次,和对方的实际情况,及其对自己的评价,合理掌握问答气氛和聊天范围。对应届毕业生,宜以兴趣引导、工作热情、学习能力等方面为考察方向,并且营造友好的气氛;而对自称熟练、精通的应试者,则可酌情从广而散的问话中了解对方长短处,并以专而深的方式来了解对方的能力高低,以及风格是否细致负责。这方面的考察,请参考
提到的 再谈“我是怎么招聘程序员的”(上) 一文中的论述。
附:我认为.NET 和 http://ASP.NET 开发者,应该具备以下技能:
初级:
- 对 C#(推荐) 或 VB 语言直至与 .NET 4 (目前为止)相匹配的版本,绝大多数特性熟悉并使用过
- 通晓 HTTP 协议的结构,及 http://ASP.NET 与 HTTP 请求、Web 页面之间的关系
- 能独立运用 HTML 构建页面,并掌握一定的 JavaScript、CSS 知识
- 能独立开发具有业务功能的 Web Form 或 MVC 应用程序
- 能完成到本地 IIS 和服务器上的发布,有 Web 安全意识
中级:
- 熟练使用 .NET 4 及更新版本的特性,知晓不同大版本之间的差异,以及各版本平台、语言和开发工具的对应关系
- 使用 http://ASP.NET MVC 以及 Web Form 开发项目,并了解两种机制的异同,根据项目场景作出合适的选择
- 知晓 IIS 7 集成模式,并了解与经典模式的异同;熟悉 http://ASP.NET 运行机制,独立完成模块和处理程序的开发
- 有系统分层的概念,能使用面向对象的方法创建模型和服务,能独立组织出解决方案的结构
- 运用设计工具独立设计数据库,运用 ORM 工具与多种数据源的交互,知晓各种数据源的大概差异
- 至少使用过一种源代码管理工具,参与过 2 人以上协作完成的项目
高级:
- 至少对一种其他的服务器开发平台(如 LAMP、Java、Python、Node.js 等)有深入的了解,并清楚其与 http://ASP.NET 之间的主要区别;明确 http://ASP.NET 在整个项目布局中所处的位置
- 对 C# 3.0 以上版本(或 VB 对应版本)有深入研究,熟练地处理多线程开发;合理运用异步和 COM 组件等功能解决问题
- 深入了解 http://ASP.NET 运行机制,对应用程序域、配置、模板引擎、编译、请求处理管线等十分了解
- 能独立完成 http://ASP.NET Web Form 中用户控件、服务器控件的编写;对 http://ASP.NET MVC 中的路由机制、控制器调用方式、过滤器、模型绑定与验证等特性十分熟悉,并能根据现有机制轻松完成扩展与定制
- 能结合对 WCF 和 Web API 等技术的应用,构建分布式的系统
- 清楚 IIS 的集成模式与经典模式、请求过滤与跟踪、信任级别等特性与功能以及应用程序池进程数量、进程模型、回收等特性与功能对应用程序的影响
- 对项目的性能、压力和安全性要求有明确的认识,熟练运用 http://ASP.NET 输出缓存、进程内或分布式数据缓存提高性能;合理配置 IIS 输出缓存、压缩;了解常见的 Web 攻击方法并加以防范
- 熟知请求和响应在各个过程的状态,并适时完成诸如请求流预处理、拦截、缓存、统计等功能
- 对常见设计模式和思想非常熟悉,合理在项目中加以应用;熟练运用常见的开源和第三方库,结合项目需求,合理选用 DI、ORM 等用于提升开发效率的工具
- 能独立完成大型项目的架构,独立完成系统中日志、缓存、数据处理等基础功能的开发计划
- 对整个项目数据库设计、界面实现与优化、领域模型和数据服务、调试与测试、部署与服务器配置均能完整掌控
- 能完成组织和协调 5 人以上人员参与的项目的开发计划和工作分配,把握开发进度,激励团队前进
当然,对于更高级的人才,上不封顶。