最近我经历了几次面试。有人问我设计问题。尽管我已经回答了,但是需要知道我是否正确回答了他们,我们能否改进他们。关于一些设计问题
问的第一个问题是与邮件服务器有关。
问题陈述: -
有一个呼叫中心,接收万个电话everyday.Now每当收到一个条目的数据库正在取得与呼叫者的名字呼叫,主叫方的电子邮件ID,电话号码和一些字符串像l1,l2,l3 ....用于每个单独的呼叫。
例如像杰克的电话,以将在DB
进行jack | [email protected] | 9999999999 | l1
jack1 | [email protected] | 9999999991 | l2
jack2 | [email protected] | 9999999992 | l3
现在我们就来写,这将读取来自DB这些万个条目,并发送邮件到这些人的邮件将一个应用程序的入口从[email protected]发送给jack,l2 @ callcenter.com给jack1,[email protected]给jack2。这是我提出的是(我被要求给出答案记在想的可扩展性)
我会告诉它是否已读或未状态数据库引入另一列
回答,那么我们将有一个应用程序将从数据库中读取这些条目并将其放入队列中。此应用程序有5-6个正在运行的任务,它们将从数据库中读取并更新数据库中的状态,然后将其放入队列中;现在,其他服务将从队列中读取它并将邮件发送给用户。再次,它将有5-6个任务将执行它。
请给我建议最好的解决方案。
这是问另一个问题是
问题2: -
需要设计具有REST API,它接受了很大的URL,并还给小URL和服务时,一些点击上URL会导致这个公司的域名,这个应用程序必须显示相应的输出。如果大URL是“www.xyz.com/abc/randomPage”,那么REST API应该计算它并返回给我www。 x.com/weshgtj45jk其中weshgtj45jk是资源的哈希码。
该解决方案应该是可扩展的,用户应该得到及时的响应。
我建议的答案。
1)。将会有负载均衡器,在这个负载均衡器之后,我将有两个节点与这个服务一起部署,这将满足请求;现在如果明天负载增加,那么我们可以添加另一个节点。保留两个节点。 2)。然后,我需要使用像redis这样的缓存来访问每个大URL并计算小url。我们会将它保存在CACHE的URL中,以便将来如果查询它,我们只能从缓存中提供响应。 3)。然后将其存储在DB中。我们可以将它存储在cassandra中,这将最终保持一致并且可以支持tera字节的数据。 4)。现在,当给出响应并且用户单击URL时,我需要在负载平衡器级别看到哪个哈希代码对应于哪个页面。将会有一个hashmap类型的数据结构,它将为我提供请求将要访问的资源。
这就是我给他们的回应。
如果有人能帮助我,那么这将是一个伟大的学习经验。
其他如果有人可以建议我某种课程,我可以提高我的设计技能,那么它会真的很喜欢他。
在此先感谢。
对我来说#1是污染你的数据与应用程序状态。当你需要发送第二封电子邮件时会发生什么?谁清除“额外的列”?如果你在采访中给我这个答案,我会问更多的问题,看看你是否能说服我这是明智的... – John3136
你不需要......这不是问题的一部分。你只需要发送一次邮件就可以了。就像你只是一个没有回复邮件给注册投诉的用户。如果我们真的需要再次发送一些邮件......有一个好主意该表的主键和状态为另一个表。状态将保持数据更新。 – Learner
你谈论可扩展性,但你只能发送一封电子邮件?现在作为面试官,这是对你设计的另一个黑色标记。你将不得不做一些漂亮的花言巧语把它卖给我,或者说“哦,是的,也许这不是最好的方法,让我想一想......” - 知道什么时候退出是一个有用的技巧太... – John3136