Neo's Blog

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

0%

时间轮

逻辑形式:时间轮

实际结构:链表数组

实现原理:

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

假设图中每层轮子为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,不过基本思想仍然是一样的:

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

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

普通版本打家劫舍

普通DP,第i家抢还是不抢?

环形版本打家劫舍

思路:

由于首尾也属于相邻,因此需要分别判断,以第一家是否打劫分成两个问题

第一家抢:最后一家一定不能抢,从第0个到len-2做动态规划

第一家不抢:从1到len-1做动态规划

然后比较找出最大值

二叉树版本打家劫舍

不太像是一个DP问题,他的本质是一个DFS问题。

本质上所有的DP问题都可以看作DFS + 备忘录。

M(Machine),可以理解成一个线程,真正执行P的线程。系统线程,想要在CPU上执行代码必须有线程,通过系统调用clone创建

P(Processor),一个P表示一个逻辑处理器,用于调度G。每一个Processor有一个称为G的队列,队列里放了等待被调度运行的协程。M必须获得P才能执行P队列中的G代码,否则会陷入休眠

G,一段goroutine代码,放到P对应的队列上,等待被调度运行。代表一个计算任务,由代码和上下文(如当前代码执行的位置、栈信息、状态等)组成。

一般而言,通过倒序vector\来表示高精度大数;

因为做运算时,通常需要从低位开始,所以一般vector需要进行逆转处理。

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//高精度加法 —— 模板题 AcWing 791. 高精度加法
// C = A + B, A >= 0, B >= 0
vector<int> add(vector<int> &A, vector<int> &B)
{
if (A.size() < B.size()) return add(B, A);

vector<int> C;
int t = 0;
for (int i = 0; i < A.size(); i ++ )
{
t += A[i];
if (i < B.size()) t += B[i];
C.push_back(t % 10);
t /= 10;
}

if (t) C.push_back(t);
return C;
}

//高精度减法 —— 模板题 AcWing 792. 高精度减法
// C = A - B, 满足A >= B, A >= 0, B >= 0
vector<int> sub(vector<int> &A, vector<int> &B)
{
vector<int> C;
for (int i = 0, t = 0; i < A.size(); i ++ )
{
t = A[i] - t;
if (i < B.size()) t -= B[i];
C.push_back((t + 10) % 10);
if (t < 0) t = 1;
else t = 0;
}

//清除后面的0(高位)
while (C.size() > 1 && C.back() == 0) C.pop_back();
return C;
}

//高精度乘低精度 —— 模板题 AcWing 793. 高精度乘法
// C = A * b, A >= 0, b > 0
vector<int> mul(vector<int> &A, int b)
{
vector<int> C;
int t = 0;
for (int i = 0; i < A.size() || t; i ++ )
{
if (i < A.size()) t += A[i] * b;
C.push_back(t % 10);
t /= 10;
}

return C;
}

//高精度除以低精度 —— 模板题 AcWing 794. 高精度除法
// A / b = C ... r, A >= 0, b > 0
vector<int> div(vector<int> &A, int b, int &r)
{
vector<int> C;
r = 0;
for (int i = A.size() - 1; i >= 0; i -- )
{
r = r * 10 + A[i];
C.push_back(r / b);
r %= b;
}
reverse(C.begin(), C.end());
while (C.size() > 1 && C.back() == 0) C.pop_back();
return C;
}

我们按照多个维度来组织我们的知识。

第一个维度,知识的维度。

通过知识维度,我们能够熟练掌握该类知识能够解决的经典问题,从而加深了对知识的理解。

第二个维度,问题的维度。

问题维度的话,我们尽量罗列该问题的多种解法(从一般算法到最优解法);通过这种方式,我们体会算法&数据结构的精妙的同时,不断加深对问题的理解。

第三个维度,问题变种维度。

有很多问题,可以衍生出很多的变种。对于这些问题,我们也会开一个专门的目录来对待。

参考:

按照pattern刷题 https://www.zhihu.com/question/36738189/answer/908664455

https://www.educative.io/courses/grokking-the-coding-interview?aff=K7qB

GM面试

此次面试的目的

总结一下GM比较关注的问题方向

1)在这个岗位上可以发挥什么价值?
2)稳定性怎么样?
3)潜力、自驱思考力如何?

可能的一些问题

为什么选腾讯; 你的同事怎么形容你一个词;

自我介绍,为何离职?当前和上一家公司介绍在当前公司过去一年最大成就;

再问了一个比较详细的项目问题和你在项目里的职责以及贡献点,

你是否了解面试的岗位(职位)?这个岗位做什么的?
你面试要做的这个产品解决了什么问题?
市面上已经有的产品面临什么问题?
为什么在职业生涯发展阶段中从C端产品转做了平台产品?
职业生涯规划如何?
你和职业生涯下一步的差距在哪里?
为什么最开始先去CSIG面试了?这两个岗位差距还不小,你如何理解的?

为什么选择现在所在的行业(比如我在做物流)?
未来这个行业会怎么样?
你们公司现有的xxx业务如何做的?哪里做的不好?
如果你是公司的xxx业务负责人,你会怎么做?

最后时间有限可以问gm一个问题?

如何回答

  1. 分别拆解基于每个point会问我的问题

1)为团队带来的价值:

a. 这个岗位是做什么的?— 对照岗位介绍和之前面试官重点关注的方向做思考总结;
(1)项目架构设计工作 (2)借助研发流程、业务抽象,提升研发效率与质量 (3)理解业务特性,改善团队的分工协作效率

b. 如果你来了你准备怎么做?(你可以为团队产出什么价值?)— 照着岗位介绍去思考哪里是团队的机会、我个人可以产出哪些边际价值;

c. 对部门的理解?— 根据之前面试官问的问题,看了很多行业报告结合自己的思考,猜测了一下行业未来的机会。(这一部分说对说错也没所谓,反正想了总比没想好)

d. 之前带团队做管理有什么心得? — 首先要建立信任、坦诚沟通。为团队成员要做三件事:1. 给些导师指导 2. 帮忙争取资源 3. 主动承担责任

角色认知:由工程师转向管理者
管理规划:职能(为什么存在,使命与职责)、目标、团队、选择
你团队是干什么的?(职责是下限,使命是上限)
你团队想做出什么成果?
你依靠什么样的团队?
你需要投入哪些资源?
团队建设:能力与意愿、分工与协作、梯队与文化
任务管理:事前轻重缓急;事中有效执行;事后流程
目标清晰、责任明确、机制健全和沟通到位
管理沟通:目的、内容、通道、影响力

2)稳定性怎么样?

a. 期待在这份工作里收获什么?(职业生涯规划?)— 我个人是想成为某个行业的专家,并且有触类旁通迁移的能力。

b. 为什么想离职?— 缺少指路人。

c. 为什么之前突然从C端产品经理转做平台产品经理? — 不是主动要求转岗,是当时公司缺平台产品,我加班做了这部分工作,做着做着就做成了平台产品经理。( ´▽`)

d. 之前为什么面试CSIG的岗位?跟你之前做的方向不太一致 — 想变成平台产品的行业专家,所以需要做比较复杂业务下的平台类产品,从这个角度将这两个岗位其实是一致的。

e. CSIG为什么面了五面挂了?如何复盘的?

— 我觉得挂掉有两个原因:1. CSIG的岗位90%的要求其实是满足的,但是有10%的不契合;2. 因为这10%的不契合而过分紧张,没发挥好,很多想过的问题都没有答到点上。

— 自己复盘了一下,其实没必要对那10%不自信,只要稳定发挥基本上没问题的。

3)潜力怎么样?思考的宽度和深度

a. 为什么当时想来“货拉拉“?

— 考虑到三个因素:1. 好赛道(来之前查了物流行业占全国总GDP的15%的样子)2. 好公司(势头很猛,从默默无闻到闷声赚钱)3. 好领导(当时是觉得leader能力非常棒才来尝试的,但是很快leader就撤了…)

b. 你觉得这个行业会如何发展?

— 发达国家的物流行业占全国总GDP大概在12%的样子,我国和发达高价还有3%的gap。基于这个gap猜测,后续物流行业的GDP会越来越低,信息化、智能化、供应链会做的越来越好。在这个行业背景下,越是有研发能力的公司越容易变成寡头,两极分化会更明显。

作为技术管理者,我如何保持技术判断力

建立技术学习机制。盘点你负责的业务,需要哪些方面的技术,成立一个或几个核心的技术小组,让团队对各个方向的技术保持敏感,要求小组定期做交流和分享,这样你就可以保持技术的敏感度。
专项技术调研项目化。如果某项技术对团队的业务有重要的价值,可以专门立项做技术调研,并要求项目负责人做调研汇报。
和技术大牛交流。越是厉害的技术人,越能深入浅出地把技术讲明白,所以针对某项技术找大牛取经,也是学习的好途径。你看,虽然实际操刀的时间少了,但是你和技术大牛的交流机会多了,一方面因为你有更大的影响力了,另一方面,你和大牛有了共同的诉求,就是把技术“变现”,让技术产生价值。
听取工作汇报。因为你带的是技术团队,大部分工作都和技术相关,在读员工的周报、季度汇报时,相互探讨,也是一种切磋和学习。

引发新经理不自信的三个困境,我们就探讨完了,我把它们简要总结一下:

第一,你可以通过梳理自己可迁移的能力,提升能力自信;

第二,你可以通过把自己从团队成员的对立面抽离,提升角色自信;

第三,你可以通过收集外部积极正向的反馈,提升自我认同。

一面
第一轮是笔试,方式是邮箱发的牛客网上的链接,一共2个小时,3种题型:10个选择,2个填空,3个问答题,选择题涉及C++基础知识
如没有名字的类有哪些特点:有没有构造函数和析构函数,是不是编译错误;int**x的指针中(x[2]+4)[3]跟哪一个指的是同一块儿地址,
还有操作系统一个程序阻塞SIGUSER1和SIGCHILD消息,
当这个程序变为非阻塞时是否会收到这两个消息;
填空题第一题是给你一个main程序和foo()函数程序(分别在不同的.c中),问用gcc-o -main.c foo.c命令编译的C++程序,最终输出的a,b,c的值具体是多少(a,b,c分别在main函数和foo函数中定义并给出初始化);
第二道是给出五个程序都是实现了用一个线程创建另外两个线程,问这五个里面是否有发生竞态;问答题有3道:
第一个是动态规划问题:如果用a=1,b=2,……z=26那么给出一个数字串如111,一共有多少种用字符替换的方式,如ak,ka和aaa三种,返回3;
第二道题是奇数阶魔方矩阵的填数,告诉你实现的算法文字描述,让你用代码实现,比较简单;
第三道是数组的封装(如数组的底层内存分配有mmap和堆空间创建等方式,因此有不同的数组实现方式,让提出方案把几种实现方式封装),让你写设计方案,感觉好像是写文字就行

10道选择题,两道填空题以及三道问答题。
主要知识点偏 C 语言方向:
Q:1. fork函数相关的执行流程
0条回答
Q:2. 信号优先级以及阻塞机制(SIGHLD、SIGUSR1)
2条回答
Q:3. 给一个常见的需求场景,要求设计相关的方案,比如有多个底层实现的数组(mmap、malloc或自定义的实现);要求提供给用户的接口是统一的,用户无需关心数组底层的实现即可直接使用。

第一轮笔试:6选择题+2填空题+2编程题+1设计题。有防作弊选择题是牛客的中上水平,时间宽裕。填空题略难,需要演算。编程题不是OJ,估计需要看你代码风格,一道是easy数列题(前缀积),一道是数独题。设计题与循环队列相关。第二轮技术群面:是每个组的组长来面。询问以往经历的C++调优、海外经历等。考察了一道medium编程题、一道无锁队列题。可以和面试官沟通。第三轮HRBP:非常专业的HRBP,问题犀利,考察你做工作时的这么几个素质:抗压能力、钻研倾向、稳定倾向等等。如果遇到她感兴趣的会一直追问到你难以回答为止。谢天谢地过了。第四轮CTO终面:还没开始,后面回来写。

一面 第一轮是笔试,方式是邮箱发的牛客网上的链接,一共2个小时,3种题型:10个选择,2个填空,3个问答题,选择题涉及C++基础知识如没有名字的类有哪些特点:有没有构造函数和析构函数,是不是编译错误;int**x的指针中(x[2]+4)[3]跟哪一个指的是同一块儿地址,还有操作系统一个程序阻塞SIGUSER1和SIGCHILD消息,当这个程序变为非阻塞时是否会收到这两个消息;填空题第一题是给你一个main程序和foo()函数程序(分别在不同的.c中),问用gcc-o -main.c foo.c命令编译的C++程序,最终输出的a,b,c的值具体是多少(a,b,c分别在main函数和foo函数中定义并给出初始化);第二道是给出五个程序都是实现了用一个线程创建另外两个线程,问这五个里面是否有发生竞态;问答题有3道:第一个是动态规划问题:如果用a=1,b=2,……z=26那么给出一个数字串如111,一共有多少种用字符替换的方式,如ak,ka和aaa三种,返回3;第二道题是奇数阶魔方矩阵的填数,告诉你实现的算法文字描述,让你用代码实现,比较简单;第三道是数组的封装(如数组的底层内存分配有mmap和堆空间创建等方式,因此有不同的数组实现方式,让提出方案把几种实现方式封装),让你写设计方案,感觉好像是写文字就行

1、简历问题,排名多少能拿奖学金,上过什么课等等2、c++有什么特点3、封装是什么意思,为什么要封装4、虚函数的底层实现5、成员的三种访问属性。子类能不能访问父类protected的成员6、聊项目,没展开很多,主管展开得多…7、epoll好在哪里,epoll_wait是阻塞还是非阻塞8、讲讲epoll的流程9、继承要满足什么条件?(组合和继承的关系)10、问学没学过操作系统,讲讲操作系统(有点尬不知道讲什么…)11、做题:逆波兰表达式求值 ,面试官共享屏幕看题目,然后共享自己的屏幕在本地IDE写。有个小bug没发现运行结果不太对,但面试官说bug不调了,他觉得是对的。

时长大概2小时,基础原理 编程,数学为主, 概率题:买卖股票,蚂蚁怕树枝等模板题:template 判断某个类中是否包含某个变量,,编程题:难度还好

10选择 2填空 3问答
主要是数学,c++ 和linux相关问题
主要考察信号、程序运行结果以及指针操作相关问题

new()的内存分配过程
进程与线程
tcp和udp
epoll原理
项目介绍

首先是笔试,笔试有两个小时时间会考察很多基础知识还有编程题。
要考察你的c++功底,比如c++的面向对象编程特点,还有一些数据库的知识,还有很多操作系统较为底层的知识,比如io多路复用等。
我笔试后好久没出结果了。

、输入某一年,输出这一年每个月最后一个星期五是哪一天-,输出格式”2020-10-23”
2、多线程题目,有3个线程,每个线程都分别输出0,偶数,奇数,如何设计输出01020304….
3、算法题-动态规划题 假设你有M万元(M为整数,100

题目整体偏难,考察C++深度比较深入。问了很多C++底层的知识,考察了宏,模板,等,io多路复用,算法题目感觉都是leetcode

linux系统的相关问题,如调用的时延;
cache miss x86;
面试官问了人选一些项目上的问题及工作难点,及如何运用到量化交易的项目上

涉及的面挺广的,操作系统,数据结构,概率等4个小时的答题时间,刚刚毕业的学霸做这些题目会比较有优势。

五道单选, 计算机基础,unix基础
两道算法 数独 加 ip地址
量化交易公司的软件开发岗,时间一个小时 时间比较紧

给你一根面条求围成圈圈的期望2老王已知有俩娃参加聚会的时候带来了一儿子求另一个为儿子的概率3leecode是求注水体积问题用单调栈解决и还有挺多数学题的不太记得了

编写出求两正整数M,N之间的最大公因数的程序

编写出求两正整数M,N之间的最大公因数的程序

具体题目:
1.二叉树一层一层打印下来,然后再从左到右打印奇数,从右到左打印偶数。 2.找括号,经典栈的算法题
3.输入一个二维数组,输出这个二维数组的所有元素的和
4.写出一个判断参数是否符合要求的装饰器
其他的编程题目就是和交易直接相关的,处理一连串时间序列判断是不是交易日,处理交易数据计算收益率,还有编写一个模拟交易所撮合成交单子程序。都还比较简单,用pandas就能搞定,其中没有嵌入复杂的算法。

https://blog.csdn.net/weixin_42327556/article/details/101844256

新型股票交易策略,可以买卖任意手(可不买100的倍数手),全天24小时任意交易。但规定,每一小时内只能交易一次,相邻T i T_{i}T
i

和T i + 1 T_{i+1}T
i+1

交易差的绝对值不超过1;第24时内的交易和1时的交易差的绝对值不超过1;考虑交易方向。成交净买入为零,即买入的手数=卖出的手数。问,每天最多可以交易多少次?(答:144次)
4个球分别为不同的颜色,每次随机取出两个,将第二个的颜色涂成第一个的颜色,问多少次才能将4个球涂成同一个颜色的期望?
蚂蚁的问题,有N只重量均为1的蚂蚁均匀分布在一根杆上,要么往左,要么往右走,速度相同,但是第1只往右走,第N只能往左走。狩猎规则:重量大吃重量小的;重量相等,往左走吃往右走的。(1)第N只存活的概率?(2)第K!=N只存活的概率?
二叉树怎么返回公共组节点?
做过最有成就感的项目,项目背景,课题理解的深度,如何克服困难?
期望题:回去看草稿纸。
————————————————
版权声明:本文为CSDN博主「Ya2020」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46643879/article/details/114919063

https://cloud.tencent.com/developer/article/1453534

https://zhuanlan.zhihu.com/p/498681895

reverse the sequence of all the words in a string.

  1. 1M 7 digit phone numbers, 2MB spare memory, read each number only once and sort them.号码都不一样。

1 How do you traverse a binary tree to get a sorted list?
2 How do you insert an item to a circular linked list? What is it complexity? How about inserting it in constant time?
3 given a special programming language. No for or while loop, but you are given function that can add an element in front of array, and a function for comparing two elements. Can you use this language to sort an array?
4 reverse the sequence of all the words in a string.
知乎@华尔街老兵

文章首发于知乎号,华尔街老兵©2022

转载请注明出处。

一副4色扑克牌,共52张牌。现在排成一列,问有多少种排法使得没有两张相 同花色是 相邻的?

Given two classes:

class B { public:

B(args_1); B(args_2); // and many constructors with different arg lists };

class D : public B { public:

D(args_1) : B(args_1) {} D(args_2) : B(args_2) {} // and many constructors with different signatures similarly implemented // some additional stuff specific to D };

Assume that the arg list for B’s constructors are quite long and may be revised pretty often in the future, in which case D’s constructors have to be recoded correspondingly. Duplicating the update by copy-and-paste will certainly work here. Can you propose a better way so that the update can be done in one place without copy-and-paste duplication?