乐趣区

关于java:你要知道的21道软件设计-面向对象的面试题

不论大家加入任何的编程面试,都逃不过对于零碎设计和软件设计的问题。如果你想做的更好,你能够试试筹备这个话题。以前我分享过我的一个对于编程面试问题的清单,也分享了一些对于零碎设计的问题,但好多人比拟感兴趣,会发问更多的问题。因为零碎设计比拟难,须要多加练习能力更好地把握。

当我在偶尔在 Educative 上看到如何应答零碎设计面试的课程时,我就从亲朋好友那里收集了许多对于零碎设计面试问题,而后做成了清单分享给你们。

这将是一个很好的资源。这不仅给你提供许多对于零碎设计面试问题,还能够给你们提供解决问题的常识与工具。

换句话说,这个课程能够教你怎么一步步构建像 Facebook,Twitter,Uber 的真实世界零碎。

实际上,网络上没有太多对于零碎设计的面试题资源。我只是在 Edcative 上看到 rajat mehta 写的如何筹备零碎设计面试。而对于顶尖的公司像 Amazon,Google,Microsoft,Apple,SalesForce,Flipcart 等等提出的零碎设计的问题,网上基本找到解决办法。

无论如何,当你把这个资源和这个文章提出的问题的相结合,你在面试零碎设计的时候,你将所向无敌。你也能够试着本人解决这些问题,而后对照我给的答案。

顺便提一下,这个只实用有一些编程教训和根底的软件设计常识的童鞋。如果你是个编程小萌新,我的倡议是你本人先学一些 JAVA 编程基础知识,例如 Coursera 上的 Principles of Software Design 和 Edcative 上的 Web Application and Software Architecture 101。

我这个课程不仅仅能教你如何用 JAVA 解决一个真实世界构建的问题,而且能用合乎逻辑的形式来思考和设计。这种能力是每个胜利设计开发者最值得所把握的。

21 道零碎设计 + 面向对象的面试题

事不宜迟,咱们马上来看这 21 道最受欢迎,发问率最高的零碎设计 + 面向对象的面试题,这些问题的剖析能让你轻松应答我的项目设计的面试。

1. 如何用 Java 设计自动售货机?(解决方案)

你须要编写代码来设计自动售货机,该自动售货机售卖如巧克力,糖果,冷饮之类的产品,须要投入硬币进行购买,例如 5 分、10 分、25 分,50 分、1 元等。确保插入硬币取得产品,而后退回零钱。另外,编写单元测试以证实这些常见用例无效。如果遇到困难,能够浏览无关解决这些经典零碎设计问题的两局部文章(第 1 局部和第 2 局部)。

2. 如何设计相似 Goo.gl 或 Bit.Ly 的 URL 缩短服务?(解决方案)

这是一个常见的零碎设计问题。你给了一个一般长度的 URL,你将如何设计为其生成较短且惟一的别名的服务?如果你不相熟 URL 缩短程序服务,请查看一些罕用的例子,例如 Google 的 goo.gl 和 Twitter 应用的 bit.ly。确保在一些设计决策后提供数据库模式和基本原理,例如保留数据多长时间,如何获取统计信息和剖析等。如果遇到问题,能够参照对于 Educative 上“零碎设计面试课程”中给出的解决方案。

3. 你如何设计交通控制系统?

经典零碎设计问题依然提及频率。确保你晓得如何从一种状态过渡到另一种状态,例如从红色过渡到绿色,从绿色过渡到橙色再过渡到红色等。

4. 如何设计限价单?(解决方案)

限价订单簿在证券交易所中用于依据价格和工夫优先级将买入订单与卖出订单进行匹配。你会怎么做?你将应用哪种数据结构?请记住,匹配的速度是要害,也是牢靠的。如果你须要温习数据结构,则能够查看 Java 课程中的数据结构和算法,如果你遇到困难,能够在这里查看我的解决方案。

5. 你如何设计相似 Pastebin 的网站?

Pastebin 容许你粘贴文本或代码,而后在任意地位共享指向该代码的链接。它不是在线代码编辑器,然而你能够应用它来存储任何类型的文本。

6. 你将如何创立本人的 Instagram?(解决方案)

Instagram 是一个照片共享应用程序,它提供了一些自定义滤镜以进步照片品质。你的应用程序应该具备照片上传性能,为搜寻标记照片以及一些根本的过滤器。如果你能够增加共享或社交网络,那就太好不过了。顺便说一句,如果你遇到困难,还能够在 Educative 的如何筹备零碎设计面试课程中看到收费的解决方案。

7. 你如何设计像 Google Drive 或 Dropbox 这样的全局文件共享和存储应用程序?

这些用于存储和共享文件,照片和其余媒体。你如何设计诸如容许用户上传 / 查看 / 搜寻 / 共享文件或照片之类的货色?跟踪文件共享的权限,并容许多个用户编辑同一文档?

8. 你如何设计相似 Whatsapp 或 Facebook Messenger 的聊天应用程序?

你必定应用过 WhatsApp 和 Facebook?没有?如果没有,我通知你聊天应用程序容许你向你的敌人发送音讯。这是点对点的连贯。你保留一个敌人列表,查看他们的状态并聊天。在 WhatsApp 中,你也能够连贯组,但实用于高级和经验丰富的开发人员。至多,你应该提供一种设计来保留好友列表并从中发送和接管音讯。

9. 你如何设计 Twitter 克隆?

Twitter 是一种风行的音讯服务,可让你向所有关注者播送音讯。你公布推文,你的关注者能够看到这些音讯,他们能够喜爱或转发。确保实现了诸如粉丝关注,主题标签,发博,删除等罕用性能。如果你感觉本人有点艰难,则能够依照如何应答零碎设计面试的课程解决方案进行操作。

10. 如何设计像 YouTube 或 Netflix 这样的寰球视频流服务?

设计像 NetFlix 或 YouTube 这样的视频流服务时,要害是顺畅和缓冲以及在低带宽连贯上的性能,如何应答这些挑战?

11. 如何设计 ATM 机?

ATM 机容许用户存入和提取现金。它还容许用户查看其余额。你如何设计这样的零碎?你面临的次要挑战是什么?

12. 如何设计 API 速率限制器?

13. 你如何设计 Twitter 搜寻?

14. 如何设计相似于 Google 的网络爬虫?

网络搜寻器能够拜访网站并像 Google 一样搜查所有链接并将它们编入索引,以便它们当前能够呈现在搜寻后果中。爬网程序还可用于在一组目录中搜寻特定文件,你如何设计此类文件?次要挑战是什么?

15. 如何设计 Facebook 的 Newsfeed?你将应用哪种算法?

新闻源是 Facebook 的重要组成部分,它使用户能够查看他的世界正在产生的事件,包含敌人和家人,他喜爱的页面,他关注的组以及 Facebook 广告。

Newsfeed 算法的作用是显示对用户来说最重要的音讯,并且能够产生很高的参与度。显然,来自敌人和家人的音讯应该优先解决。如果你感觉陷入困境,则能够依照如何做好零碎设计面试的课程所提出解决答案。

16. 如何设计 Yelp 或 Nearby Friends?

17. 如何设计寰球乘车服务 E.G. Uber,Grab 或 Ola 后端?

优步(Uber)和奥拉(Ola)是最受欢迎的两种乘车服务,它将驾驶员和乘客都组合到一起。你如何设计让乘客看到左近的出租车并进行预订?

18. 如何设计 BookMyShow?

一个容许你预订电影院和流动门票的网站。这实际上是一家运行良好的印度守业公司。

19. 如何设计 Quora,Reddit 或 Hackernews 等社交网络 + 留言板服务网站?

Reddit,Quora 和 HackerNews 是一些最受欢迎的社交网站,用户能够在其中公布问题或共享链接。其余用户能够答复问题或对共享链接发表评论。

20. 你如何设计相似 Airbnb 的应用程序?

它容许某些用户上传房间出租,而其余用户则出租。某些性能仅实用于管理员,发布者和订阅者。

21. 你如何设计电梯零碎?

咱们大多数人都应用电梯,你在一些大型办公大楼中,你能够看到 3 到 4 部电梯。你须要为此设计软件,以便能够在不同楼层疾速应用。你能够假如你有两部电梯和一栋 10 层楼的修建。

如果你须要一些帮忙,那么我倡议你可在 Udemy 上学习如何做好零碎设计面试课程,Rajat Mehta 在那里有一个残缺的案例钻研来解决这个问题。你还将在那里学习高级零碎设计,低级零碎设计和数据库设计。

参考文章:

  • https://blog.csdn.net/OnlyQi/…
  • http://blog.sae.sina.com.cn/a…

本文作者:Javin Paul,翻译:1 Way
原文链接:https://dzone.com/articles/21…
译文首发:http://blog.didispace.com/21-…

本文有 spring4all 技术翻译组实现,更多国外前沿常识和干货好文,欢送关注公众号:后端面试那些事儿。

退出移动版