【问题标题】:Interview questions: WPF Developer [closed]面试问题:WPF 开发人员 [关闭]
【发布时间】:2008-09-12 11:36:58
【问题描述】:

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

入门级

  • 强大的 .NET 2.0 背景并愿意学习!
  • 解释依赖属性?
  • 什么是风格?
  • 什么是模板?
  • 绑定
  • 基类之间的区别:Visual、UIElement、FrameworkElement、Control
  • 视觉与逻辑树?
  • 属性更改通知(INotifyPropertyChange 和 ObservableCollection)
  • ResourceDictionary - 由 a7an 添加
  • UserControls - 由 a7an 添加
  • 气泡和隧道路由策略之间的区别 - 由 Carlo 添加
  • Microsoft 为什么要引入另一种标记语言?
  • XAML

中级

  • 路由事件和命令
  • 转换器 - 由 Artur Carvalho 添加
  • 解释 WPF 的 2-pass 布局引擎?
  • 如何实现面板?
  • 互操作性(WPF/WinForms)
  • Blend/Cider - 由 a7an 添加
  • 动画和故事板
  • ClickOnce Deployment
  • 皮肤/主题
  • 自定义控件
  • 工作线程如何更新 UI?
  • DataTemplate 与 HierarchicalDataTemplate
  • ItemsControl vs ItemsPresenter vs ContentControl vs ContentPresenter
  • 不同类型的触发器

高级

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

还有其他“技巧”问题要问吗?

您希望您的 WPF 开发人员了解 blend 吗?

【问题讨论】:

  • 我不同意“强大的 .NET 2.0 背景”。实际上 WPF 做了很多与 .NET 2.0 不同的事情,知道的更少实际上可以让您更快地掌握 WPF...
  • 一些指向这些主题的链接怎么样!
  • 我认为这是一个相当高的“入门级”标准。我敢打赌,如果工作职位被描述为“入门级”,那么您将不会找到很多(任何)人可以达到您的标准。好东西当然要知道,但不是大多数人所说的“入门级”。
  • 我不会将“freezables 的目的”称为高级 - 如果您要谈论中级线程,那是 freezables 所属的地方。 MVVM/MVP 也不是特别复杂也不神秘。
  • 我认为这些列表应该分成两份,一份用于图形/UI 设计方面,一份用于技术设计方面。 UI 设计师可能应该知道如何使用表达式混合,但不需要了解很多支持技术细节,例如可设计用户控件背后的编码。程序员需要知道如何创建可设计的控件,但不需要使用表达式混合(VS 中的 xaml 设计器应该足够了,直到 UI 设计器可以让它变得漂亮)。

标签: .net wpf


【解决方案1】:

我很惊讶还没有人提到 XAML 的基本知识。了解 XAML 是什么,以及使用 XAML 而不是图形设计工具进行一些基本编辑的能力。中级开发人员应该能够使用 XAMLPad 之类的工具构建表单/图形原型。

【讨论】:

    【解决方案2】:

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

    我根据实际的编程测试结果做出招聘决定的失败率为零。

    任务不必太难。过去,我使用过一个简单的每日消息应用程序,消息保存在数据库或 XML 文件和一个简单的用户界面中。确保您要求他们很好地组织它(因为任务足够小,如果他们觉得有兴趣,可以在一个班级中全部完成)。

    在上面的问题中,我想说你无法很好地了解它们是否真的有任何好处。一个潜在的候选人实际上可以阅读这些并创建听起来很棒的罐头答案。这一切都表明,候选人可以说是可以说的,但对工作本身来说,重要的是他们是否会走路。

    【讨论】:

    • 我完全同意,让人们做事,而不仅仅是谈论它。 @Colin,在您对拼写(自我诊断应用程序问题)的帮助之后,我只需要向您推荐 4 位数字领域......顺便说一句,那里有一种类型:doen 而不是 done。 :)
    • 啊,错字,我的意思是,有趣:)
    • 我部分同意你的观点,但它的时间消耗过程,即使是口头提问也需要更多时间。当然,这样可以选择合适的候选人。
    • 那么,你不同意哪一部分?
    • 我也认为假设“每个 WPF 开发人员都应该知道”上述问题是不现实的。它们更像是一般的谈话要点;不是硬性的先决条件。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      在我看来相当不错的清单。
      不过我不会在面试时问棘手的问题。面试本身就有足够的压力,技巧性的问题即使是技术高超的人也会感到困惑。

      【讨论】:

      • 我同意……面试的重点是评估……而不是绊倒对方。
      • 我不同意这一点,IMO 程序员必须处理棘手的事情,比面试更糟糕。所以一个棘手的问题是很好地了解程序员如何在压力下解决问题。一个简单的“我不知道”会走很长的路。
      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

        WPF 开发人员应该牢牢掌握将 XAML 与代码隐藏区分开来,并且能够详细讨论该线的绘制位置。

        能够以她选择的语言设置模型,然后使用 XAML 通过数据绑定、数据模板、控件模板、样式、触发器、值转换器和用户控件显示该模型的视图是一项相当基本的任务对于中级程序员。 (尽管如果要求某人“发自内心地”创建控制模板之类的东西,则应给予少量余地。)

        真的,WPF 中有很多,如果不是 MSDN 论坛和有关该主题的深入书籍,“随便挑选”将是一项艰巨的任务向上。”出于这个原因,我认为毅力和向他人学习的能力是任何级别的最高要求。

        对于入门级 WPF 程序员,我不期望 WPF 本身有任何知识,但我需要了解面向对象的原则、将 UI 与业务逻辑分离以及熟悉类似的事件模型。以类似于 WPF(使用 DockPanel 容器等)的样式布置 UI 元素的经验是一个加分项。

        编辑:另外,Colin Mackay 所说的。

        【讨论】:

          【解决方案7】:

          一般的 GUI 编程/图形经验和 cs 知识怎么样?如果是全职工作,恕我直言,如果他(或她)有很强的背景,是否必须在前几个月花一些时间学习 WPF。

          【讨论】:

            【解决方案8】:

            入门级

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

            中级

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

            高级

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

            【讨论】:

              【解决方案9】:
              • 线程和Dispatchers是什么关系?
              • Freezables 的用途是什么?
              • 属性和依赖属性有什么区别?为什么要使用一个或另一个?

              【讨论】:

                【解决方案10】:
                • 转换器(简单和多)。
                • 互操作性。

                我想我更喜欢了解 Blend 的开发人员。他/她可以轻松地与设计师交流,并且比仅用 xaml 编写更快地完成一些基本的设计师工作。

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

                干杯

                【讨论】:

                  【解决方案11】:

                  另一个非常基本的事情是气泡和隧道路由策略之间的区别。

                  【讨论】:

                    【解决方案12】:

                    入门级

                    • UX 设计知识
                    • 业务对象的声明式绑定知识
                    • 命令用法

                    高级

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

                    【讨论】:

                      【解决方案13】:

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

                      【讨论】:

                        【解决方案14】:

                        中级或高级

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

                        【讨论】:

                          【解决方案15】:
                          • DataTemplate 与 HierarchicalDataTemplate
                          • ItemsControl vs ItemsPresenter vs ContentControl vs ContentPresenter
                          • 不同类型的触发器
                          • 如何通过 StoryBoard 制作动画

                          【讨论】:

                            【解决方案16】:

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

                            【讨论】:

                            【解决方案17】:

                            我一般会使用 WPF 部署扩展 ClickOnce 部署,因为了解每个模型的限制和特性(ClickOnce、XBAP、仅限浏览器)是很好的。不过,将其置于中等水平似乎是公平的。

                            【讨论】:

                              【解决方案18】:

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

                              【讨论】:

                                【解决方案19】:

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

                                【讨论】:

                                  【解决方案20】:

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

                                  【讨论】:

                                    猜你喜欢
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 2020-06-06
                                    • 1970-01-01
                                    • 2010-09-24
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 1970-01-01
                                    相关资源
                                    最近更新 更多