【PM面试题】请设计一个老年人用的新闻App
考虑用户需求及痛点
- 老年人由于特殊的生理特点,需要考虑其阅读的痛点,加入例如文字大小自定义,朗读新闻,放大镜功能。同时在软件设计上减少文字的量,多放入一些多媒体的内容。
- 老年人会对过去发生的一些事情产生怀旧的心态, 因此提供一些旧闻的阅读会给他们带来特殊的美好体验。
- 老年人也有交友需求,在这样一款专门针对老年人的App中嵌入社交化的功能,会给老年人带来较好的交友体验。
- 老年人往往更加关注本地新闻,因此在展示内容时候有所侧重会提升用户体验。
Feature设计
- 基本新闻功能
- 新闻朗读功能
- 文字大小自定义和放大镜功能
- 特殊频道:本地频道、旧闻频道,听新闻频道
- 用户中心
- 社交化功能(交友,聊天,分享等)
项目实施阶段
首先是搞清楚资源,在于面试官的沟通中得知该项目有三个开发人员,时间是三个月。
接下来我们应该确定feature的优先级,在这里我们应该用敏捷开发的思想,先做最需要完成的并且要确定产品基本需求的核心功能,在这个项目中基本的新闻功能以及针对老年人的一些辅助工具是核心的功能,因此我们应该先完成,具体的优先级如下(数字越小优先级越大):
- 基本新闻功能 (P0)
- 新闻朗读功能 (P0)
- 用户中心 (P0)
- 文字大小自定义和放大镜功能 (P0)
- 特殊频道:本地频道、旧闻频道,听新闻频道 (P1)
- 社交化功能(交友,聊天,分享等) (P2)
确立了初期的目标之后(完成P0的任务),我们要将每一个小目标分解成若干个work item,确定各个item之间的顺序以及相互之间的依赖关系,以此来确定分工以及时间表安排,同时为项目设立几个milestone节点,另外别忘了考虑可能会遇到的risk,包括人员、资源、进度等,为这些risk提出初步的解决方式以及预留出可缓冲的时间。
项目发布
经过了一段时间的开发工作后,项目满足设定目标,可以上线了,在上线之后我们需要继续跟踪和衡量三件事情:
- 我们的App是否Work,这部分需要考虑所有功能是不是如预期运行正常,包括各种移动终端的适配,各种使用环境下的运行状况,各种按钮和导航是不是能让用户轻松使用等。可以定义一些metrics来衡量,例如统计用户浏览时间确定用户是否迷失,统计用户等待时间用来确定有没有死链,通过监控用户第一次使用情况来确定是否能正确安装。
- 我们的App是否受欢迎。这部分可以通过考察用户每天的使用时长以及使用频度来确定App是否成为用户的日常使用项,另外可以监控在SNS中分享和传播的情况来看软件的传阅度。
- 我们的App有何改进之处。目的是为了发现用户新的需求,不断满足需求使得软件有所提高。我们可以通过感性和理性的方式来进行该项工作,理性的调查如统计用户在哪一类新闻上的点击率和停留时间较长或者统计在用户分享的数据里那些话题具有很高的传阅度等来给新的需求做出建议;感性方面我们可以和重度用户聊天,查看用户发送过来的Feedback以及发放调查问卷的方式来收集用户的使用感受和对新功能的建议。
【PM面试题】请设计一个老年人用的新闻App的更多相关文章
- 【PM面试题】设计一个股价推送工具
这一轮面试时间比较短,问题在短时间内不能很全面展开,因此抓住一些关键点变得尤其重要,这里我记录下当时是怎么想这个问题的. 问题解析 子问题1:推送什么?从问题中看出我们需要推送的是股价,用户可以自定义 ...
- 请设计 一个密码生成器,要求随机生成4组10位密码(C语言)
请设计 一个密码生成器,要求随机生成4组10位密码(密码只能由字母和数字组成),每一组必须包含至少一个大写字母,每组密码不能相同,输出生成的密码. #include<stdio.h> #i ...
- 笔试题&面试题:设计一个复杂度为n的算法找到单向链表倒数第m个元素
设计一个复杂度为n的算法找到单向链表倒数第m个元素.最后一个元素假定是倒数第0个. 提示:双指针查找 相对于双向链表来说,单向链表仅仅能从头到尾依次訪问链表的各个节点,所以假设要找链表的倒数第m个元素 ...
- Jsoup抓取网页数据完成一个简易的Android新闻APP
前言:作为一个篮球迷,每天必刷NBA新闻.用了那么多新闻APP,就想自己能不能也做个简易的新闻APP.于是便使用Jsoup抓取了虎扑NBA新闻的数据,完成了一个简易的新闻APP.虽然没什么技术含量,但 ...
- java算法面试题:设计一个快速排序。双路快速排序,简单易于理解。
package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Compar ...
- 对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。 给定一个字符串(不一定全为字母)A及它的长度n。请返回第一个重复出现的字符。保证字符串中有重复字符,字符串的长度小于等于500。
// 第一种方法 // ConsoleApplication10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include < ...
- 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bccced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中
// test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
- 对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。 给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x ...
- python学习:设计一个算法将缺失的数字找出来。
算法题 已知整型数值 a[99], 包含的所有99个元素都是从1-100中随机取值,并且这99个数两两互不相等,也就是说从1到100这100个数字有99个在数值内,有一个缺失.请设计一个算法将缺失 ...
随机推荐
- C# 中的"yield"与 "yield break"使用
yield是C#为了简化遍历操作实现的语法糖,我们知道如果要要某个类型支持遍历就必须要实现系统接口IEnumerable,这个接口后续实现比较繁琐要写一大堆代码才能支持真正的遍历功能.举例说明 usi ...
- TestNG系列之二:TestNG套件测试
测试套件的测试是为了测试软件程序的行为或一系列行为的情况下,是一个集合.在TestNG,我们不能定义一套测试源代码,但它代表的套件是一个XML文件执行特征.这也允许灵活的配置要运行的测试.套件可以包含 ...
- 云计算之路-试用Azure:搭建自己的内网DNS服务器
之前我们写过一篇博文谈到Azure内置的内网DNS服务器不能跨Cloud Service,而我们的虚拟机部署场景恰恰需要跨多个Cloud Service,所以目前只能选择用Azure虚拟机搭建自己的内 ...
- Spark1.0.0 history server 配置
在执行Spark应用程序的时候,driver会提供一个webUI给出应用程序的执行信息.可是该webUI随着应用程序的完毕而关闭port,也就是说,Spark应用程序执行完后,将无法查看应用程序的历史 ...
- 苹果推送服务器端证书配置.pem生成
做苹果推送服务器,很重要的一步,就是生成与苹果APNS连接的证书,一般是.pem文件: 首先在苹果开发者中心 生成 aps_devlopment.cer文件:然后下载:双击导入钥匙串: 打开钥匙串 - ...
- vue - v-text 和 v-html
1.官方有了{{data}}绑定数据了,为啥还要v-text 因为网络问题,可以我们会卡到看“{{}}”,很尴尬吧!!! => 因此推荐用v-text 2. v-html是啥? 能吃吗 , v- ...
- SCRUM敏捷开发规则一栏
敏捷.敏捷开发这类词近期非常火!敏捷开发,就是指可以在需求迅速变化的情况下高速开发软件.我们接触最多的和敏捷相关的名词是:极限编程(XP).结对编程.測试驱动开发(TDD)等. 敏捷建模(Agile ...
- spring Di依赖注入
依赖注入有两种方式 通过 get set 方法 Person.java package cn.itcast.spring.sh.di.set; import java.util.List; imp ...
- canvas学习笔记(下篇) -- canvas入门教程--保存状态/变形/旋转/缩放/矩阵变换/综合案例(星空/时钟/小球)
[下篇] -- 建议学习时间4小时 课程共(上中下)三篇 此笔记是我初次接触canvas的时候的学习笔记,这次特意整理为博客供大家入门学习,几乎涵盖了canvas所有的基础知识,并且有众多练习案例, ...
- unity3d的NGUI简易登录界面
1.拖两个文本框和一个按钮在界面上,并做相应的重命名处理,结果如下图: 2.新建一个脚本,附加到“Login”上,脚本内容如下: public UIInput name; public UIInput ...