Neo's Blog

不抽象就无法深入思考
不还原就看不到本来面目!

0%

状态:已经填好的行数,每一行填在了哪些位置

选择: 最多N种选择

路径:放置了Queue的位置的列表;

结果集:列表的列表

结束条件: 已经把所有的行数填写完;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
public:
int res;
int Nqueen(int n) {
res = 0;
dfs(0, n, 0, 0, 0);
return res;
}

void dfs(int u, int n, int col, int pie, int na) {
if (u == n) {
res++;
return;
}

for (int j = 0; j < n; ++j) {
//用位运算来记录状态
//注意对角线的技巧
//左上 y = x + b; b = (y - x) 来表现一条线,y - x有可能是负数,为了简化,统一加上n,所以b = (n + u - j)
//右下 y = -x + b; b = (y + x) 来表现一条线!!
if ((col & 1 << j) || (pie & (1 << (n + u - j))) || (na & (1 << (u + j))))
continue;
//col,pie,na都是局部变量,不用保存现场
dfs(u + 1, n, col | (1 << j), pie | (1 << (n + u - j)), na | (1 << (u + j)));
}
}
};

总

outplace的都是稳定的;
outplace的需要一定的memory, inplace中的qsort由于是递归的,所有需要lgn的mem,其他的都不要额外的内存

inplace大多数都不稳定,除了冒泡排序、插入排序

算法 思想 衍生问题
quick sort 分治思想,借助双指针在$O(n)$时间内完成partition 线性第k大,线性求中位数
merge sort 分治思想,双指针(稳定的) 逆序数
heap sort 借助容器来实现排序,还有类似的BST中序遍历 topK问题
counting sort 空间换时间,非比较;通过扫描min/max来支持负数,通过累加和+倒序遍历来保持稳定
bucket sort 抽屉原理,稳定排序,适合元素值集合较小的情况,特别适合外部排序 排序后最大间隔问题、大整数文件取中位数问题
radix sort 稳定子排序算法(计数排序、桶排序来实现)对数字进行k遍排序
shell sort 分块思想,缩小增量排序,一种特殊的插入排序;递减序列的选择很重要 适用于基本有序序列
insertion sort 减治思想,扑克牌 适用于基本有序序列
Bubble sort 稳定

归并排序,是一种特别有用的排序算法;

它背后的算法思想是 分治。

归并排序同时也是一种思想,可以解决归并排序思想解决很多问题。

例如,计算逆序数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//归并排序算法模板
void merge_sort(int q[], int l, int r)
{
if (l >= r) return;

int mid = l + r >>1;
merge_sort(q, l, mid);
merge_sort(q, mid + 1, r);

vector<int> tmp(r -l + 1);
int k = 0, i = l, j = mid + 1;
while (i <= mid && j <= r ) {
if (q[i] < q[j]) tmp[k++] = q[i++];
else tmp[k++] = q[j++];
}

while (i <= mid) tmp[k++] = q[i++];
while (j <= r) tmp[k++] = q[j++];

for (i = l, k = 0; i <= r; i++, k++) q[i] = tmp[k];
}

核心参数

1、corePoolSize:线程池中的常驻核心线程数

2、maximumPoolSize:线程池能容纳同时执行的最大线程数,此值必须>=1

3、keepAliveTime:多余的空闲线程的存活时间

当前线程池数量超过corePoolSize时,当空闲的时间达到keepAliveTime值时,多余的空闲线程会被直接销毁直到只剩下corePoolSize个线程为止

4、timeUtile:keepAliveTime的单位

5、workQueue:任务队列,被提交但未被执行的任务

6、threadFactory:表示生成线程池中工作线程的线程工厂,用于创建线程一般用默认的即可。

7、handler:拒绝策略,表示当队列满了并且工作线程大于等于线程池的最大线程数

工作流程

线程池内部是通过队列+线程实现的,当我们利⽤线程池执⾏任务时:

  1. 如果此时线程池中的线程数量⼩于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建
    新的线程来处理被添加的任务。
  2. 如果此时线程池中的线程数量等于corePoolSize,但是缓冲队列workQueue未满,那么任务被放⼊
    缓冲队列。
  3. 如果此时线程池中的线程数量⼤于等于corePoolSize,缓冲队列workQueue满,并且线程池中的数
    量⼩于maximumPoolSize,建新的线程来处理被添加的任务。
  4. 如果此时线程池中的线程数量⼤于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等
    于maximumPoolSize,那么通过 handler所指定的策略来处理此任务。
  5. 当线程池中的线程数量⼤于 corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被
    终⽌。这样,线程池可以动态的调整池中的线程数

合理线程数

CPU密集型:CPU核数+1个线程的线程池

IO密集型:a)CPU核数*2;b)CPU核数/(1-阻塞系数)。(阻塞系数:0.8~0.9)

拒绝策略

第一种拒绝策略是 AbortPolicy,这种拒绝策略在拒绝任务时,会直接抛出异常 RejectedExecutionException (属于RuntimeException),让你感知到任务被拒绝了,于是你便可以根据业务逻辑选择重试或者放弃提交等策略。

第二种拒绝策略是 DiscardPolicy,这种拒绝策略正如它的名字所描述的一样,当新任务被提交后直接被丢弃掉,也不会给你任何的通知,相对而言存在一定的风险,因为我们提交的时候根本不知道这个任务会被丢弃,可能造成数据丢失。

第三种拒绝策略是 DiscardOldestPolicy,如果线程池没被关闭且没有能力执行,则会丢弃任务队列中的头结点,通常是存活时间最长的任务,这种策略与第二种不同之处在于它丢弃的不是最新提交的,而是队列中存活时间最长的,这样就可以腾出空间给新提交的任务,但同理它也存在一定的数据丢失风险。

第四种拒绝策略是 CallerRunsPolicy,相对而言它就比较完善了,当有新任务提交后,如果线程池没被关闭且没有能力执行,则把这个任务交于提交任务的线程执行,也就是谁提交任务,谁就负责执行任务。这样做主要有两点好处。

第一点新提交的任务不会被丢弃,这样也就不会造成业务损失。
第二点好处是,由于谁提交任务谁就要负责执行任务,这样提交任务的线程就得负责执行任务,而执行任务又是比较耗时的,在这段期间,提交任务的线程被占用,也就不会再提交新的任务,减缓了任务提交的速度,相当于是一个负反馈。在此期间,线程池中的线程也可以充分利用这段时间来执行掉一部分任务,腾出一定的空间,相当于是给了线程池一定的缓冲期。

用户增长的前提是你的产品是满足需求的,且与市场是匹配的(用户来了之后才能够留得住),但到达用户存在阻碍。

所以用户增长的主要工作就是:要减少阻碍,降低交易成本(比如认知成本、信任成本、分享成本等等)。

开始前,先问问自己 7 个与增长相关的基础问题,带着问题思考更高效。

(1)XX公司的商业模式是什么?

(2)XX公司所在的社会环境是什么?

(3)XX公司处在企业生命周期的什么阶段?

(4)XX公司的增长战略、增长策略、增长战术是什么?

(5)XX公司的用户是谁?

(6)XX公司当前是怎么做用户增长?

(7)XX公司的北极星指标是什么?

(因为)不同商业模式、不同阶段,则有不同的增长侧重。所以谈用户增长不能不谈商业模式社会大环境企业生命周期

时间轮

逻辑形式:时间轮

实际结构:链表数组

实现原理:

最小轮子走一圈,它的上层轮子走一格。

假设图中每层轮子为20个格子,第一层轮子最小时间间隔为1ms,第二层为20ms,第三层为400ms,此时添加5ms后执行的任务,此时应该添加到第一层的第5格子中。

如果此时添加445ms后执行的任务,则第一层表示的时间跨度不够,第二层表示的时间跨度也不够,第三层表示的时间跨度足够,该任务应该放到第三层轮子第二格子中,该轮子指针指到第二格子中时,计算离任务启动时间还有多长时间,慢慢将该任务移动到底层轮子上,最终任务到期执行。

HashedWheelTimer时间轮是一个高性能,低消耗的数据结构,它适合用非准实时,延迟的短平快任务,例如心跳检测。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

class TimeWheel {
void push() {
//利用当前时间与currentTs,计算目标offset。
//把事件插入到offset对应的ticks链表中
}

void pop() {
//利用当前时间与currentTs,计算目标offset。
//确认需要往前移动多少格

//把过期事件,trigger掉;

//然后移动currIdx与currentTs;
}

void background_thread() {
//每秒钟一次运行,exTicks中1s中后就要运行的item移动到ticks[(currentIdx - 1) % N]。
//此处考虑并发
//对currentIdx的读访问要考虑并发,可以考虑用原子变量
//对链表的访问可以用互斥锁(理论上:并不是有实际冲突,因为这个tick还有接近1分钟才会被访问到。)
}

map<ts, Item> exTicks; //超过1分钟的事件;
vector<List> ticks; //假设60个格子,只能承载最近60s的事件。
currentIdx;
currentTs;
};

作为一个时不时需要跟产品同学打交道的非专业人士(一介码农),有必要掌握一些一些关于产品的入门知识。

下面的这几个问题,我觉得是最基础的。本文就结合梁宁老师的《产品思维30讲》来尝试着回答一下。

  1. 产品的本质是什么?
  2. 做产品的通用方法论是什么?
  3. 如何才能做出爆品?
  4. 产品创新有啥通用方法论吗?
Read more »

作为一个时不时需要跟产品同学打交道的非专业人士(一介码农),有必要掌握一些一些关于产品的入门知识。

下面的这几个问题,我觉得是最基础的。本文就结合梁宁老师的《产品思维30讲》来尝试着回答一下。

  1. 产品的本质是什么?
  2. 做产品的通用方法论是什么?
  3. 如何才能做出爆品?
  4. 产品创新有啥通用方法论吗?

第一个问题,产品的本质是什么?

我们首先考虑下你用过有哪些产品:
产品,有时候是一项服务,例如理发。
产品,有时候是一个实体,例如手机。
产品,有时候是一个网站,例如 www.baidu.com
产品,有时候是一个app,例如大众点评app

等等,某一个能产生现金流的债权也有可能被证券化,打包成一款产品,供其他人来购买。

让我们看一下百度百科上产品的定义:

产品是指作为商品提供给市场,被人们使用和消费,并能满足人们某种需求的任何东西,包括有形的物品、无形的服务、组织、观念或它们的组合。

从上面的定义可以看出,关于产品最重要的一点就是:它需要能够满足用户的某种需求。

用户需要被满足的需求有很多。例如,我老婆在购物时发现有一个商品一下买两个的话价格会便宜50%,可是呢?两个她又用不了。这时候,他就产生了一个需求:“如果有一个人跟我一起买就好了!”

还有一点,好多时候用户在出现某一款产品来满足他的“需求“之前根本就没有需求。Jobs就说过,用户根本不知道自己想要什么。例如,在汽车出来之前,人们出行都是靠马车的。那个时候,用户能够说出自己的真正需求吗?

说这么多,回答刚才的问题。产品的本质是什么? 在我看来,产品就是用来满足用户需求的东西。这句话的重点不是主语,而是定语。好的产品与坏的产品的差别就在于:

  1. 相比坏产品,好的产品更好的满足用户的需求。用户用起来更爽,更顺手。
  2. 相比坏产品,好的产品满足了用户真正的需求。好的产品,直击要害。

所以,做好一款产品,最重要的是就是围绕着用户去思考,我可以解决哪些用户的哪些需求,给这些使用我产品的用户带来什么价值

用一个公式来表示: 产品价值 = 细分用户 * 用户需求

为什么要细分用户呢? 因为不同的用户有不同的需求,而一个产品不可能满足所有用户的需求。


如何准确洞察用户的需求?

了解人有哪些

产品能力,就是这样训练一个人:
判断信息,抓住要点,整合有限的资源,把自己的价值打包成一个产品向世界交付,并且获得收获。

产品思维

微观视角
同理心 人性 心理学

同理心

用户体验,对人或者产品做一个体检:

任何产品的5个层次,从表到里:

【表层】感知层(让人直接感知到的外在)

【表层】角色框架层(集体赋予你的人格,通过教育习得,角色化)

资源结构层(一个人的财富、人脉、甚至精神资源,也就是一个人的历程)

【内核】能力圈(扩充能力圈,极其痛苦)

【内核】存在感(正是由于存在感不能被满足,才会去扩大自己的能力圈

现在,我们再把一个人从外而内的五层再拎一遍:

最外层是感知层,是你看到的一个人的样子,他的相貌、举止、着装。

其实当你看到这个人的时候,你要知道有一部分是天生的,有一部分其实是角色化的产物。
在感知层之内的第二层是角色框架层。

在角色框架层的再往里的第三层是资源结构层,资源不只是大家一般都会认为的人脉和财产,还包括了一个人的精神结构和他的精神资源。

在这个资源结构层再往后的一层就是能力圈,在能力圈的里面就是这个人对自己存在感的感知。
所以,如果你明确知道自己想成为一个什么样的存在,你就会不断地改变自己的能力圈,改变自己的资源,然后甚至改变自己外在的样子。


学会读懂用户的情绪
用户不会分层次的表达自己的体验,只会表达自己的情绪。

四种最基本的生物性情绪
愉悦、不爽、愤怒、恐惧

满足

愉悦,就是自己的个层面的需求被满足

一个蹦了很久侧需求,突然被满足,就叫爽

上瘾:(微小的愉悦感 + 突然被满足的爽感)= 确定性的满足

不爽:就是不满足

做产品:就是通过产品建立你与人之间的关系,通过产品来服务人,本质就是用户是否通过你的服务得到了满足。

这就是上帝给你初始化的操作系统的密码,你不厌其烦的地方,就是你的天分所在。

满足是度量产品、人与人关系的度量

被侵犯,因为侵入者的体量不同,而出现不同的情绪:愤怒、恐惧

愤怒:就是感觉到自己的边界被侵犯
恐惧:就是感觉到自己的边界被侵犯,而无可奈何

愤怒,就是一种恐惧,一种对自己无能的恐惧;羞耻感也是一种恐惧,一种对社会评论的恐惧;忧郁也是一种恐惧,来自无法逃避的想象的恐惧,一种持续的恐惧,内化为忧郁。

恐惧

恐惧是边界,看到了一个人怕什么,就看到了他的边界。

恐惧是动力,害怕失去现在的好生活,害怕给不了家人更好的生活,所以采取努力。

恐惧是痛点,做产品,要么满足人们让他爽,要么帮他们抵御恐惧。例如化妆产品可以抵御对青春逝去的恐惧,罗辑思维可以抵御人们对认知焦虑的恐惧。


因为人会基于自身所处的角色、所在的场景和个人的认知判断,选择性地说一些他觉得正确的话。

优秀的销售人员(打破防御)与 优秀的产品经理(根本不让用户启动防御)

基于意识清醒的交流,达成交易的唯一方式:“让对方感觉占了便宜” —-打破防御

而好的产品经理,在于不让用户启动防御,顺应用户的潜意识。意识即防御。


潜意识:1)童年 2)催眠(本质就是绕过防御)-重复(手段)/集体人格

集体人格 / 角色

集体,一堆角色,集体人格

集体人格的形成,角色化行为,就是一个人被教育的过程:

确定目标:给人们树立什么的观念
建立恐惧的边界(明确角色不可以做什么,如果违反了,就惩罚)
放入清晰的标的(明确角色只能做什么)
给予红利,然后让他产生路径依赖
不断重复

为什么通过教育让人形成集体人格呢? 为了便于管理。所以,教育是违反人性的。

教育是按照人类对社会的美好期望来教育你,换句话来讲教育是理想化的

有经验的将军其实能够通过训练与管理,让一个集体的集体人格短时间压倒个体的脆弱。老大一声喊,大家就冲上去了,但是这是不得已才会发生的情况。


自然(自发,符合人性) 与 应该(被教育,反人性)

人们只有在压力非常大的情况下,才会去扮演角色。除非你给他的压力非常到位,否则就不要对他做角色化预期。

角色化生存,角色化生存就是我们真实的生存处境。产品经理应该去角色化得认识、沟通、交互,才能得到真正的感情。


自律 VS 自我,哪一个更贴近产品精神。

做产品经理的人善于感知,在已有的结论上建立新观点。而做其他管理的人更善于逻辑推理和总结归纳。

自律:靠恐惧驱动、规则边界,控制力是自律的延伸

被认为算“左脑思维”的人:
逻辑推理能力强、时间观念强,同时感受力差
因为感受力差,所以没那么敏感和情绪化,整个人体现为情绪稳定,甚至刻板;
更容易根据规则调适自己,更自律,更容易角色化。

自我:靠愉悦驱动,创造力是自我的延伸。

感受力强;
能在别人已经有结论的地方,建立自己的新观察,并且不太喜欢听已有的逻辑;
难以控制自己的情绪,能激情地表达自己,具有人格魅力。

看到自己的愉悦和恐惧,看清自己的天分,看到别人的愉悦和恐惧,了解他们的潜意识与集体人格,不要触发他们的防御。


中观视角 日常产品工作视角

机会判断(一套底层思维,三个具体方法)发现机会

机会判断

机会判断

点线面体思考框架

穷人-点的努力
中产-至少要获得一次线性周期的收益
富人-借助面和体的崛起(国家、经济体、经济周期、产业、行业、领域)

做一个产品的时候,入手只能是一个点;但是:
这个点,是附着在哪个面(你在哪个公司上班)上?这个面是在和谁竞争,他能如何展开?
这个面,是附着在那个经济体上?这个经济体是在崛起还是在沉没?

1.描述一下,你现在的职业是什么样的一个点?
2.你所在的公司或者业务肯定是需要串联很多点的一条线,那你的这个点是在公司这条线的什么位置上?
3.这个公司附着在什么样的一个面上,谁在给你或你的公司赋能?这个面又是附着在哪个经济体上?
就好像在地球仪上,找到自己的位置点一样,请你用点线面体的框架,尝试标一下自己的位置。


孙子兵法:

胜与不胜在于彼,败与不败在于己。(《孙子兵法》的全篇核心就是这个概念,意思就是说:我能不能赢了你,其实我做不了主,这是你的问题;但是我会不会输,会不会打光所有的牌,会不会下桌走人,那是我自己的问题。)

求之于势,不责于人。(一个人要做成一件事情,其本质上不在于你有多强,而是你要顺势而为,于万仞之上推千钧之石)

作为领导者,要自己去寻找有势能的,而不能寄希望于员工的点。反过来你要想,大家把自己最好的“点“都给了你。在一个时间周期之后,你会回报给大家什么样的线性收益呢?

离开你情绪的点,去看线的方向,去预测这条线的周期,并且明确自己在周期的哪个位置,是哪个面再给你赋能。

你在一条正弦曲线的哪个位置? 这个曲线是往下的还是向上的?

人生的选择远比努力更重要。
你的个人努力,只是在点、线、面、体的既定框架内,作为一个点的挣扎而已。


从点开始:痛点、爽点、痒点都是产品机会

表象之下:

为什么?因为自我实现其实是一条漫长而痛苦的路。人的本性是懒惰的。你看到一个人展现出了勤奋、规整、自律,其实这是被一系列的恐惧(痛点)、集体人格、潜意识压迫,才会呈现出那个样子。

痛点:就是恐惧,打中人的恐惧

爽点:就是即时满足,用户有什么需求,你能够即时满足他

痒点:就是满足虚拟自我,要满足用户想象中的自己。例如,网红产品的流行。


用户:两套经典的用户画像(其实两套用户画像系统)

第一套:羊群与草地

草地:你提供的产品,我们提供的草地,一定要让“第一只羊”爽,能够满足他们;

第一只羊(关键角色):你的首批用户,羊死了,或者羊在草地上玩的不爽

你找到了这个用户,他可以在你这里得到即时满足玩得很开心,那么针对这只羊,针对这个用户的同类用户去做推广,你的产品就可以被快速地推开。

头羊(关键角色):核心用户,自组织,具备网络效应;头羊的数量决定了你的网络效应有多大。

当你要评估一个产品或者一家公司的网络效应有多大时,一个非常简单的评估方式就是数一数它有多少头羊(比如说论坛的版主、Y公会的老大、微博的大V、重度用户、淘宝的店主,这些都是头羊。)

狼:变现用户

基本上所有玩互联网网络效应的、玩社区都是这一套用户画像。

例子:摄影网站的版主、BBS天涯的版主、百度贴吧的版主、淘宝的买家

第二套:大明、笨笨、小闲

  • 大明:对自己的需求非常明确、非常清晰(寻求的是价格、或者硬货;)

大明用户需要的是搜索,因为他们对自动主动要找的东西是非常明确的。

最早的互联网电商:找到自己想要的,然后比价格。京东的成功,源于强大的体量,对供应链的挤压能力越来越强,能够越来越好的服务好大明用户。

用户特点:需求清晰明了(价格、帮我搞定事情)、没有忠诚度

  • 笨笨:我有大概的需求,但是没那么明确。

女人买裙子,小红书,逛。

笨笨变大明:逛到要买的东西后,开始追求最便宜的。但是,如果笨笨决定了要买什么产品,那么下一秒有70%-80%的概率,笨笨就会变成大明,然后开始去追求价格。

一个经典场景是我在豆瓣东西上找买东西的灵感,接着到淘宝上去找最便宜的一件购买。

  • 小闲:我没有消费需求,我就是来打发时间的

百度、京东服务小明,淘宝服务笨笨,那么腾讯就是服务小闲的。

QQ、微信朋友圈、游戏、看视频

腾讯用户往游戏、视频的转换率会很高,但是往电商转化却很低,源于场景不对。


两套画像的关系 + 痛点、痒点、爽点

不管是小明、笨笨还是小闲,他们都是羊;你想服务哪种羊,就要按照三种不同的羊的需求,来管理你的草地,来制作你的产品。
具体到 痛点、痒点、爽点,你得让三种羊按照他们的心理预期,来吃一口你的草,如果吃得开心就再也不离开了。具体就是:解决了他的痛点、让他开心让他爽了。

狼:
腾讯像用户收费,剪羊毛
京东、淘宝向商家收费


场景-设计产品时要包括产品的场景

什么是场景

场:一个场就是时间加空间,用户必须在这个空间里停留和消费(不停留,不是场景)
景:情景和互动。

当用户停留在这个空间的时间里,要有情景和互动让用户的情绪出发,并且裹挟用户的意见,这就是场景

新场景的出现,其实也是一个“体”,比如碎片时间就是一个新场景。

罗辑思维:碎片时间(一个新的场景) + 认知焦虑(用户痛点)

场景的核心就是在时间加空间的点上触发别人的情绪。

人的理智和意识都是把人往回拉的,而所有的情绪都是推动人的行动的。所以人会做某一个动作,会往前走,是被情绪所推动的。

只有能触发用户情绪的场景才是真正的流量入口。

互联网商业其实就三个核心词:产品、流量、转化率,也就是产品的比拼、流量的争夺、转化率的优化。这就是互联网竞争的全部。


当你规划一个产品时,要问自己七个问题:
(1)我的产品解决了什么问题?是痛点、痒点还是爽点?
(2)我是在为谁解决这个问题?他得到即时满足了嘛?这是用户画像的问题
(3)有多少人需要解决这个问题?这个是市场规模的问题
(4)目前人们是如何解决这个问题的?这个是竞争分析的问题
(5)我的竞争方案为什么能够在市场竞争中胜出?你不要简单的看单点的竞争力,而是要看点线面体,谁给你赋能
(6)用户会在怎样的场景触发情绪?需要马上去解决问题,这是场景问题。
(7)当用户遇到问题的时候,他会想到哪个名字?


系统能力(四个步骤,打造个人、公司核心能力)

系统能力

用系统能力给人提供确定性

系统能力的定义

我们看到的所有结果,都是系统能力的产物。你可以回到《机会判断:点线面体的战略选择》一课里,思考为什么一个“点”没那么重要?因为任何一个“点”都附着在一条“线”上,每一个“点”其实都是一条“线”的截面。

这也是为什么结婚教练建议以结婚为目的的相亲,第
一次见面正常平淡即可,没有必要专门地表现自己,因为每个人的自然呈现都是系统能力的结果

比如一个人好的身材,其实是长期自律的结果;一个人得体而有美感的着装,其实是长期的审美陶冶的产物;一个人的神情和谈吐,其实是学识和性情的产物。所以一个人很自然地展现的一切,是层层叠加、长期积累的系统能力的产物。

当你说你要做一个产品,你需要的是建设一套系统能力。

就好像你想拥有好的身材,就必须得有控制饮食和保持运动的系统能力一样。

整体流程和确定性

产品视角 VS 服务视角

以用户得到一个洞为目的去提供服务,而不是想着把要做一个打孔机,卖给卖出去,这就是产品与服务的区别。

如果总谈产品,容易以产品经理为中心,想着通过一款产品去改变世界。但

是如果出发点是服务,就会以用户获得和用户满足为中心来设计。

这两种方式的目的和实现途径完全不一样。

产品:ATM
服务:取现金
系统能力(确定性):验证ID后,问你需要多少钱,然后吐钱给你。

确定性的重要性

人们生来惧怕不确定性,所以当我们提供了某种确定性,其实就是解决了用户的某一个痛点。

你现在急需用钱,可是ATM能不能取到钱是不确定的,你害怕吗?

不确定性的东西是没有办法让你投入时间或者持续依赖的。

围绕ATM系统能力的设计和建设,所做的一切都是为了确保确定性。
(当你提供核心服务时,也分流了系统的核心资源)

基于服务的产品思考流程

从存在感 到 能力圈层,再到资源层。
当你提供核心服务的时候,也分流了企业的核心资源。

基于服务的本质,我们需要的几个流程:
(1)战略判断:战略部门需要做一个决策,为什么要提供这个服务?提供服务对于企业、对于用户的价值是什么?可能的价值点~
(2)运营部门要对每一台ATM有没有实现战略诉求来做价值评估(看看取款机有没有人用)
(3)运营不闷对每个点的战略价值做完数据分析和价值评估后,需要哪个点存在,我就要保证它的服务可用(确保它能够吐出钱)
(4)维护ATM还需要更多事情,比如硬件管理
(5)客服管理

当你准备做一个产品时,基于系统能力,你需要考虑:

(1)你的产品在“点线面体”的什么位置?
(2)你提供的是一个什么样子的确定性
(3)为了确保确定性的稳定提供,你需要的系统能力需要包括哪些环节?你有足够的资本和能力来支撑所有的环节吗?

系统效率

产品是系统能力的产物;而企业则是效率分工的产物。

做产品就是在建设一套系统能力,提供并保障确定性,而效率则是这个系统能力的一个核心指标。

互联网思维最关键的两个点:一个是用户体验,一个是效率。小米的护城河:效率。 —-雷军

效率就是快

当你决定要做一个产品,准备搭建自己的系统能力时,你先问自己一句“我应该从哪个点来建立我系统性的效率优势?”因为没有效率优势,这个系统是一个没有竞争力的系统。

小米:集中力量打造一款手机;小米之家(逆袭);小米小店

迭代

迭代就是小步快跑,把最内核的部分先放出来,不断优化,小范围试错。

版本规划能力,产品就是要直指人心!

判断产品经理是否牛B,很重要的一条就在于判断他设计的产品第一个版本有多简单、直接、切中要害,能不能直指人心。

不自信,才附加更多功能,寻找心理依靠。

所以产品的核心功能点有效比什么都重要,基于核心功能附加的其他功能点没有那么重要,可以一步步来。

圈层 (B站的二次元圈层)

圈层壁垒(B站的破圈之路)

互联网核心用户 460w (很长时间,微信红包很长一段时间内活跃用户数))

微信红包 =》 春晚

从400万用户到一亿用户,靠春节这样一个核心场景
的触发完成。支付宝积累一亿用户用了多久呢?大概是8年,而微信支付是一天。

用户体验(五个具体方法,优化你的表达界面与产品体验)

关键任务-关系系统生死的任务

带领大家找到关键任务,穿越生死的能力,就是领导力。

普通员工:明确知晓有风险
项目经理:具备风险规避意识。
总监:有风控能力,有风险规避意识,明知有长线风险。无法避过时,知道如何组织大家做好突发预案。
总经理,能操作有风险的执行—-非生即死,富贵险中求

面对生死考验,依靠的不是管理能力,而是领导力。甄别关键任务,动员大家穿越生死。

系统能力

所有的产品都是系统能力的结果;我们要做的不是一个产品,而是建设一种能力,然后为你的用户提供确定性。

系统能力的效率优势、系统的迭代能力,都不是最后你呈现的产品表面能看得出来的,但是你的系统能力是你的产品能否存在的本质。

只要你在创业,终有一天会面临跨越生死。那个时候,副总裁、总监通通都帮不了你。这时能够支撑你的,是你对关键任务的甄别,你内心的确认感和你真正的兄弟


用户体验

用户体验]

用户体验的五个层次

情绪纠偏,认知纠偏,不再只从原生感受上来看问题。从用户的潜意识层面考虑,从用户的情绪出发,通过场景reach到用户的痛点、爽点、痒点。

不仅要仅仅考虑用户,用户的需求可能随着时间带来的趋势发生变化甚至消失,所以我们要顺势而为,“于万仞之上推千钧之石”,预测趋势,顺应趋势,抓住趋势。

【承上启下】厚积薄发,厚积在于建设系统能力,薄发在于提升用户体验。

用户体验有哪5个层次:

  • 战略存在层

明确的回答两个问题:

  1. 我们要通过这个产品得到什么?(对于企业的价值)
  2. 我们的用户要通过这个产品得到什么?他们为什么要依赖我们? (对于用户的价值)
  • 能力圈范围层

围绕着清晰的战略,我们需要明确回答:

  1. 我们要做到哪些事情,具体要提供什么样子的确定性?
  2. 我们不做那些事,对这些事坚决不碰。

能力圈朝着战略的方向变化、拓展。

  • 资源结构层

资源:毛泽东一句话定义了“资源”,就是“谁是我们的敌人,谁是我们的朋友”。

建设资源与能力有关,更与战略有关。

  • 角色框架层

用于网站是框架,用于用户是角色。

例如你跟空姐或者银行职员对话,她的反馈方式即是角色框定的。

  • 感知层

精美的网站、简洁、体验

baidu 胜出 google,胜出在了资源层、能力圈层
google 胜出 yahoo,胜出在了框架层

用户体验地图

用户体验地图就是通过画一张图,用一种讲故事的方式,从一个特定用户的角度出发,记录下他与产品或者服务进行接触、进入、互动的完整过程。

如何画用户体验地图

  1. 一个画像完整的人物角色(你对你的第一只羊,了解吗?)
  2. 清晰的描述用户的目标和预期(他为什么来到你的草地上?他买打孔机,不是为了用户打孔机,而是为了在墙上打个洞;吃饭的目的在于什么?吃饱还是营造气氛?)
  3. 服务触点(用户从接触你的服务,到实现他的目的,会跟你在产品上有哪些接触)
  4. 用户使用路径(用户逛宜家是使用路径,而到盒子前拿免费资料是触点)
  5. 用户情绪曲线(场景是要触发情绪的)

一个好产品,是从一个好故事开始的。要讲好用户故事,而不要过分关注数据。

服务蓝图

CEO核心工作:定义战略、建设能力圈
服务设计蓝图:解决资源结构和角色框架的问题

用户体验地图,是以用户情绪为中心的,讲的是第一只羊如何才能玩得开心,具体在哪个点爽、哪个点不爽

而服务蓝图,则是以服务流程为中心的。你提供的产品,不可能满足用户所有的预期。资源有限,控制成本

服务蓝图到底要做什么:一眼,一条路、三个点

一眼:产品要第一时间让用户“一眼”看到自己的目标
一条路:产品要有一个清晰的路径,让用户能够知道如何使用你的服务,用来达到或者接近自己的目标。服务崩溃点
三个点:峰值、终值、忍耐底线
成本控制是本分,但是不能挑战用户的忍耐底线
峰终定律:体验最高峰(正面、负面)以及结束时的体验,难以忘记。

宜家的服务设计蓝图

设计服务蓝图的核心在于:让你在资源有限的情况下,配置你的资源,在关节点上安排角色,保证整体服务路径不崩溃,尽量不要压倒用户的忍耐底线。然后,尽量集中资源,打造体验的峰值,最后在做一个体验终值的美好小尾巴。

上瘾机制:用户激励系统

激励:完成预定动作,就能得到满足。

不确定的爽点 与 确定的爽点,就是用户体验地图情绪曲线。

游戏的动力,就是压力感突然被满足,压力释放的爽感、确定性的获得、激励的满足感和在一起,让一个人成瘾。

确定就是依赖;不确定就是伤害;一个确定性的丧失,无论大小都是非常难受的。

宏观视角
创新模式(五个创新模式,洞悉顶级公司的创新战略)

创新模式

一个复杂的应用程序可能会有更多的中间层次,比如基于API的API,不过基本思想仍然是一样的:

每个层都通过提供一个明确的数据模型隐藏更低层次中的复杂性

这些抽象允许不同的人群有效地协作(例如数据库厂商的工程师和使用数据库的应用程序开发人员)。

以上采用七层逻辑架构,第一层客户层,第二层前端优化层,第三层应用层,第四层服务层,第五层数据存储层,第六层大数据存储层,第七层大数据处理层。

客户层:减少Http请求数,浏览器缓存,启用压缩,Js异步,减少Cookie传输;

前端层:DNS负载均衡,CDN本地加速,反向代理服务;

应用层:业务拆分;负载均衡,分级管理,应用缓存,服务集群,快速失败,异步调用,服务降级,消息队列,幂等设计等。

服务层:提供公用服务,比如用户服务,订单服务,支付服务等;

数据层:分布式, 数据库集群,读写分离,NOSQL集群,文件系统集群;分布式缓存;冗余备份(冷,热备[同步,异步],温备),失效转移(确认,转移,恢复)。CAP理论,一致性算法。

大数据存储层:支持应用层和服务层的日志数据收集,关系数据库和NOSQL数据库的结构化和半结构化数据收集;

大数据处理层:通过Mapreduce进行离线数据分析或Storm实时数据分析,并将处理后的数据存入关系型数据库。(实际使用中,离线数据和实时数据会按照业务要求进行分类处理,并存入不同的数据库中,供应用层或服务层使用)。