如何面试.NET/ASP.NET工程师?

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 和重构等典型的最佳实践快速完成代码开发,编写优美的代码

  • 能够独立设计分布式、多层无状态 ASP.NET Core 应用程序

  • 能够独立地将 ASP.NET Core 应用程序部署到服务器集群上,提供高性能、高可用的 Web 应用程序服务

  • 掌握大量调试 .NET Core 应用程序的方法,高效地解决生产环境服务器上发生的各种问题

  • 详细地了解源代码管理工具中的各种技能,支持团队完成代码审查、分支管理和产品发布等流程

  • 掌握典型的持续集成和持续交付概念和常规工具的使用方法,能够运用脚本等方法对开发流程、持续集成和部署等步骤进行自动化

  • 积极了解其他社区的典型实践与工具,并择优吸收运用到团队中,以改善产品质量、提升开发效率等



=========== 2013年的原回答如下 ============


题主应该是希望了解一些面试 ASP.NET 程序员的一些考察方法和方向。
如果您在搜索引擎上找过面试题的话,应该不难找到一些关于 页面生存周期、页面间传值的方法、访问修饰符的用法等“经典”的面试题。
那些都只是些面向初学者的“入门”考试“笔试”而已,完全不能称得上是面试题。

面试与笔试相比,最大的优势就是能通过与应试者当面交流来看出他面对问题时的反应,解决问题的思路和与人沟通的方式等。
因此,我认为面试应该与笔试加以区分。我们公司招聘工程师几乎没有笔试,仅在面试期间偶尔夹杂少许细节问题,以期了解应试者实践经验如何。

结合面试的特点,考察一些思路方面的问题(比如,如何在 Web 窗体与一般处理程序之间作出选择),而不必纠结于语言或平台中具体的某个知识点(如 private 与 protected 的区别)。本质上,它们考察的可能都是对某一项技能的掌握程度,但前者更具有实践意义。

根据所需人才的层次,和对方的实际情况,及其对自己的评价,合理掌握问答气氛和聊天范围。对应届毕业生,宜以兴趣引导、工作热情、学习能力等方面为考察方向,并且营造友好的气氛;而对自称熟练、精通的应试者,则可酌情从广而散的问话中了解对方长短处,并以专而深的方式来了解对方的能力高低,以及风格是否细致负责。这方面的考察,请参考

@走过

提到的 再谈“我是怎么招聘程序员的”(上) 一文中的论述。



附:我认为.NET 和 ASP.NET 开发者,应该具备以下技能:

初级:

  • 对 C#(推荐) 或 VB 语言直至与 .NET 4 (目前为止)相匹配的版本,绝大多数特性熟悉并使用过

  • 通晓 HTTP 协议的结构,及 ASP.NET 与 HTTP 请求、Web 页面之间的关系

  • 能独立运用 HTML 构建页面,并掌握一定的 JavaScript、CSS 知识

  • 能独立开发具有业务功能的 Web Form 或 MVC 应用程序

  • 能完成到本地 IIS 和服务器上的发布,有 Web 安全意识



中级:

  • 熟练使用 .NET 4 及更新版本的特性,知晓不同大版本之间的差异,以及各版本平台、语言和开发工具的对应关系

  • 使用 ASP.NET MVC 以及 Web Form 开发项目,并了解两种机制的异同,根据项目场景作出合适的选择

  • 知晓 IIS 7 集成模式,并了解与经典模式的异同;熟悉 ASP.NET 运行机制,独立完成模块和处理程序的开发

  • 有系统分层的概念,能使用面向对象的方法创建模型和服务,能独立组织出解决方案的结构

  • 运用设计工具独立设计数据库,运用 ORM 工具与多种数据源的交互,知晓各种数据源的大概差异

  • 至少使用过一种源代码管理工具,参与过 2 人以上协作完成的项目



高级:

  • 至少对一种其他的服务器开发平台(如 LAMP、Java、Python、Node.js 等)有深入的了解,并清楚其与 ASP.NET 之间的主要区别;明确 ASP.NET 在整个项目布局中所处的位置

  • 对 C# 3.0 以上版本(或 VB 对应版本)有深入研究,熟练地处理多线程开发;合理运用异步和 COM 组件等功能解决问题

  • 深入了解 ASP.NET 运行机制,对应用程序域、配置、模板引擎、编译、请求处理管线等十分了解

  • 能独立完成 ASP.NET Web Form 中用户控件、服务器控件的编写;对 ASP.NET MVC 中的路由机制、控制器调用方式、过滤器、模型绑定与验证等特性十分熟悉,并能根据现有机制轻松完成扩展与定制

  • 能结合对 WCF 和 Web API 等技术的应用,构建分布式的系统

  • 清楚 IIS 的集成模式与经典模式、请求过滤与跟踪、信任级别等特性与功能以及应用程序池进程数量、进程模型、回收等特性与功能对应用程序的影响

  • 对项目的性能、压力和安全性要求有明确的认识,熟练运用 ASP.NET 输出缓存、进程内或分布式数据缓存提高性能;合理配置 IIS 输出缓存、压缩;了解常见的 Web 攻击方法并加以防范

  • 熟知请求和响应在各个过程的状态,并适时完成诸如请求流预处理、拦截、缓存、统计等功能

  • 对常见设计模式和思想非常熟悉,合理在项目中加以应用;熟练运用常见的开源和第三方库,结合项目需求,合理选用 DI、ORM 等用于提升开发效率的工具

  • 能独立完成大型项目的架构,独立完成系统中日志、缓存、数据处理等基础功能的开发计划

  • 对整个项目数据库设计、界面实现与优化、领域模型和数据服务、调试与测试、部署与服务器配置均能完整掌控

  • 能完成组织和协调 5 人以上人员参与的项目的开发计划和工作分配,把握开发进度,激励团队前进


当然,对于更高级的人才,上不封顶。


原文:https://www.zhihu.com/question/20045362/answer/18131746


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322016.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

欢乐纪中A组赛【2019.8.18】

前言 有一个暴力写挂了QVQQVQQVQ 成绩 RankRankRankPersonPersonPersonScoreScoreScoreAAABBBCCC111111(J−3)LRZ(J-3)LRZ(J−3)LRZ140140140100100100303030101010191919(J−3)WYC(J-3)WYC(J−3)WYC120120120100100100101010101010262626(J−3)HZB(J-3)HZB(J−3)HZB100100100…

Asp.Net Core 2.1+的视图缓存(响应缓存)

响应缓存Razor 页与 ASP.NET 核心 2.0 中不支持。 此功能将支持ASP.NET 核心 2.1 版本。在老的版本的MVC里面,有一种可以缓存视图的特性(OutputCache),可以保持同一个参数的请求,在N段时间内,直接从mvc的缓存中读取,不…

Json.NET 不再有超过120个依赖项

Json.NET是.NET的官方的JSON解析和序列化库,它取代了Microsoft实际提供的库。但是当把Json.NET推向.NET Standard时,出现了一些问题。除了在该平台上无法使用的众多方法之外,在NET Standard 1.3上的Json.NET需要高达122个依赖包。随着适用于.…

C#热度不如Java?网友呛声:还有使用C#不能完成的工作?

C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言,自发布以来受到了程序员的广泛关注。C#与Java有着很多相似之处,例如,单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是与Java每月被…

EntityFramework Core 2.0执行原始查询如何防止SQL注入?

前言接下来一段时间我们来讲讲EntityFramework Core基础,精简的内容,深入浅出,希望为想学习EntityFramework Core的童鞋提供一点帮助。EntityFramework Core执行原始查询在EntityFramework Core中执行原始查询我们借助FromSql来实现&#xff…

EntityFramework Core 2.0自定义标量函数两种方式

前言上一节我们讲完原始查询如何防止SQL注入问题同时并提供了几种方式。本节我们继续来讲讲EF Core 2.0中的新特性自定义标量函数。自定义标量函数两种方式在EF Core 2.0中我们可以将方法映射到数据库中的标量函数,我们可在LINQ中调用此方法并会被正确翻译成SQL语句…

ASP.NET Core远程调试

关于ASP.NET Core远程调试的具体做法可参考微软文档——Remote Debug ASP.NET Core on a Remote IIS Computer in Visual Studio 2017,详细做法不再赘述,这里主要记录下自己的感受。体验Web Deploy这种发布方式可直接将代码打包发到指定服务器的指定站点…

修复.NET的HttpClient

早在2016年我们就报道过 ,.NET的HttpClient存在一些问题。随着.NET Core 2.1中HttpClientFactory的引入,其中部分问题已经得到缓解。HttpClient的根本问题是,每次调用资源好像都应该在使用后立即释放。在现实中,那意味着每个目标服…

欢乐纪中A组赛【2019.8.20】

前言 Rank1???Rank1???Rank1??? 成绩 RankRankRankPersonPersonPersonScoreScoreScoreAAABBBCCC111(J−3)WYC(J-3)WYC(J−3)WYC145145145100100100000454545212121(J−3)ZYC(J-3)ZYC(J−3)ZYC636363383838000252525353535(J−3)XXY(J-3)XXY(J−3)XXY45454500000045454…

Asp.Net Core2.0 基于QuartzNet任务管理系统

Quartz.NET官网地址:https://www.quartz-scheduler.net/Quartz.NET文档地址:https://www.quartz-scheduler.net/documentation/index.htmlQuartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成…

64位的Mac OS X也有Windows.Forms了

Mono长期以来一直为Linux、Mac和Windows提供Windows.Forms的纯C#实现。随着技术潮流的变化,Mono的Windows.Forms平台仍然没有得到很好的发展,还只是各种第三方库和应用程序的依赖,这使得它的重要性超过了那些基于WinForms的应用程序。Mono默认…

.Net 4.X 提前用上 .Net Core 的配置模式以及热重载配置

1. 前言在提倡微服务及 Serverless 越来越普及的当下,传统 .Net 应用的配置模式往往依赖于一个名为 web.config 的 XML 文件,在可扩展性和可读性与时代脱节了。当然,我不会怂恿一下子把所有应用迁移到 .Net Core 上,本文将在尽量不…

C# 枚举特性 FlagAttribute 的应用

写在前面枚举Enum 全称(Enumeration),即一种由一组称为枚举数列表的命名常量组成的独特类型。可以看出枚举的出现是为了使我们可以在程序中方便的使用一些特定值的常量,一般的使用大家都比较熟悉,本文主要介绍枚举的特性 FlagAttribute。Flag…

重温.NET下Assembly的加载过程

最近在工作中牵涉到了.NET下的一个古老的问题:Assembly的加载过程。虽然网上有很多文章介绍这部分内容,很多文章也是很久以前就已经出现了,但阅读之后发现,并没能解决我的问题,有些点写的不是特别详细,让人…

看eShopOnContainers学一个EventBus

最近在看微软eShopOnContainers 项目,看到事件总线觉得不错,和大家分享一下看完此文你将获得什么?eShop中是如何设计事件总线的实现一个InMemory事件总线eShop中是没有InMemory实现的,这算是一个小小小的挑战发布订阅模式发布订阅…

创建基于MailKit和MimeKit的.NET基础邮件服务

邮件服务是一般的系统都会拥有和需要的功能,但是对于.NET项目来说,邮件服务的创建和使用会较为的麻烦。.NET对于邮件功能提供了System.Net.Mail用于创建邮件服务,该基础服务提供邮件的基础操作,并且使用也较为的简单。对于真正将该…

EF Core下利用Mysql进行数据存储在并发访问下的数据同步问题

小故事在开始讲这篇文章之前,我们来说一个小故事,纯素虚构(真实的存钱逻辑并非如此)小刘发工资后,赶忙拿着现金去银行,准备把钱存起来,而与此同时,小刘的老婆刘嫂知道小刘的品性&…

牛客练习赛50-记录

正题 比赛链接:https://ac.nowcoder.com/acm/contest/1080#question 成绩 本届 升高二届 总结 以后还是不要写太多自己不擅长的写法,空间要多检查,不要像个傻逼一样啥都写错。 尽量不要为了省一点空间和时间写一些不舒服的东西,尽量在能…

物联网框架ServerSuperIO在.NetCore实现跨平台的实践路线

正所谓天下大势,不跟风不行。你不跨平台,很low嘛。java说:你们能跨嘛,跨给我看看。C#说:不要强人所难嘛。java说:能部署在云上吗?docker?微服务?C#说:不要强人…

使用WebApiClient请求和管理Restful Api

前言本篇文章的内容是WebApiClient应用说明篇,如果你没有了解过WebApiClient,可以先阅读以下相关文章:WebApi client 的面向切面编程我来给.Net设计一款HttpClient.Net45下HttpClient的几个缺陷.net的retrofit--WebApiClient库.net的retrofit…