这一轮面试时间比较短,问题在短时间内不能很全面展开,因此抓住一些关键点变得尤其重要,这里我记录下当时是怎么想这个问题的。

问题解析

子问题1:推送什么?从问题中看出我们需要推送的是股价,用户可以自定义需要关注哪个公司的股价;更深一层思考,推送除了股价也可以有一些该股票历史趋势,未来走势分析,整个这类股票的大局走势以及该公司最近的新闻等;另外触发条件也可以衍生一下,既可以是由股价到达某个点出发,也可以在变化剧烈的时候触发,也可以在股价在一段时间内的均值达到某个值触发。

子问题2:怎么推送?我们有一些传统手段如PC端的客户端或者浏览器插件推送或者使用邮件的方式推送,另外还有一些新的方式如移动端的短信、App通知推送、微信微博平台的消息推送等。

重要特性

  1. 时效性:对于推送工具而言,及时性是很重要的一个指标,而对于财经推送工具而言时效性尤其重要。该指标可以通过实时性的股价监控和推送到用户的时间差来衡量。
  2. 个性化:每个人关注的股票以及对股价的期待值是不一样的,因此让用户可以自由定制自己需要得到的信息是很必要的一个feature。
  3. 信息干扰的避免:推送工具要特别注意会成为信息的干扰,因此对于推送信息的时段以及信息的多少要特别注意,在用户不熟悉的时候给出提示,在用户误设定的时候给出友情提示。

系统框架图

这是现场作答的手稿

我用visio重绘了一下:

系统由四部分组成:

  1. 数据库端:由不同新鲜度的数据库组成,分为实时数据库(秒级别),日存储数据库,永久存储数据库等。其中实时数据库用于监控实时的股价数据,日存储用于单日的分析,长时数据库用于分析股价的趋势。
  2. 触发器是由用户自定义的一些条件组成,可以描述为:用户ID...IF...Then...,触发器根据当前条件决定哪些需要出发,然后将这些放入存储器。
  3. 存储器中有历史的触发事件,也有待通知的触发事件,经过一个推送过滤器,确定该推送在用户的请求范围内,完成推送。
  4. 推送可以选择多种渠道,亦可由用户指定。

关键技术难点

在面试中遇到这个问题的时候有点慌,但是还是抓住了推送服务的一个根本:及时性。因此暂不考虑用户端因为网络问题或者环境问题造成的延时,服务器端信息的采集以及处理将会称为整个系统的瓶颈所在,提高这部分的吞吐将会极大提高系统的整体时效性,让信息第一时间到达用户手中。

 本文用菊子曰发布

【PM面试题】设计一个股价推送工具的更多相关文章

  1. 【原创】node+express+socket搭建一个实时推送应用

    技术背景 Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新. 应用场景: 监控系统:后台硬件热插拔.LED.温度.电压发生变化 即 ...

  2. App设计:消息推送和界面路由跳转

    概要 app消息推送.显示通知栏,点击跳转页面是很一般的功能了,下面以个推为例演示push集成,消息处理模块及app内部路由模块的简单设计. 推送 推送sdk集成 集成sdk步骤根据文档一步步做就行了 ...

  3. 由一个订单推送想到了ObservableCollection的神奇用法

    最近在做taobao的一个卖家应用,需要订阅taobao的订单推送,示例代码如下: 看到上面的OnMessage场景之后,我突然就鬼使神差的在想最近写的一个服务,其中的一个功能是需要定时的轮询一个集合 ...

  4. .net core 3.0 Signalr - 实现一个业务推送系统

    ## 介绍 ASP.NET Core SignalR 是一个开源代码库,它简化了向应用添加实时 Web 功能的过程. 实时 Web 功能使服务器端代码能够即时将内容推送到客户端. SignalR 的适 ...

  5. [wxpusher]分享一个服务器推送消息到微信上的小工具,可以用于微信推送提醒和告警。

    背景 作为一个程序员,业余搞点自己的东西很正常,一般程序员都会有一两台自己的服务器,谁叫今天xx云搞活动,明天yy云搞活动呢. 自家的服务器用来跑爬虫,跑博客,或者跑一些个人业务,但当服务有新状态,抢 ...

  6. 免费iOS第三方推送工具Urban Airship使用教程

     本文转载至 http://blog.csdn.net/mamong/article/details/8542404  http://www.dapps.net/dev/iphone/ios-free ...

  7. 苹果cms和海洋cms通用的百度主动推送工具

    百度主动推送的代码,不需要每天手动去添加地址推送,只要浏览器打开推送请求,不要关掉浏览器,程序自动帮你推送.(该插件只推送内容页,支持动态.伪静态.静态页面的推送,但这三种地址规则需要去代码里面自行拼 ...

  8. .net C# 苹果消息推送 工具类

    public class AppleAPNSMessage { /// <summary> /// 苹果信息推送 证书 路径(注意测试版跟正式发布版证书上不一样) /// </sum ...

  9. 面试题——设计一个程序:运行报错Stack Overflow Error

    所谓Stack Overflow就是栈里面放的东西太多了,溢出了. 大家知道栈里面存放的是基本数据类型还有引用类型. 下面看这个程序 class Test { public static void m ...

随机推荐

  1. JCheckBox使用示例

    // 初始化 JCheckBox chk=new JCheckBox("XXX"); // 选择 chk.setSelected(true); // 判断选择状态 chk.isSe ...

  2. C# Meta Programming - Let Your Code Generate Code - 利用反射重写自动的ToString()

    我们在写一些Model的时候,经常会重写ToString,为了在控制台中进行打印或者更好的单元测试. 但是,如果Model的字段非常多的时候,如此简单的重复劳动经常会变成一件令人头痛的事情,因为大家 ...

  3. 解复用-mpeg2

    http://blog.csdn.net/yipie/article/details/7612226 数字高清晰度电视(High Definition Television)简称HDTV,是继黑白电视 ...

  4. canvas光晕

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. android上FragmentTabHost实现自己定义Tab Indicator

    近期一直在做安卓开发,发现Tab布局能够用FragmentTabHost来实现,唯一不好的就是不能实现带图标的tabindicator, V4版本号中的尽管API有支持,可是不管怎么设置Drawabl ...

  6. 08-spring学习-annotation配置

    利用annotation配置注入关系 为了更好的解释此类存在的意义,下面通过一段习惯性的开发进行问题的描述,例如: 现在有一个IAdminService服务层,这个服务层要调用的是IAdminDAO和 ...

  7. win10下Visual Studio 2015,C++ x64编译zmq

    PS.本人编译过程踩得坑,记录备忘 下载:(1)官网:http://zeromq.org/intro:get-the-software,有简明的编译方式,cmake的,这里不多赘述 (2)到GitHu ...

  8. Https与Http,SSL,DevOps, 静态代码分析工具,RFID, SSH, 非对称加密算法(使用最广泛的一种是RSA), 数字签名, 数字证书

    在URL前加https://前缀表明是用SSL加密的. 你的电脑与服务器之间收发的信息传输将更加安全. Web服务器启用SSL需要获得一个服务器证书并将该证书与要使用SSL的服务器绑定. http和h ...

  9. HTML5学习笔记3 内联SVG

    HTML5支持内联SVG 下面来介绍一下什么是SVG SVG可缩放矢量图形 可缩放矢量是基于可扩展标记语言(标准通用语言的子集),用于描述二维矢量图形的一种图形格式.它由万维网联盟制定,是一个开放标准 ...

  10. LNMP架构

    LNMP架构介绍 lnmp里的php会启动一个服务,nginx把用户请求的php交给php-fpm处理,比如登录网站php要和mysql做交互,查用户的账号和密码,处理完之后,php-fpm会告诉ng ...