面试问题:WPF开发者

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

入门级

  • 强大的.NET 2.0背景和愿意学习!
  • 解释依赖属性?
  • 什么是风格?
  • 什么是模板?
  • 捆绑
  • 基类之间的区别:Visual,UIElement,FrameworkElement,Control
  • 视觉vs逻辑树?
  • 属性更改通知(INotifyPropertyChange和ObservableCollection)
  • ResourceDictionary – 由a7an添加
  • UserControls – 由a7an添加
  • 泡沫和隧道路线策略之间的区别 – 由Carlo添加
  • 为什么微软又推出另一种标记语言?
  • XAML

中级

  • 路由事件和命令
  • 转换器 – 由Artur Carvalho添加
  • 说明WPF的2遍布局引擎?
  • 如何实施面板?
  • 互操作性(WPF / WinForms)
  • 混合 / 苹果酒 – 由a7an添加
  • animation和故事板
  • ClickOnce部署
  • 剥皮/更换主题皮肤
  • 自定义控件
  • 工作线程如何更新UI?
  • DataTemplate vs HierarchicalDataTemplate
  • ItemsControl vs ItemsPresenter vs ContentControl vs ContentPresenter
  • 不同types的触发器

前辈

  • 附加行为的例子?
  • 什么是PRISM,CAL&CAG?
  • 工作线程如何更新UI?
  • WPF 3D – 由a7an添加
  • Silverlight 2和WPF的区别
  • MVVM / MVP – 由a7an添加
  • WPF性能调优
  • 像素着色器
  • Freezables的目的

任何其他“诡计”的问题要问?

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

我很惊讶没有人提到XAML的基本知识。 了解XAML是什么,以及使用XAML而不是graphicsdevise工具进行一些基本编辑的能力。 中级开发人员应该可以使用像XAMLPad这样的工具来打开表单/graphics原型。

就我个人而言,我会把它们放在一个标准的开发人员构build机器前面,并要求他们完成一些任务。 没有任何问题,只需几个小时后看看他们的代码是什么样的(或者如果任务更长的话更多)。

根据实际的实际编程testing的结果,我做了一个招聘决策的失败率为零。

这个任务不需要太困难。 过去,我使用了一个简单的日常应用程序消息,消息被保存在数据库或XML文件以及简单的用户界面中。 确保你要求他们把它组织好(因为任务是足够小的,如果他们觉得这样做可以在一个class级完成)。

在上面的问题中,我会说你不知道他们是否真的好。 一个潜在的谨慎可能实际上只是阅读这些,创造听起来不错的jar装答案。 这一切都表明候选人可以谈话,但是工作本身的重点在于他们是否可以走路。

我把绑定和转换器在入门级,因为这是你花了很多时间在WPF。

在我看来,这是非常好的列表。
不过,我不会在面试中提出棘手的问题。 面试本身就给人足够的压力,诡计的问题甚至可以让高技能的人迷惑。

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

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

WPF开发人员应该牢牢把握XAML与代码隐藏的区别,并且能够详细讨论将要绘制的线段。

通过数据绑定,数据模板,控件模板,样式,触发器,值转换器和UserControls,能够使用她select的语言设置模型,然后使用XAML显示该模型的视图,级程序员。 (如果要求某人从心里创造一个类似控制模板的东西,应该给予less量的余地。)

实际上,WPF 有很多 ,如果不是MSDN论坛和关于这个主题的深入的书籍,那么“只是把它捡起来”的任务就完成了。 出于这个原因,我会坚持不懈,把自己的学习能力作为任何一个层次的最高要求。

对于入门级的WPF程序员来说,我不会期望任何WPF本身的知识,但是我会要求知道面向对象的原则,UI与业务逻辑的分离以及类似事件模型的舒适性。 以类似于WPF的风格(使用DockPanel容器等)布局UI元素是一个优点。

编辑:另外,科林麦凯说。

入门级

  • 属性更改注释(INotifyPropertyChange和ObservableCollection)
  • 资源字典
  • 用户控件

中级

  • 混合/苹果酒
  • animation和故事板
  • ClickOnce部署

前辈

  • WPF 3D
  • Silverlight 2和WPF的区别
  • MVVM / MVP
  • WPF性能调优
  • 像素着色器

一般的GUI编程/graphics体验和cs知识如何? 如果是全职工作,那么恕我直言,如果他(或她)有一个强大的背景,那么这个人必须花一些时间学习WPF。

  • 线程和调度程序之间的关系是什么?
  • 什么是Freezables的目的?
  • 属性和依赖属性之间有什么区别? 为什么使用这个或另一个?
  • 转换器(简单和多)。
  • 互操作性。

我想我会更喜欢一个会知道Blend的开发者 。 他/她可以很轻松地与devise师进行交stream,也可以比使用xaml写作更快速地完成一些基本的devise工作。

该列表很有趣,也许链接到主题将有所帮助。

干杯

另一个真正基本的东西就是泡沫和隧道路由策略的区别。

中或高级:WinForms和WPF InterOp。

中间或者也许是高级

  • 剥皮/更换主题皮肤
  • 自定义控件

入门级

  • UXdevise知识
  • 关于业务对象的声明性绑定知识
  • 命令用法

前辈

  • 资源优化和性能调整
  • 模块化和可扩展性
  • asynchronous编程模型

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

我一般会用WPF部署扩展ClickOnce部署,因为知道每个模型(ClickOnce,XBAP,仅限于浏览器)的局限性和特性是很好的。 把它放在中等水平似乎是公平的。

  • DataTemplate vs HierarchicalDataTemplate
  • ItemsControl vs ItemsPresenter vs ContentControl vs ContentPresenter
  • 不同types的触发器
  • 如何通过StoryBoards做animation

样式为您提供了一种机制,可以跨应用程序应用主题,并在需要的特定实例中覆盖该主题。 样式被定义为资源; 实际上,它们是在定义资源的XAML文件的同一部分中定义的。

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

了解unit testing及其对WPF使用方式的影响是我在入门级上的基本技能。 人们可以学习细节,但如果他们没有想到软件devise的基础知识,那么你就有一个问题。