《 嵌入式系统设计与实践》一一2.4 延伸阅读

简介: 本节书摘来自华章出版社《 嵌入式系统设计与实践 》一 书中的第2章,第2. 4节,作者:Elecia White 著 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看

2.4 延伸阅读
本章中讨论了众多设计模式中的一些模式。本书其他部分也会讨论一些设计模式,但是本书是关于嵌入式系统的,而不是关于设计模式的。试着从以下这些资源中选择一个进行进一步研究,以便更多地了解标准的软件设计模式。
Gamma, Erich, Richard Helm, Ralph Johnson和 John Vlissides. 1995. 设计模式: 可复用面向对象软件的基础。Boston: Addison-Wesley. 这是最早的关于设计模式的著作。这本书采用了C++作为参考语言。
Freeman, Elisabeth, Eric Freeman, Bert Bates和 Kathy Sierra. 2004. 《Head First设计模式》。Design Patterns: Cambridge, MA: O扲elly采用Java作为参考语言,这本书用一种引人入胜的方式给出了大量关于设计模式的例子。
在Wikipedia上搜索,“software design pattern”。
面试问题:创建一个架构
描述一下这个(从房间里挑一样东西)会议电话的架构。
试图从面试房间中寻找有意义的东西有一定的不确定性,因为那里通常缺少比较有趣的东西。会议电话通常被选得最多,因为在某些情况下,它是房间里最复杂的系统。另一个比较好的对象就是投影仪。
当问这个问题时,我想知道面试人能否将一个问题分解成小的部分。我想知道他们分解一个对象时的思维过程。总的来说,从输入和输出开始是比较靠谱的选择。对于会议电话,扬声器和显示屏是输出部分,按键和麦克风是输入部分。我期望能看到将这些东西在一张纸上用方框图表示出来。面试人不应该害怕以至于不敢拿起电话来观察其连接部分。这些连接部分也是输入和输出。当他们完成对物理硬件的分解之后,就可以通过问(自己)一些问题来弄清楚每个组件是如何工作的:电源按钮如何工作?软件接口怎样与它连接?麦克风如何工作?对系统其他部分的影响是什么(例如,是否需要模数转换器)?
面试人会因为提到一些好的软件设计实践而得分。从调用最底层的驱动模块到上一个层次的对象是一个比较好的开头。同样,如果能听到一些诸如系统的某些部分会在将来的电话中被复用,并且尽可能将它们封装的说法也是很不错的。
我希望他们可以问一些关于特定功能或者可能设计目标(成本)的问题。但是,他们可以自己决定问题到底详细到什么程度。需要讨论网络吗?我们可以假设这是一个在IP网络上传输声音的电话(VoIP)。要完全跳过这个问题?那么我们可以专注于如何在一个小型数据库或者链表中存储电话号码。当他们能谈论一些他们感兴趣的东西,特别是那些我在其他面试中没有机会问到的问题时,我会感到非常高兴。
我希望能看到对这个系统有个比较好的把握,但是我也不介意面试人选择在某个方面钻研得深入一些。这个问题给出了一定的自由度,让他们可以针对设计电话时如何利用他们的经验提供了一个比较详细的描述。在我提问的时候,我不介意他们承认自己无知的同时谈论一些他们确实知道的东西。
对一个面试者就架构问题进行提问,并不是希望得到完美的技术细节。能够画出一些东西,即使不是非常清晰,也是非常重要的。这个问题的意图是希望能够看到面试人展示其解决问题的热情和高效地表达其思路的能力。

相关文章
|
29天前
|
存储 XML 开发工具
探索安卓应用开发:从基础到进阶
在这篇文章中,我们将一起踏上安卓应用开发的旅程。不论你是编程新手还是希望提升技能的开发者,这里都有你需要的东西。我们会从最基础的概念开始,逐步深入到更复杂的主题。文章将涵盖开发环境设置、用户界面设计、数据处理以及性能优化等方面。通过理论与实践的结合,你将能够构建出既美观又高效的安卓应用。让我们一起开启这段技术之旅吧!
|
24天前
|
人工智能 安全 算法
基于C语言的嵌入式系统开发,涵盖嵌入式系统概述、C语言的优势、开发流程、关键技术、应用实例及面临的挑战与未来趋势。
本文深入探讨了基于C语言的嵌入式系统开发,涵盖嵌入式系统概述、C语言的优势、开发流程、关键技术、应用实例及面临的挑战与未来趋势。C语言因其高效、可移植、灵活及成熟度高等特点,在嵌入式系统开发中占据重要地位。文章还介绍了从系统需求分析到部署维护的完整开发流程,以及中断处理、内存管理等关键技术,并展望了嵌入式系统在物联网和人工智能领域的未来发展。
53 1
|
4月前
|
Java Android开发 开发者
探索安卓应用开发:从基础到实践
【8月更文挑战第31天】在这篇文章中,我们将一起踏上安卓应用开发的旅程。无论你是初学者还是有一定经验的开发者,这里都有适合你的内容。文章将引导你理解安卓开发的基础知识,然后通过实际的代码示例,带你一步步构建一个简单的应用程序。我们的目标是让读者能够不仅理解安卓开发的理论基础,还能通过动手实践来巩固这些知识。所以,拿起你的设备,让我们一起开始吧!
|
4月前
|
自然语言处理 前端开发 JavaScript
前端进阶必读:JS闭包深度解析,掌握这一特性,你的代码将焕然一新!
【8月更文挑战第23天】闭包是JavaScript的一项高级功能,让函数能够访问和操作外部函数作用域中的变量。本文深入解析闭包概念、组成及应用场景。闭包由函数及其词法环境构成,通过在一个函数内定义另一个函数来创建。它有助于封装私有变量、维持状态和动态生成函数。然而,不当使用闭包可能导致内存泄漏或性能问题。掌握闭包对于实现模块化代码和成为优秀前端开发者至关重要。
45 0
|
7月前
|
存储 传感器 数据采集
嵌入式系统:原理、应用与代码实践
嵌入式系统:原理、应用与代码实践
270 1
|
7月前
|
传感器 C++
精通嵌入式开发:从原理到实践
嵌入式开发是一门涉及硬件和软件交叉领域的技术,要想精通这门技术,需要从理论基础到实际操作都有深入的了解和实践。
79 3
|
7月前
|
存储 缓存 算法
作者推荐 | 【底层服务/编程功底系列】「底层技术原理」史上最清晰的采用程序员的视角方式进行深入探索Linux零拷贝技术原理及实现
作者推荐 | 【底层服务/编程功底系列】「底层技术原理」史上最清晰的采用程序员的视角方式进行深入探索Linux零拷贝技术原理及实现
63 0
|
存储 数据挖掘 芯片
嵌入式软件设计专栏导读
嵌入式软件设计专栏导读
145 0
|
Linux C语言 SoC
嵌入式学习难点 嵌入式软件学习
嵌入式学习不是一蹴而就的,需要不断的积累,如果是希望向嵌入式软件方向发展的话,目前最常见的是嵌入式Linux方向,关注这个方向,我认为大概分3个阶段:     嵌入式学习难点 嵌入式软件学习3个阶段 1、嵌入式linux上层应用,包括QT的GUI开发 2、嵌入式linux系统开发 3、嵌入式linux驱动开发 嵌入式目前主要面向的几个操作系统是,LINUX,WINCE、VxWorks等等。
1785 0