首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“您将如何构建此网站/应用程序”采访问题的一般思考过程

“您将如何构建此网站/应用程序”采访问题的一般思考过程
EN

Software Engineering用户
提问于 2013-04-26 04:24:43
回答 3查看 4.3K关注 0票数 14

我收集了一些采访问题,比如“描述你将如何设计相册应用程序”,“描述你将如何设计这个特定网站的这一特性”(比如Facebook上的赞,亚马逊上的推荐,购物车,黑杰克游戏)。那么,如果有数以百万计的这种东西呢?你会换什么?

它看起来像是在期待一个数据库模式或一堆类定义(或者两者都是?)。我在学校里学过数据库,但我从来没有真正设计过一个应用程序,我很难知道从哪里开始,我想出的设计是否“好”,以及我可以改变什么来使它具有可伸缩性。

在设计这些系统时,是否有一个一般的方法或思维过程?我应该尽量避免的设计中出现的一些一般性问题/问题?有人能不能帮我看看其中的一个(或者最好是全部,同时比较每个人的需求)并解释:

1)如何提出需要哪些实体? 2)如何决定每件事都会有哪些关系? 3)如何将性能优化纳入您的设计? 4)我是否使用类或数据库进行此操作?这会有什么不同(例如,我是否会有一个不能真正转换为数据库表的类?)

我提出这个问题的主要原因是,我正在经历“破解编码面试”,我的答案与作者的完全不同--我对哪些课程是重要的有着截然不同的想法。

我的尝试:与照片分享应用程序,我将有类/表:照片和用户肯定。

然后,我认为如果我们试图创建一个模式,如果我们假设照片中的每个人都链接到照片(这个表有必要吗?),就会有一个表链接照片和用户。如果没有,那么是否仍然有一个单独的表来处理多到多的关系?)

但是,如果我们尝试采用面向对象的方法,也许我们会有一个名为专辑的类,它可以完成所有的工作,并且拥有来自另外两个表/类的所有信息。这是我在书中注意到的一件事--有一堆类,然后一个类基本上拥有所有的信息并连接其他类--这是常见的吗?例如,在我上面的例子中,这看起来适用吗?

我只是希望遵循一些通用的规则/准则,因为现在我不知道如何判断一个大系统的好架构是什么样子的。

EN

回答 3

Software Engineering用户

回答已采纳

发布于 2013-04-26 05:58:30

这些问题的目的在于评估您是否有编写软件应用程序的实际技能。你已经学到了一些理论,但理论知识只能走到这一步。真正理解软件开发的唯一方法是通过这样做。

这是没有捷径的,因为对于诸如“需要什么实体”这样的问题,没有股票的答案。相反,您必须应用您对各种工具和范例的经验,以及它们是如何协同工作的,才能为手头的问题找到一个实际的解决方案。

一个类似的问题:“我是使用类还是数据库来完成这个任务?”意味着你对事物是什么以及它们是如何工作的缺乏基本的知识。类是组织代码的范例;数据库是数据存储的方法。它们是两个本质上不相关的概念(尽管它们可以一起工作)。这不是一个双/或问题。

我不想苛刻,但我认为你需要发展你的编码经验,才能在这样的工作面试中取得成功。你当然有潜力--你对照片分享应用程序的讨论有一些正确的想法,并朝着正确的方向发展。但你得先了解一下这是怎么回事。为面试做准备的最好方法就是从一开始就开始创建一个应用程序。照片分享应用程序将是一个适当大小的项目,或者你可以选择其他的东西。当您看到所有的部件都可以一起工作,从而形成一个工作的应用程序时,您的知识将真正扩展。

票数 19
EN

Software Engineering用户

发布于 2013-04-26 11:21:23

它看起来像是在期待一个数据库模式或一堆类定义(或者两者都是?)

我觉得你太注重细节了。有了这个问题,招聘人员并不期望你所写的所有类都有完整的描述(否则他们会要求你对它进行编码,而不是谈论它)。

首先,您的答案需要是关于总体情况的--体系结构、层、层,甚至是项目生命周期和开发过程。不要犹豫地问一些关于应用程序应该运行的需求和环境的问题来调整您的答案。正如dan1111所指出的,没有一个正确的应用程序设计的通用配方。所有的设计都与上下文有关。

只有当招聘人员开始问一些非常具体的问题时,你才应该详细了解你将在幕后使用的类、实体或数据库表。

此外,如果你没有什么经验,那么说“我会给你看一个解决方案,它使用的是我一直教过的应用程序设计的类型。我知道这一点和其他方法,我可以在很大程度上描述你,但从来没有真正应用过它们。我也乐于发现和应用他人”。

承认你的工具箱里只有这么多工具,而你的经验让你拥有它,这是没有错的--事实上,它总比吐出一个你不知道它在实践中如何工作的排练答案更好。

票数 8
EN

Software Engineering用户

发布于 2014-07-22 18:52:19

我想对你的第一个问题作一个简短的评论:

1)你是如何想出需要什么实体的?

我为一个新项目做的第一件事是,或者在白板上或者在一张大白纸上,写下我和我的团队能够想到的关于这个特定项目的所有物理和概念上的东西。这是个头脑风暴会议。

名词往往是宾语,动词往往是用例或方法。

物理:照片(明显!),显示类型,系统,照片文件,文件格式,用户,日期.

概念:添加、删除、保存/存储、检索、排序、修改、查看/显示照片.

在名词和动词之间建立联系。用户添加图片。(好吧-这里有一个用例!)

我还建议看看UML和,以及它们如何在通用OOD中使用。(注意-我没有在上面提到语言或数据库。)不要选择一种语言,然后做你的OOD。以一种可以由任何OOL实现设计的方式来执行OOD。

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/196185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档