面包屑思维模型实战模型错题集结构手册流程手册自我检测专题模块

  • 微信小程序前端
    微信小程序前端易错点收集
    查看
  • css/less/sass样式控制
    在开发过程中的一些样式控制bug规避
    查看
  • tp5开发小程序
    tp5开发小程序时错误积累
    查看
  • PHP错题集
    PHP在实际开发过程中遇到的问题
    查看
  • MySql数据库
    使用MySql在实际开发中遇到的错误总结
    查看
  • TP5错题集
    积累tp5框架在实际开发过程中遇到的问题
    查看
  • uni-app爬坑
    主要用于uni-app项目中遇到的一些问题
    查看
  • Vue.js易错收集
    vue.js项目常见错误收集整理
    查看
  • uni-app开发微信小程序
    uni-app开发微信小程序的一些爬坑积累
    查看
  • Linux
    Linux在部署、开发、运维时遇见的错误积累
    查看
  • 安全设计
    常见安全设计
    查看
  • Redis
    项目中使用redis的相关错误积累
    查看
  • 前端特效
    前端特效相关错题集
    查看
more

最新博文

  • JavaScript之多线程和Event Loop

    JavaScript

    风口下的猪2020-01-30JavaScript

    阅读更多
  • TP5用composer安装扩展类库

    thinkphp

    1.在tp根目录下面,按住shift键不放,然后点击鼠标右键,选择“在此处打开命令行窗口”。


    2.输入composer,检查是否安装composer.exe


    3.使用国内镜像下载,就是为了复制下面一段代码


    composer config -g repo.packagist composer https://packagist.phpcomposer.com

    在命令行中输入这段代码(木的是为了加快下载速度)


    4.进入Packagist网站,下载需要的类


    如:phpexcel


    直接搜索phpexcel,复制composer require phpoffice/phpexcel到命令行中


    然后最重要的一件事,等待下载在完成...............................................


    5.检查是否安装成功,在根目录下的vendor中查看



    ————————————————

    版权声明:本文为CSDN博主「数学太陡」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

    原文链接:https://blog.csdn.net/qq_28137309/article/details/81434568

    风口下的猪2020-01-17thinkphp

    阅读更多
  • vscode 快捷键

    软件开发

    高频率快捷键

    Mac 快捷键 说明
    Commd + [ 文本向左缩进
    Commd + ] 文本向右缩进
    Shift + Alt + F 实现代码的对齐
    Commd+Shift+[, Commd+Shift+] 折叠打开代码块
    Commd+C/X/V 如果光标没有选中任何元素,则会复制或剪切或粘贴一整行
    option + ↑ 或 option + ↓ 上下移动一行
    Shift+Alt+ 或Shift+Alt+↓ 向上向下复制一行
    Commd+Enter 在当前行下边插入一行
    Commd+Shift+Enter 在当前行上方插入一行

    Mac 键盘符号说明

    ⌘ == Command
    ⇧ == Shift
    ⇪ == Caps Lock
    ⌥ == Option
    ⌃ == Control
    ↩ == Return/Enter
    ⌫ == Delete
    ⌦ == 向前删除键(Fn+Delete)
    ↑ == 上箭头
    ↓ == 下箭头
    ← == 左箭头
    → == 右箭头
    ⇞ == Page Up(Fn+↑)
    ⇟ == Page Down(Fn+↓)
    Home == Fn + ←
    End == Fn + →
    ⇥ == 右制表符(Tab键)
    ⇤ == 左制表符(Shift+Tab)
    ⎋ == Escape (Esc)
    ⏏ == 电源开关键

    常用

    Mac 快捷键 说明
    ⇧⌘P, F1 显示命令面板
    ⌘P 快速打开
    ⇧⌘N 新建 窗口/实例
    ⌘W 关闭 窗口/实例

    基本编辑

    Mac 快捷键 说明
    ⌘X 剪切
    ⌘C 复制
    ⌥↓ / ⌥↑ 移动当前行向 下/上
    ⇧⌥↓ / ⇧⌥↑ 复制当前行向 下/上
    ⇧⌘K 删除当前行
    ⌘Enter / ⇧⌘Enter 在下/上 插入一行
    ⇧⌘\ 跳转到匹配的括号
    ⌘] / ⌘[ 向左/向右 缩进当前行
    Home / End 跳到当前行的头部,尾部
    ⌘↑ / ⌘↓ 跳到当前行的开始,结束
    ⌃PgUp 滚动到
    ⌃PgDown 滚动到行头/行尾
    ⌘PgUp /⌘PgDown 滚动到页头/页尾
    ⇧⌘[ / ⇧⌘] 折叠/展开区域
    ⌘K ⌘[ / ⌘K ⌘] 折叠/展开所有子区域
    ⌘K ⌘0 / ⌘K ⌘J 折叠/展开所有区域
    ⌘K ⌘C 添加行注释
    ⌘K ⌘U 删除行注释
    ⌘/ 切换行注释
    ⇧⌥A 切换块注释
    ⌥Z 切换文字换行

    多光标和选择

    Mac 快捷键 说明
    Alt+Click 插入光标
    ⌥⌘↑ 在上面插入光标
    ⌥⌘↓ 在下面插入光标
    ⌘U 撤消上一个光标操作
    ⇧⌥I 在所选每行的末尾插入光标
    ⌘I 选择当前行
    ⇧⌘L 选择当前选择的所有事件
    ⌘F2 选择当前单词的所有出现
    ⌃⇧⌘→ 展开选择
    ⌃⇧⌘← 收缩选择
    Shift+Alt + drag mouse (拖动鼠标)列(框)选择
    ⇧⌥⌘↑ 向上列(框)选择
    ⇧⌥⌘↓ 向下列(框)选择
    ⇧⌥⌘← 向左列(框)选择
    ⇧⌥⌘→ 向右列(框)选择
    ⇧⌥⌘PgUp 列(框)选择 向上一页
    ⇧⌥⌘PgDown 列(框)选择 向下一页

    搜索和替换 |

    Mac 快捷键 说明
    ⌘F 查找
    ⌥⌘F 替换
    ⌘G / ⇧⌘G 查找下一个/上一个
    ⌥Enter 选择查找匹配的所有匹配项
    ⌘D 将选择添加到下一个查找匹配
    ⌘K ⌘D 将最后一个选择移至下一个查找匹配项

    丰富的语言编辑

    Mac 快捷键 说明
    ⌃Space 触发建议
    ⇧⌘Space 触发参数提示
    Tab Emmet扩展缩写
    ⇧⌥F 格式化文档
    ⌘K ⌘F 格式选择
    F12 转到定义
    ⌥F12 Peek定义
    ⌘K F12 打开定义到一边
    ⌘. 快速修复
    ⇧F12 显示引用
    F2 重命名符号
    ⇧⌘. / ⇧⌘, 替换为下一个/上一个值
    ⌘K ⌘X 修剪尾随空格
    ⌘K M 更改文件语言

    导航

    Mac 快捷键 说明
    ⌘T 显示所有符号
    ⌃G 转到行...
    ⌘P 转到文件...
    ⇧⌘O 转到符号...
    ⇧⌘M 显示问题“面板”
    F8 / ⇧F8 转到下一个/上一个错误或警告
    ⌃⇧Tab 浏览编辑器组历史记录
    ⌃- / ⌃⇧- 后退/前进
    ⌃⇧M 切换选项卡移动焦点

    编辑器管理

    Mac 快捷键 说明
    ⌘W 关闭编辑窗口
    ⌘K F 关闭文件
    ⌘\ 拆分编辑窗口
    ⌘1 / ⌘2 / ⌘3 聚焦到第1,第2,第3编辑器组中
    ⌘K ⌘← / ⌘K ⌘→ 聚焦到上一个/下一个编辑器组
    ⌘K ⇧⌘← / ⌘K ⇧⌘→ 向左/向右移动编辑器
    ⌘K ← / ⌘K → 移动活动编辑器组

    文件管理

    Mac 快捷键 说明
    ⌘N 新建文件
    ⌘O 打开文件
    ⌘S 保存
    ⇧⌘S 保存为...
    ⌥⌘S 保存所有
    ⌘W 关闭
    ⌘K ⌘W 关闭所有
    ⇧⌘T 重新打开已关闭的编辑器
    ⌘K 输入保持打开
    ⌃Tab / ⌃⇧ 选项卡打开下一个/上一个
    ⌘K P 复制活动文件的路径
    ⌘K R 在资源管理器中显示活动文件
    ⌘K O 在新窗口/实例中显示活动文件

    显示

    Mac 快捷键 说明
    ⌃⌘F 切换全屏
    ⌥⌘1 切换编辑器布局
    ⌘= / ⇧⌘- 放大/缩小
    ⌘B 切换侧栏可见性
    ⇧⌘E 显示资源管理器/切换焦点
    ⇧⌘F 显示搜索
    ⌃⇧G 显示Git
    ⇧⌘D 显示Debug
    ⇧⌘X 显示扩展名
    ⇧⌘H 在文件中替换
    ⇧⌘J 切换搜索详细信息
    ⇧⌘C 打开新命令提示符/终端
    ⇧⌘U 显示输出面板
    ⇧⌘V 切换Markdown预览
    ⌘K V 打开Markdown预览到一边

    调试

    Mac 快捷键 说明
    F9 切换断点
    F5 开始/继续
    F11 / ⇧F11 跳进/出
    F10 跳过
    ⇧F5 暂停
    ⌘K ⌘I 显示悬停

    集成终端

    Mac 快捷键 说明
    ⌃` 显示集成终端
    ⌃⇧` 创建新终端
    unassigned (末分配)复制选择
    unassigned (末分配)粘贴到活动终端
    ⌘↑ 向上滑动
    ⌘↓ 下身滑动
    PgUp 向上滚动页面
    PgDown 向下滚动页面
    ⌘Home 滚动到顶部
    ⌘End 滚动到尾部

    风口下的猪2020-01-13软件开发

    阅读更多
  • pid的组成意义

    淘宝联盟

    完整的pid示例:mm_42558587_36684024_131444579

    (1).其中,42558587为 淘宝联盟账号的ID。

    (2).36684024为媒体ID。

    (3).131444579为推广位的ID。

    风口下的猪2020-01-12淘宝联盟

    阅读更多
  • CSRF攻击原理及测试方法

    计算机组成原理

    CSRF 攻击实例

    CSRF 攻击可在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下执行在权限保护之下的操作。

    比如说,受害者 Bob 在银行有一笔存款,通过对银行的网站发送请求

    http://bank.example/withdraw?account=bob&amount=1000000&for=bob2 可使Bob1000000 的存款转到 bob2 的账号下。

    通常情况下,该请求发送到网站后,服务器会先验证该请求是否来自一个合法的 session,并且该 session 的用户 Bob 已经成功登陆。黑客 Mallory 自己在该银行也有账户,他知道上文中的 URL 可以把钱进行转帐操作。

    Mallory 可以自己发送一个请求给银行:

    http://bank.example/withdraw?account=bob&amount=1000000&for=Mallory

    但是这个请求来自 Mallory 而非 Bob,他不能通过安全认证,因此该请求不会起作用。这时,Mallory 想到使用 CSRF 的攻击方式,他先自己做一个网站,在网站中放入如下代码:

    src="http://bank.example/withdraw?account=bob&amount=1000000&for=Mallory "

    并且通过广告等诱使 Bob 来访问他的网站。当 Bob 访问该网站时,上述 url 就会从 Bob 的浏览器发向银行,而这个请求会附带 Bob 浏览器中的 cookie 一起发向银行服务器。

    大多数情况下,该请求会失败,因为他要求 Bob 的认证信息。但是,如果 Bob 当时恰巧刚访问他的银行后不久,他的浏览器与银行网站之间的 session 尚未过期,浏览器的 cookie 之中含有 Bob 的认证信息。这时,悲剧发生了,这个 url 请求就会得到响应,钱将从 Bob 的账号转移到 Mallory 的账号,而 Bob 当时毫不知情。等以后 Bob 发现账户钱少了,即使他去银行查询日志,他也只能发现确实有一个来自于他本人的合法请求转移了资金,没有任何被攻击的痕迹。而 Mallory 则可拿到钱后逍遥法外。

     

    CSRF 攻击的对象

    在讨论如何抵御 CSRF 之前,先要明确 CSRF 攻击的对象,也就是要保护的对象。

    从以上的例子可知,CSRF 攻击是黑客借助受害者的 cookie 骗取服务器的信任,但是黑客并不能拿到 cookie,也看不到 cookie 的内容。另外,对于服务器返回的结果,由于浏览器同源策略的限制,黑客也无法进行解析。因此,黑客无法从返回的结果中得到任何东西,他所能做的就是给服务器发送请求,以执行请求中所描述的命令,在服务器端直接改变数据的值,而非窃取服务器中的数据。

    所以,我们要保护的对象是那些可以直接产生数据改变的服务,而对于读取数据的服务,则不需要进行 CSRF 的保护。比如银行系统中转账的请求会直接改变账户的金额,会遭到 CSRF 攻击,需要保护。而查询余额是对金额的读取操作,不会改变数据,CSRF 攻击无法解析服务器返回的结果,无需保护。

     

    当前防御 CSRF 的几种策略

    在业界目前防御 CSRF 攻击主要有三种策略:

    验证 HTTP Referer 字段;

    在请求地址中添加 token 并验证;

     HTTP 头中自定义属性并验证。

    下面就分别对这三种策略进行详细介绍。

     

     

    (一)验证 HTTP Referer 字段

    根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。

    在通常情况下,访问一个安全受限页面的请求来自于同一个网站,比如需要访问 http://bank.example/withdraw?account=bob&amount=1000000&for=Mallory,用户必须先登陆 bank.example,然后通过点击页面上的按钮来触发转账事件。这时,该转帐请求的 Referer 值就会是转账按钮所在的页面的 URL,通常是以 bank.example 域名开头的地址。而如果黑客要对银行网站实施 CSRF 攻击,他只能在他自己的网站构造请求,当用户通过黑客的网站发送请求到银行时,该请求的 Referer 指向黑客自己的网站。因此,要防御 CSRF 攻击,银行网站只需要对于每一个转账请求验证其 Referer 值,如是以 bank.example 开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如 Referer 是其他网站的话,则有可能是黑客的 CSRF 攻击,拒绝该请求。

     

    这种方法的显而易见的好处就是简单易行,网站普通开发人员不需操心 CSRF 的漏洞,只需在最后给所有安全敏感的请求统一增加一个拦截器来检查 Referer 的值就可以。特别对于当前现有系统,不需改变当前系统的任何已有代码和逻辑,没有风险,非常便捷。

     

    然而,这种方法并非万无一失。Referer 的值由浏览器提供,虽然 HTTP 协议上有明确要求,但每个浏览器对于 Referer 的具体实现可能有差别,并不能保证浏览器自身没有安全漏洞。使用验证 Referer 值的方法,就是把安全性都依赖于第三方(即浏览器)来保障,从理论上来讲,这样并不安全。事实上,对于某些浏览器,比如 IE6 或 FF2,目前已有一些方法可篡改 Referer 值。如果 bank.example 网站支持 IE6 浏览器,黑客完全可把用户浏览器的 Referer 值设为以 bank.example 域名开头的地址,这样就可通过验证,从而进行 CSRF 攻击。

     

    即便是使用最新浏览器,黑客无法篡改 Referer 值,这种方法仍然有问题。因为 Referer 值会记录下用户的访问来源,有些用户认为这样会侵犯到他们的隐私权,特别有些组织担心 Referer 值会把组织内网中的某些信息泄露到外网中。因此,用户自己可设置浏览器使其在发送请求时不再提供 Referer。当他们正常访问银行网站时,网站会因请求没有 Referer 值而认为是 CSRF 攻击,拒绝合法用户访问。

     

    (二)在请求地址中添加 token 并验证

    CSRF 攻击之所以能够成功,是因黑客可完全伪造用户的请求,该请求中所有的用户验证信息都存在于 cookie 中,因此黑客可在不知道这些验证信息的情况下直接利用用户自己的 cookie 来通过安全验证。要抵御 CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如请求中没有 token 或 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

     

    这种方法要比检查 Referer 要安全一些,token 可在用户登陆后产生并放于 session 之中,然后在每次请求时把 token 从 session 中拿出,与请求中的 token 进行比对,但这种方法的难点在于如何把 token 以参数的形式加入请求。对于 GET 请求,token 将附在请求地址之后,这样 URL 就变成 http://url?csrftoken=tokenvalue。 而对于 POST 请求来说,要在 form 的最后加上 <input type=hidden” name=csrftoken” value=tokenvalue/>,这样就把 token 以参数的形式加入请求了。但是,在一个网站中,可接受请求的地方非常多,对于每一个请求都加上 token 是很麻烦的,并且很容易漏掉,通常使用的方法就是在每次页面加载时,使用 javascript 遍历整个 dom 树,对于 dom 中所有的 和 form 标签后加入 token。这样可以解决大部分的请求,但是对于在页面加载之后动态生成的 html 代码,这种方法就没有作用,还需要程序员在编码时手动添加 token

     

    该方法还有一个缺点是难以保证 token 本身的安全。特别是在一些论坛之类支持用户自己发表内容的网站,黑客可在上面发布自己个人网站的地址。由于系统也会在这地址后面加上 token,黑客可在自己的网站上得到这个 token,并马上就可发动 CSRF 攻击。为了避免这一点,系统可在添加 token 时增加一个判断,如果这链接是链到自己本站的,就在后面添加 token,如果是通向外网则不加。不过,即使这个 csrftoken 不以参数的形式附加在请求之中,黑客的网站也同样可通过 Referer 来得到这个 token 值以发动 CSRF 攻击。这是一些用户喜欢手动关闭浏览器 Referer 功能的原因。

     

    (三)在 HTTP 头中自定义属性并验证

    这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便,同时,通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。

    然而这种方法的局限性非常大。XMLHttpRequest 请求通常用于 Ajax 方法中对于页面局部的异步刷新,并非所有的请求都适合用这个类来发起,而且通过该类请求得到的页面不能被浏览器所记录下,从而进行前进,后退,刷新,收藏等操作,给用户带来不便。另外,对于没有进行 CSRF 防护的遗留系统来说,要采用这种方法来进行防护,要把所有请求都改为 XMLHttpRequest 请求,这样几乎是要重写整个网站,这代价无疑是不能接受的。

     

     

    测试技巧:查看在请求地址中添加 token 并验证

    使用谷歌浏览器查看请求headers之一:

     

     

    使用谷歌浏览器查看查看请求headers之二:

     

    使用浏览器查看Cookies




    风口下的猪2020-01-07计算机组成原理

    阅读更多
  • uniapp运行到app端出现空白的问题

    uni-app

    风口下的猪2020-01-07uni-app

    阅读更多
  • uni-app开发微信小程序时page.json如何设置每个页面的Style(状态栏、导航条、标题、窗口背景色等)

    uni-app

    page.json设置每个页面的状态栏、导航条、标题、窗口背景色等,针对不同设备端,有不同的设置方法

    app-plusObject设置编译到 App 平台的特定样式,配置项参考下方 app-plusApp
    h5Object设置编译到 H5 平台的特定样式,配置项参考下方 H5H5
    mp-alipayObject设置编译到 mp-alipay 平台的特定样式,配置项参考下方 MP-ALIPAY支付宝小程序
    mp-weixinObject设置编译到 mp-weixin 平台的特定样式微信小程序
    mp-baiduObject设置编译到 mp-baidu 平台的特定样式百度小程序
    mp-toutiaoObject设置编译到 mp-toutiao 平台的特定样式字节跳动小程序
    mp-qqObject设置编译到 mp-qq 平台的特定样式QQ小程序
    usingComponentsObject引用小程序组件,参考 小程序组件App、微信小程序、支付宝小程序、百度小程序

    然而在uni-app官方文档中,针对app-plus和h5有详细的配置说明,但mp-weixin没有。

    经过几分钟的猜测与验证,原来mp-weixin里面的配置项,就相当于微信官方文档中页面配置里面的配置项

    页面配置

    每一个小程序页面也可以使用 .json 文件来对本页面的窗口表现进行配置。页面中配置项在当前页面会覆盖 app.json 的 window 中相同的配置项。文件内容为一个 JSON 对象,有以下属性:

    配置项

    属性类型默认值描述最低版本
    navigationBarBackgroundColorHexColor#000000导航栏背景颜色,如 #000000
    navigationBarTextStylestringwhite导航栏标题颜色,仅支持 black / white
    navigationBarTitleTextstring导航栏标题文字内容
    navigationStylestringdefault导航栏样式,仅支持以下值:
    default 默认样式
    custom 自定义导航栏,只保留右上角胶囊按钮
    微信客户端 7.0.0
    backgroundColorHexColor#ffffff窗口的背景色
    backgroundTextStylestringdark下拉 loading 的样式,仅支持 dark / light
    backgroundColorTopstring#ffffff顶部窗口的背景色,仅 iOS 支持微信客户端 6.5.16
    backgroundColorBottomstring#ffffff底部窗口的背景色,仅 iOS 支持微信客户端 6.5.16
    enablePullDownRefreshbooleanfalse是否开启当前页面下拉刷新。
    详见 Page.onPullDownRefresh
    onReachBottomDistancenumber50页面上拉触底事件触发时距页面底部距离,单位为px。
    详见 Page.onReachBottom
    pageOrientationstringportrait屏幕旋转设置,支持 auto / portrait / landscape
    详见 响应显示区域变化
    2.4.0 (auto) / 2.5.0 (landscape)
    disableScrollbooleanfalse设置为 true 则页面整体不能上下滚动。
    只在页面配置中有效,无法在 app.json 中设置
    usingComponentsObject页面自定义组件配置1.6.3


    风口下的猪2019-12-20uni-app

    阅读更多
  • 微信小程序swiper-item设置style引起图片不显示问题(ios端)

    uni-app

    风口下的猪2019-12-20uni-app

    阅读更多
  • watch数据监听

    uni-app

    watch在Vue语法中,用以监听数据变化。

    其语法是

    watch:{
           name(val){
           }
           acount(val){
           }
    }

    即必须包含两个部分:

    (1)以要监听的数据为函数名(例子中要监听name和acount两个数据);

    (2)用以代指数据的形参val。


    注意:

    watch监听不仅可以监听data存储区的变量,在子组件中还可以监听从父页面props传来的数据。



    风口下的猪2019-12-04uni-app

    阅读更多
  • flex-shrink:0、flex:1

    微信小程序

    flex-shrink:0,即定义元素不压缩,使其在flex布局中保持原有尺寸。

    flex:1,相当于flex-grow,即元素扩展,使其在flex布局中占剩余空间的全部。  

    风口下的猪2019-11-16微信小程序

    阅读更多
  • 用RFM模型实现用户分层管理

    产品设计

    一、RFM回顾

           在以用户价值来做用户模型当中,其实是有两个方向。一个是基于用户生命周期,也就用户在产品内的成长路径进行的生命周期模型的搭建。另一个就是基于用户关键行为进行搭建。其中RFM模型是最典型的,是衡量用户价值和用户创利能力的一个重要的工具和手段,早被广泛应用在各个行业中了。有很多文章详细介绍RFM模型的,这里我就不细写了,简单带过。

    RFM的含义:

    R(Recency):客户最近一次交易时间的间隔。R值越大,表示客户交易发生的日期越久,反之则表示客户交易发生的日期越近。

    F(Frequency):客户在最近一段时间内交易的次数。F值越大,表示客户交易越频繁,反之则表示客户交易不够活跃。

    M(Monetary):客户在最近一段时间内交易的金额。M值越大,表示客户价值越高,反之则表示客户价值越低。





           除了直接用RFM模型对用户进行分组之外,还有一种常见的方法是利用RFM模型的三个属性对客户进行打分,通过打分确定每个用户的质量,最终筛选出自己的目标用户。

    RFM模型评分主要有三个部分:

    1、确定RFM三个指标的分段和每个分段的分值;

    2、计算每个客户RFM三个指标的得分;

    3、计算每个客户的总得分,并且根据总得分筛选出优质的客户

           比如,实操的过程中一般每个指标分为3-5段,其中R值可以根据开店以来的时间和产品的回购周期来判定,F值根据现有店铺的平均购买频次,M值可参考上文客单价的分段指标。

    举个例子:



    二.使用RFM模型对数据做处理的流程

    RFM模型的应用中,整体来说分层这5大步骤。(如上图)根据这个思路,我们开始分析工作。


     #  1.抓取R、F、M三个维度下的原始数据

    例如


    原始数据

    先把数据进行处理,把3周数据汇总一下。看起来就漂亮点。



     #  2.定义RFM的评估模型和中值

           利用数据透视表,观察一下整体数据的分布情况,这可以帮助我们更客观去划分区间。除了这个方法,划分方法还可以根据具体业务规律来划分,或者是2/8法则来划分。可能有人会有疑问,为什么要把数据再划分几个区间?因为如果数据跨越幅度太大的话,划分区间能更精准映射数据模型上的价值,简单说就是为了更精细化。

    (1)登陆次数分布:


    (2)登停留时间分布:


    (3)下单次数分布:


           根据上面登录次数、停留时间、下单数走势,我把划分4个区间。定义每个区间对应的值。这里,登录次数、停留时间、下单次数越高,对应的分值就越高,越重要。


    接着,把用户类型归类好,这里数值重要性是M>R>F。



     #  3.进行数据处理,获取R、F、M的值

    我们先用if函数算出R值(即登录次数,不同次数对应的区间的值)函数公式:=IF(B2<=8,1,IF(B2<=18,2,IF(B2<=30,3,IF(B2>=30,4)))) ,把所有对应的R算出来,再分别算出对应的F的值和M的值(如下图)。if函数的用法,逻辑比较容易出错。忘记的朋友可以百度一下。


    得出了所有的R、M、F值,但是,我们还是没办法判断这个值的高低。这时还需要一个模型中值。我分别取了R、F、M值的平均数(如下图),取平均值是比较常用的方法。除了平均值,还有去中位数等方法的。


    用if函数,分别判断R、F、M值的高低。函数是:=IF(E2>$M$1,"高","低")



     #  4.参照评估模型,对用户进行分层

    把R、F、M值的高低都标记出来后,我们用IF函数把用户类型打标。函数如下:

    IF(AND(H2="高",I2="高",J2="高"),"重要价值用户",

    IF(AND(H2="高",I2="低",J2="高"),"重要保持用户",

    IF(AND(H2="低",I2="高",J2="高"),"重要发展用户",

    IF(AND(H2="低",I2="低",J2="高"),"重要挽留用户",

    IF(AND(H2="高",I2="高",J2="低"),"一般价值用户",

    IF(AND(H2="高",I2="低",J2="低"),"一般发展用户",

    IF(AND(H2="低",I2="高",J2="低"),"一般保持用户",

    IF(AND(H2="低",I2="低",J2="低"),"一般挽留用户"))))))))


    函数非常长,需要细心写点哦。这里说一下,IF(AND(H2="高",I2="高",J2="高")

    AND表示几个条件同时满足时,输出正确值,否则进入下一个IF判断。


    最后,再用数据透视表汇总一下,这样就可以清晰知道每一层用户的情况了。然后,就根据不同的用户类型定制运营策略。





    风口下的猪2019-11-16产品设计

    阅读更多
  • 软件开发
  • 素质要求
  • 计算机基础
  • 架构
  • 安全
  • 性能
  • 运维
  • 尾页
  • 数据库
  • 开发终端
  • 语言基础
  • 项目管理
  • 产品设计
  • 系统
  • 工作规范
  • 计算机网络
  • 前端技术栈
  • 数据结构
  • 计算机组成原理
  • 后端技术栈
  • 性能优化
  • 安全设计
  • 常见模块
  • 计算机操作系统
  • 服务器
  • python
  • MySQL
  • thinkphp
  • PHP
  • Java
  • JavaScript
  • Windows
  • Linux
  • 特效
  • indexedDB
  • vue
  • 淘宝联盟
  • Ionic
  • Angular
  • 微信小程序
  • 支付宝小程序
  • uni-app
  • css/sass/less
  • 支付
  • socket
  • 爬虫
  • web性能优化
  • 消息推送
  • CVM
  • sqlite
  • Redis
  • 前端基础
  • 基础
  • element
  • Nginx
  • yii2
  • /ponder/index/catelist/catelist/cateid/10.html

    我的名片

    网名:风口下的猪

    职业:软件开发、广告传媒

    现居:重庆渝北

    Email:kamoneyte@qq.com

    标签云

    站点信息

    • 文章统计:528篇
    • 移动端访问:扫码进入SQ3R