面试问题: WPF 开发人员

每个 WPF 开发人员应该知道什么?

入门级

  • 有较强的.NET 2.0背景,愿意学习!
  • 解释依赖属性?
  • 什么风格?
  • 模板是什么?
  • 有约束力
  • 基类之间的差异: Visual、 UIElement、 FrameworkElement、 Control
  • 视觉树与逻辑树? ?
  • 属性更改通知(INotifyPropertyChange 和 Observer ableCollection)
  • ResourceDictionary-由 a7an 添加
  • UserControls-由 a7an 添加
  • 气泡和隧道布线策略之间的差异-由卡罗增加
  • 为什么微软要引入另一种标记语言?
  • XAML

中层

  • 路由事件和命令
  • 转换器-由阿图尔卡瓦略增加
  • 解释 WPF 的2通道布局引擎?
  • 如何实现面板?
  • 互用性(WPF/WinForms)
  • 混合 /苹果酒-由 a7an 添加
  • 动画和故事板
  • ClickOnce 部署
  • 皮肤/主题
  • 自定义控制
  • 工作线程如何更新 UI?
  • 数据模板与层次化数据模板
  • ItemsControl 对 ItemsPresenter 对 ContentControl 对 ContentPresenter
  • 不同类型的触发器

前辈

  • 附加行为的例子?
  • 什么是棱镜、 CAL 和 CAG?
  • 工作线程如何更新 UI?
  • WPF 3D-由 a7an 添加
  • Silverlight 2和 WPF 的区别
  • MVVM/MVP-由 a7an 添加
  • WPF 性能调优
  • 像素着色器
  • 冻结物料的用途

还有其他 “诡计”的问题要问吗?

你期望你的 WPF 开发知道混合?

70271 次浏览

我觉得这个名单不错。
但是我不会在面试中问 很狡猾的问题。面试本身就给人足够的压力,陷阱问题甚至可以迷惑技术高超的人。

  • 转换器(简单和多)。
  • 互操作性。

我想我会更喜欢一个开发人员,会知道 混合。他/她可以很容易地与设计师沟通,也可以比仅仅用 xaml 写作更快地完成一些基本的设计工作。

这个列表很有趣,也许链接到主题会有所帮助。

干杯

入门级

  • 物业更改通知书 (INotifyPropertyChange 和 可观测收集)
  • ResourceDictionary 资源字典
  • 用户控件

半山

  • 果汁/苹果酒
  • 动画和故事板
  • ClickOnce 部署

前辈

  • WPF 3D
  • Silverlight 2之间的差异 和 WPF
  • MVVM/MVP
  • WPF 性能调优
  • 像素着色器

中级或高级: WinForms 和 WPF 互操作。

我会把绑定和转换器放在入门级,因为这就是您在 WPF 中花费大量时间的方式。

我很惊讶还没有人提到 XAML 的基本知识。知道什么是 XAML,并且能够使用 XAML 而不是图形化设计工具进行一些基本的编辑。中级开发人员应该能够使用像 XAMLPad 这样的工具构建表单/图形原型。

我认为 WPF 应用程序的生命周期——从创建到运行时——应该包括在初学者级别的问题中。不知道它,它很难相信一个是一个真正的 WPF 开发。

中年,也可能是老年

  • 皮肤/主题
  • 自定义控制

通常,我会使用 WPF Deployment 扩展 ClickOnce 部署,因为了解每种模型(ClickOnce、 XBAP,仅限于浏览器)的局限性和特性是很好的。不过,把它放在中等水平似乎是公平的。

就个人而言,我会把“工作线程如何更新用户界面”放在入门级下面。中等水平,如果你真的需要的话。如果入门级程序员能够理解逻辑树和可视化树之间的区别,那么他们应该能够理解如何从后台线程更新 UI。

在我的组织,我们做了很多 WPF 开发没有混合。我不是特别喜欢 Blend,所以我有一点偏见,但是我认为 Blend 技能应该是一个不错的选择。

有没有 GUI 编程/图形处理的一般经验和 CS 知识?如果是全职工作,恕我直言,如果这个家伙必须花几个月的时间学习 WPF,如果他(或她)有很强的背景,这并不重要。

  • 线程和 Dispatcher 之间的关系是什么?
  • 冷冻食品的目的是什么?
  • 属性和依赖项属性之间的区别是什么? 为什么要使用这两个属性?
  • 数据模板与层次化数据模板
  • ItemsControl 对 ItemsPresenter 对 ContentControl 对 ContentPresenter
  • 不同类型的触发器
  • 如何通过故事板制作动画

WPF 开发人员应该牢牢掌握如何将 XAML 与代码隐藏分离开来,并能够详细讨论在哪里画出这条线。

能够用自己选择的语言建立一个模型,然后使用 XAML 通过数据绑定、数据模板、控制模板、样式、触发器、值转换器和 UserControls 显示模型上的视图,对于中级程序员来说是一个相当基本的任务。(不过,如果要求某人“发自内心地”创建类似于控制模板的东西,应该给予一些回旋余地。)

实际上,WPF 中有 很多,如果没有 MSDN 论坛和关于这个主题的深入书籍,“只是把它捡起来”将是相当艰巨的任务基于这个原因,我认为坚持不懈和向他人学习的能力是任何级别的最高要求。

对于一个入门级的 WPF 程序员来说,我不会期望任何关于 WPF 本身的知识,但是我会要求了解面向对象的原则、将 UI 从业务逻辑中分离出来,以及熟悉类似的事件模型。有以类似于 WPF (使用 DockPanel 容器等)的风格布局 UI 元素的经验者优先。

编辑: 还有 Colin Mackay 说的。

就个人而言,我会让他们坐在一台标准开发人员构建机器前,让他们完成一些任务。没有问题,只是看看他们的代码是什么样子后,几个小时(或更多,如果任务更长)。

根据现实生活中编程测试的结果,我做出招聘决定的失败率为零。

这项任务不必太难。过去,我曾使用过当天应用程序的一个简单消息,这些消息保存在数据库或 XML 文件中,并使用了一个简单的用户界面。确保你要求他们把任务组织得很好(因为任务足够小,如果他们愿意的话,可以在一个类中完成)。

对于上面的问题,我想说的是,你不能很好地判断它们是否真的有用。一个潜在的候选人实际上可以只是读这些,并创造听起来很棒的罐装答案。所有这些都表明,候选人可以说到做到,但在工作本身中,重要的是他们是否可以行动起来。

另一个真正基本的问题是泡沫和隧道路由策略之间的区别。

样式为您提供了一种机制 在应用程序中应用主题,并在需要覆盖该主题的特定实例中覆盖该主题。 样式的定义类似于资源; 实际上,它们是在 定义了哪些资源。

入门级

  • 用户体验设计知识
  • 业务对象的声明性绑定知识
  • 命令使用

前辈

  • 资源优化及性能调优
  • 模块化和可伸缩性
  • 异步编程模型

放入数据模板选择器: http://www.switchonthecode.com/tutorials/wpf-tutorial-how-to-use-a-datatemplateselector对 MVVM 根据值交换模板有很大的帮助。

了解单元测试以及它对如何使用 WPF 的影响是我在入门级会提到的一项基本技能。人们可以学习细节,但是如果他们没有考虑到软件设计的基础知识,那么你就有问题了。