最新大地资源网在线观看免费_免费大地资源中文第二页在线观看_大地 ,久久精品黄色网络_日韩黄色三级中文字幕_中文字幕免费乱伦视频_午夜小电影亚洲天

首頁

bootstrap+spring boot實現(xiàn)面包屑導航

seo達人

面包屑導航介紹

一般的內(nèi)容型網(wǎng)站,例如CMS都會有這種面包屑導航。總結起來它有以下優(yōu)勢:







讓用戶了解目前所在的位置,以及當前頁面在整個網(wǎng)站中所在的位置;

體現(xiàn)了網(wǎng)站的架構層級;提高了用戶體驗;

減少返回到上一級頁面的操作;

 



實現(xiàn)效果

那我們應該如何實現(xiàn)?我看網(wǎng)上多數(shù)都是只提供靜態(tài)實現(xiàn),



這里我結合bootstrap 和 spring boot以及mysql來做一個完整的例子。







表結構設計

圖里面的菜單其實是分級維護上下級關系的。我這里用到了2級,表里有l(wèi)evel字段標記。



點擊第1級加載第2級分類,點擊第2級分類名稱則展示面包屑導航。



CREATE TABLE tb_category (

  id bigint(20) NOT NULL AUTO_INCREMENT,

  category_name varchar(100) NOT NULL,

  parent_id bigint(20) DEFAULT NULL,

  level tinyint(1) DEFAULT NULL,

  PRIMARY KEY (id)

) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

insert into tb_category values(1,'Java文檔',0,1);

insert into tb_category values(2,'Java多線程',1,2);

insert into tb_category values(3,'Spring Boot',1,2);

insert into tb_category values(4,'微服務實戰(zhàn)',1,2);

 

insert into tb_category values(5,'Java視頻',0,1);

insert into tb_category values(6,'Java基礎',5,2);

insert into tb_category values(7,'Java基礎',1,2);

commit;

 



前端代碼

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"

      xmlns:sec=";

 

<head>

    <meta charset="utf-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>響應式布局</title>

    <link href="
https://cdn.bootcss.com/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">

</head>

 

<body>

<input type="text" id="ctx" hidden="hidden" th:value="${#request.getContextPath()}">

<div class="container-fluid">

    <!--頁頭-->

    <nav class="navbar navbar-inverse">

        <div class="container-fluid">

            <!-- Brand and toggle get grouped for better mobile display -->

            <div class="navbar-header">

                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"

                        data-target="#bs-example-navbar-collapse-1" aria-expanded="false">

                    <span class="sr-only">Toggle navigation</span>

                    <span class="icon-bar"></span>

                    <span class="icon-bar"></span>

                    <span class="icon-bar"></span>

                </button>

                <a class="navbar-brand" th:href="@{'/breadCrumb'}">Java分享</a>

            </div>

 

            <!-- Collect the nav links, forms, and other content for toggling -->

            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">

                <ul class="nav navbar-nav" id="navbar">

                </ul>

            </div>

        </div>

    </nav>

    <!--面包屑-->

    <ol class="breadcrumb">

    </ol>

    <div class="list-group" id="submenu-list">

    </div>

</div>

<script src=";

<script src="
;

<script>

    var ctx=$("#ctx").val();

    $(function () {

       // 獲取一級菜單

        getMenu(null,1);

    });

 

    function getMenu(id, level){

        var json = {parentId:id,level:level};

        $.ajax({

            url: ctx+"/myCategory/list",

            type: "POST",

            contentType: "application/json",

            dataType: "json",

            data: JSON.stringify(json),

            success: function (result) {

                var text='';

                if (result.success) {

                    if(result.data != null){

                        // 一級菜單

                        if(level!=null){

 

                            $.each(result.data, function (i, r) {

                                text += '<li><a href="#" οnclick="getMenu('+r.id+')">'+r.categoryName+'</a></li>'

                            });

                            $("#navbar").empty();

                            $("#navbar").append(text);

                        }

                        // 子菜單

                        if(id!=null){

                            $.each(result.data, function (i, r) {

                                console.log(i);

                                text += '<a href="#" class="list-group-item" οnclick="getBreadCrumb('+r.id+')">'+r.categoryName+'</a>'

                            });

                            $("#submenu-list").empty();

                            $("#submenu-list").append(text);

                        }

                    }

                } else {

                    alert(result.message);

                }

            }

        });

    }

 

    // 生成面包屑導航

    function getBreadCrumb(id) {

        var param = {id:id};

        $.ajax({

            url: ctx+"/myCategory/getParentList",

            type: "GET",

            data: {"id":id},

            success: function (result) {

                var text='';

                if(result.data!=null){

                    text = '<li><a href="#">首頁</a></li>';

                    $.each(result.data, function (i, r) {

                        text += '<li><a href="#">'+r.categoryName+'</a></li>'

                    });

 

                    $(".breadcrumb").empty();

                    $(".breadcrumb").append(text);

                }

            }

        })

    }

</script>

</body>

 

</html>

藍藍設計m.wnxcall.com )是一家專注而深入的界面設計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計  包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網(wǎng)站建設 平面設計服務。

【一分鐘閱讀】關于組件化,我有一些小建議

seo達人

隨著公司項目多端化,開發(fā)所需要注意的細節(jié)越來越多。我在會議上提出組件化開發(fā),希望能把業(yè)務細節(jié)與技術細節(jié)區(qū)分開來。



 一、組件化流程

首先我們需要找到切入點,我采取的是通過模仿element-ui的組件,先讓我們美工小姐姐,照著element的組件庫描繪一版我們自己的組件,內(nèi)容包括 顏色、字體、按鈕、圖片 等基礎UI組件。這就是我們組件化第一步,UI 組件形成。



其次是業(yè)務組件的補充,這方面我和項目經(jīng)理還有其他前端一起商討,將跨場景跨頁面同樣效果的部分給抽象成組件。組件化第二步,業(yè)務組件形成。



然后就是漫長的更迭與組件補充。



二、組件化細節(jié)處理

2.1 全局文件布置

無論是UI組件還是業(yè)務組件,都包含著class與css。



變量值我選擇存放在兩個公共文件內(nèi):



一個負責管理class名,諸如 x-btn-s,x-btn-m,x-btn-l,x-pic-s,聲明規(guī)則:公司名-組件名-尺寸(業(yè)務場景)。



另一個負責管理 css 變量值, 諸如 $-font-s: 12px,$-font-m:16px; $-font-l:24px;$-background-warn: #f00;聲明規(guī)則:$-相關樣式-大?。伾?br />


再通過 exports 與 import 對全局文件進行調用。



2.2 組件的多樣化使用

通過全局文件的配置,我們對組件的調用從一對一調用變成了一對多調用。如下:



使用全局變量前,我們只能通過以下形式調用



<x-button/>

現(xiàn)在我們可以通過:class的形式調用<x-button/>的多種形態(tài),如下:



<x-button type="$-x-btn-warn' size-'$-x-btn-s'>注冊</x-button>

當然,我們還需要在組件內(nèi)部定義好:class部分,配置如下:



<template>

  <button

    class="x-button"

    :class="[

      type ? 'x-button--' + type : '',

      buttonSize ? 'x-button--' + buttonSize : '',

    ]"

  >

  </button>

</template>

<script>

  export default {

    name: 'XButton',

    props: {

      type: {

        type: String,

        default: 'default'

      },

      size: String,

    },

  };

</script>

2.3 slot 插槽的配置與使用

合理使用 slot 插槽,例如:組件內(nèi)嵌組件,組件內(nèi)嵌文字,內(nèi)嵌 iconfont 等;



三、 組件的配置

在 app.js 中使用 vue.use(components) 對組件進行配置,再在相關頁面進行引用。

藍藍設計m.wnxcall.com )是一家專注而深入的界面設計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設計、BS界面設計 、 cs界面設計  ipad界面設計 、 包裝設計  圖標定制 、 用戶體驗 、交互設計、 網(wǎng)站建設 、平面設計服務

jQuery與Ajax:“特別的”load()方法(篩選文檔、傳遞方法、回調函數(shù))

seo達人

“大名鼎鼎的”jQuery因為其極簡的引用方式而在N年前備受追捧,而今“浪潮”過去,還剩下什么?

我認識jQuery,只是在去年接觸ajax時了解,從而感興趣,進而深入探究(其實也沒多深入,只是相關的看了一下)。不得不說,jQuery對ajax支持的四個type:post(一般用于發(fā)送)、get(一般常用于接收)、put(修改)、delete(刪除) 令我非常震撼,太**實用了。

這其中,post和get是最常用的(因為好像說不是所有的瀏覽器都支持put和delete),具體的我在 這篇文章 中以JS方式提到,這里不再贅述。



load()

load()方法時jQuery中操作上最為簡單的Ajax方法,能載入其他的HTML代碼并插入到DOM中。其基本格式為:



load(url [,data] [,callback])

1

參數(shù)意義:



url: String類型,請求HTML頁面的URL地址

data(可選): Object類型,發(fā)送至服務器的key/value數(shù)據(jù)

callback(可選): Function,請求完成時的回調函數(shù),無論請求成功或失敗

為什么說它是“特別的”呢?因為它只用于文檔流(html)的操作,而且,既可以是get操作,又可以是post操作:



基本示例:



//如果是jsp代碼,這里要加一行:

// <%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

    <title>請求的文件</title>

</head>

<body>

    <div class="comment">

        <h6>張三:</h6>

        <p class="para">沙發(fā)</p>

    </div>

    <div class="comment">

        <h6>李四:</h6>

        <p class="para">板凳</p>

    </div>

    <div class="comment">

        <h6>王五:</h6>

        <p class="para">地板</p>

    </div>

</body>

</html>



//如果是jsp代碼,這里要加一行:

//<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

    <title>發(fā)送ajax的文件</title>

    <script src="js/jquery-2.1.0.js" type="text/javascript"></script>

    //如果是jsp代碼,上面這一行要換成:<script src="<%=request.getContextPath()%>/js/jquery-2.1.0.js" type="text/javascript"></script>

    <script type="text/javascript">

        $(function () {

            $("#send").on("click", function () {

                $("#resText").load("test.jsp");

            });

        });

    </script>

</head>

<body>

    <input type="button" id="send" value="Ajax獲取">

    <div class="comment">已有評論:</div>

    <div id="resText"></div>

</body>

</html>



上面是“載入文檔”,它還可以“篩選載入的文檔”:

如果只需要加載某頁面內(nèi)的某些元素,那么可以使用load()方法的URL參數(shù)來達到目的。通過為 URL參數(shù) 指定選擇符,就可以很方便地從加載過來的HTML文檔里篩選出所需要的內(nèi)容。



load()方法的URL參數(shù)的語法結構為:“url selector”。注意,URL和選擇器之間有一個空格:



$(function () {

    $("#send").on("click", function () {

        $("#resText").load("test.html .para");

    });

});



傳遞方式:

load()方法的傳遞方式根據(jù) 參數(shù)data 來自動指定。如果沒有參數(shù)傳遞,則采用GET方式傳遞;反之,則會自動轉換為POST方式:



//無參數(shù)傳遞,GET方式

 $("#resText").load("test.html .para", function(){

//....

});

//有參數(shù)傳遞,POST方式

 $("#resText").load("test.html .para",{name:"tom", age:"18}, function(){

//....

});



回調函數(shù):

對于必須在加載完成后才能繼續(xù)的操作,load()方法提供了 回調函數(shù) ,該函數(shù) 有3個參數(shù) ,分別代表請求返回的內(nèi)容、請求狀態(tài)和XMLHttpRequest對象 ,jQuery代碼如下:



 $("#resText").load("test.html", function(responseText, textStatus, XMLHttpRequest){

//responseText:請求返回的內(nèi)容——等同于js-ajax時的“得到服務器響應的文本格式的內(nèi)容”(注意:js操作中的get、post...都在open()中規(guī)定)

//textStatus:請求狀態(tài):success、error、notmodified、timeout4種

//XMLHttpRequest:XMLHttpRequest對象——這玩意一般用在判斷瀏覽器適用類型上

});

//注意:在load()方法中,無論Ajax請求是否成功,只要請求完成(complete)后,回調函數(shù)就被觸發(fā)。

藍藍設計m.wnxcall.com )是一家專注而深入的界面設計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設計、BS界面設計 、 cs界面設計  ipad界面設計 、 包裝設計  圖標定制 、 用戶體驗 、交互設計、 網(wǎng)站建設 、平面設計服務

JS基礎知識整理06-函數(shù)

seo達人

使用function關鍵字定義函數(shù)

函數(shù)聲明會被提升(Hoisting),將聲明移動到當前作用域頂端的默認行為。



參數(shù):

如果函數(shù)調用的參數(shù)太多(超過聲明),則可以使用函數(shù)的內(nèi)置對象arguments

arguments.length 會返回函數(shù)被調用時收到的參數(shù)數(shù)目

arguments[index]可以得到相應的參數(shù)



傳遞對象的時候是使用引用來傳遞的,如果函數(shù)修改了對象屬性,則原始對象也改變了。





調用:

以函數(shù)形式調用函數(shù):(這種方式調用默認的是全局對象調用)

function myFunction(a, b) {

return a * b;

}

myFunction(10, 2);



作為方法來調用函數(shù):(這種方式調用屬于函數(shù)的擁有者myObject)

var myObject = {

firstName:"Bill",

lastName: "Gates",

fullName: function () {

return this.firstName + " " + this.lastName;

}

}

myObject.fullName(); 



通過函數(shù)構造器來調用函數(shù):(如果函數(shù)調用的前面是 new 關鍵字,那么這是一個構造函數(shù)調用)

function myFunction(arg1, arg2) {

this.firstName = arg1;

this.lastName  = arg2;

}

var x = new myFunction("Bill", "Gates");

x.firstName; 



call()和apply()方法:

var person = {

fullName: function() {

return this.firstName + " " + this.lastName;

}

}

var person1 = {

firstName:"Bill",

lastName: "Gates",

}

var person2 = {

fullName: function(city, country) {

return this.firstName + " " + this.lastName + "," + city + "," + country;

}

}



call() 方法是預定義的 JavaScript 方法。

它可以用來調用所有者對象作為參數(shù)的方法。

通過 call(),您能夠使用屬于另一個對象的方法。

如:

person.fullName.call(person1)// person1來調用person的fullName方法



call()可以帶參數(shù),參數(shù)對應按順序的傳給方法

person2.fullName.call(person1,"Seattle", "USA")



apply()方法和call()方法類似

區(qū)別在于接收參數(shù)的方式不一樣。

call(obj,"x","y") 方法分別接受參數(shù)

apply(obj,["x","y"]) 方法接收數(shù)組形式的參數(shù)





箭頭函數(shù):(ES6)

箭頭函數(shù)不需要function關鍵字、return關鍵字和大括號

var x = function(x, y) {

  return x y;

}



var x = (x, y) => x
y;

兩個的作用相同。



箭頭函數(shù)沒有自己的this、如果函數(shù)是單個語句,則只能省略 return 關鍵字和大括號

藍藍設計m.wnxcall.com )是一家專注而深入的界面設計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設計、BS界面設計 、 cs界面設計  ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網(wǎng)站建設 、平面設計服務

Hibernate--使用離線查詢DetachedCriteria完成對列表的篩選

seo達人

User表:





User類:

package pers.zhang.domain;



public class User {



private Long user_id;

private String user_code;

private String user_name;

private String user_password;

private String user_state;

public Long getUser_id() {

return user_id;

}

public void setUser_id(Long user_id) {

this.user_id = user_id;

}

public String getUser_code() {

return user_code;

}

public void setUser_code(String user_code) {

this.user_code = user_code;

}

public String getUser_name() {

return user_name;

}

public void setUser_name(String user_name) {

this.user_name = user_name;

}

public String getUser_password() {

return user_password;

}

public void setUser_password(String user_password) {

this.user_password = user_password;

}

public String getUser_state() {

return user_state;

}

public void setUser_state(String user_state) {

this.user_state = user_state;

}

}



ORM元數(shù)據(jù):

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC 

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    ";

<hibernate-mapping package="pers.zhang.domain" >

<class name="User" table="sys_user" >

<id name="user_id"  >

<generator class="identity"></generator>

</id>

<property name="user_code" column="user_code" ></property>

<property name="user_name" column="user_name" ></property>

<property name="user_password" column="user_password" ></property>

<property name="user_state" column="user_state" ></property>

</class>

</hibernate-mapping>



控制層:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

request.setCharacterEncoding("utf-8");

//獲得查詢參數(shù)

String userIdStr = request.getParameter("userId");

String userName = request.getParameter("userName");

//獲得離線查詢對象

DetachedCriteria detachedCriteria = DetachedCriteria.forClass(User.class);

//拼裝查詢條件

if(userIdStr != null && !"".equals(userIdStr)) {

Long userId = (long) Integer.parseInt(userIdStr);

detachedCriteria.add(Restrictions.eq("user_id", userId));

}

if(userName != null && !"".equals(userName)) {

detachedCriteria.add(Restrictions.like("user_name", userName, MatchMode.ANYWHERE));

}



//作為參數(shù)傳遞給service層

UserService userService = new UserService();

List<User> list = userService.findUserByCondition(detachedCriteria);



request.setAttribute("userList", list);

request.getRequestDispatcher("list2.jsp").forward(request, response);

}



Service層:

public List<User> findUserByCondition(DetachedCriteria detachedCriteria) {

//傳遞給Dao層

UserDao userDao = new UserDao();

return userDao.findUserByCondition(detachedCriteria);

}

1

2

3

4

5

Dao層:

public List<User> findUserByCondition(DetachedCriteria detachedCriteria) {

Session session = HibernateUtils.openSession();

Transaction tx = session.beginTransaction();



//關聯(lián)session

Criteria criteria = detachedCriteria.getExecutableCriteria(session);

//查詢

List<User> list = criteria.list();

return list;



}



前端頁面:

忘記寫查詢數(shù)據(jù)回顯了…



<%@ page language="java" contentType="text/html; charset=utf-8"

    pageEncoding="utf-8"%>

<%@ taglib uri="
http://java.sun.com/jsp/jstl/core" prefix="c"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

<script type="text/javascript" src="js/jquery-2.1.0.js" ></script>

<script type="text/javascript" src="js/bootstrap.min.js" ></script>

<link rel="stylesheet" href="css/bootstrap.css" />

</head>

<body>

<form class="form-inline" role="form" method="post" action="${pageContext.request.contextPath }/findUserByCondition">

  <div class="form-group">

    <input type="text" class="form-control" id="exampleInputEmail2" placeholder="用戶ID" name="userId">

  </div>

  <div class="form-group">

    <input type="text" class="form-control" id="exampleInputPassword2" placeholder="用戶名" name="userName">

  </div>

  <button type="submit" class="btn btn-default">篩選</button>

</form>



<div style="text-align: center; width: 600px;">

<table class="table table-hover">

  <tr><td>編號</td><td>用戶ID</td><td>用戶名</td><td>昵稱</td><td>密碼</td></tr>

  <!-- 顯示數(shù)據(jù) -->

  <c:forEach items="${userList }" var="list">

  <tr><td>${list.user_id }</td><td>${list.user_code }</td><td>${list.user_name }</td><td>${list.user_password }</td><td>${list.user_state }</td></tr>

  </c:forEach>

</table>

</div>





</body>

</html>



測試:



藍藍設計m.wnxcall.com )是一家專注而深入的界面設計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設計、BS界面設計  cs界面設計 、 ipad界面設計  包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網(wǎng)站建設 、平面設計服務。

聊聊那些擁有“邊際效應”的產(chǎn)品

濤濤

講述邊際效應對應不同線上線下產(chǎn)品的不同狀態(tài)以及優(yōu)勢

現(xiàn)如今對于大多數(shù)的互聯(lián)網(wǎng)產(chǎn)品來說,其實都大致會用到“邊際效應”這個概念,在看似華麗渲染的互聯(lián)網(wǎng)背后,真正支撐著的是對人的深刻認識與理解。當然,現(xiàn)如今的產(chǎn)品很多都有規(guī)律可循,包括商業(yè)模式、變現(xiàn)方式等等,那么這次我們就來說說那些在互聯(lián)網(wǎng)中產(chǎn)品的邊際成本遞減效應的設計。



邊際成本

首先呢,在這里我要先為大家解釋一下何為邊際成本。

從概念性角度解釋:邊際成本指的是每一個單位新增的產(chǎn)品(或購買的產(chǎn)品)所帶來的總成本增量。

( 舉例 )

比如說現(xiàn)如今的共享單車,在僅生產(chǎn)第一輛的時候,其公司花費的成本是極大的,它包含:設計費、電話費、路程費、人工費等等等等……但是,在生產(chǎn)第100輛的時候,小車兒的成本就低很多了,再不創(chuàng)新的前提下,只要復制就可以了,而如果在生產(chǎn)第1000輛的時候,那成本就更低了,這就是經(jīng)濟規(guī)模帶來的效應。那么,同樣的復制,為什么越復制越便宜呢?其實,這里面有一個對等的增產(chǎn)量對比,由于小車數(shù)量的增多,遍布區(qū)域的擴大,所以,也就導致公司的機會成本增高,也就是成本更低,所以,考慮邊際成本遞減的同時,也要考慮機會的增多。



邊際成本遞減

剛才說到的其實就是邊際效應里成本遞減的模式,也是我們這次討論產(chǎn)品的核心,所謂的邊際效應遞減,就是指在其他條件不變的情況下,如果一種投入要素連續(xù)的等量增加,當增加到一定產(chǎn)值后,所提供的產(chǎn)品增量就會下降,同時可變要素的邊際產(chǎn)量就會遞減。


我在舉個例子:日常的滴滴打車,就是遞減的模式,因為滴滴大多數(shù)的供給側平臺用戶就是私家車出來接單,所以,當平臺每多接入一輛車,那么對于滴滴平臺來講邊際成本就越趨于零。

其實,類似于滴滴打車這樣的線上+線下的資源整合性平臺,更加符合互聯(lián)網(wǎng)的經(jīng)營模式,這是因為互聯(lián)網(wǎng)在21世紀,就是以免費為前提的,隨著用戶的增多,邊際成本的下降,無非就是在完善經(jīng)營的條件下,多開一些服務器和寬帶罷了,其他的成本幾乎已經(jīng)可以忽略不計,而這也正是互聯(lián)網(wǎng)產(chǎn)品成為霸主的必要因素之一。


    注(供給側:經(jīng)濟學術語的一種,意思是指供給方面,國民經(jīng)濟的平穩(wěn)發(fā)展取決于經(jīng)濟中需求和供給的相對平衡。 供給顯示了隨著價錢升降而其它因素不變的情況下,某個體在每段時間內(nèi)所愿意賣出的某貨物的數(shù)量。在某一價格下,消費者愿意購買的某一貨物的總數(shù)量稱為需求量。在不同價格下,供給量會不同。供給和需求也就是說價格與需求量的關系。若以圖像表示,便稱為供給曲線。)



邊際成本的線下產(chǎn)品案例


奶茶案例

在我們逛街購物時,幾乎都會買一杯奶茶飲品,而這里面就運用到了邊際效應的負效應模式,他們運用第二杯半價的手段來提升消費者對產(chǎn)品第一次的貪婪程度,也就是“欲望值”,同時也提升了產(chǎn)品的銷售,但邊際成本不變,當消費者購買后,負效應可能就會產(chǎn)生,因為消費者不一定能喝完。這里就體現(xiàn)的是商品價值取決于人的欲望和欲望被滿足的程度比例。



服裝案例

再比如商場內(nèi)大牌服裝都寫著全場8折,其實仔細想想,8折的價格真的很劃算么?他們這么做也同樣是在運用了邊際效應的同時調取了消費者心理的欲望值,在消費者第一次購買時,單純考慮的爽點而非負效應,但隨著商品購買完的數(shù)量,才真正會產(chǎn)生負效應。



電影票案例

還有一個是關于電影票的,我的一個朋友會經(jīng)常去看電影,之前去看電影的時候是在現(xiàn)場買的票,那次售票員給他推送了一個非常超值的套餐,就是單買一張票是原價48元,但是近期有一個限量套餐,這個套餐里包含:5場電影+1桶爆米花,價格是149元,但是需要一次性消費,聽起來是不是非常超值?我的朋友考慮反正也沒事,那就多看幾場,還便宜。但是如果按照邊際成本遞減與負效應來講,這絕對是一件虧本的買賣,誰能一直做著看十幾個小時的電影不走?我想電影院也一定有這樣的數(shù)據(jù)才會推出這樣的套餐吧。但隨著消費者購買人數(shù)越多,邊際成本遞減,其他人也會紛紛模仿,這里面包含一個人類固有的“羊群效應”,也就形成了商業(yè)價值,但隨著消費者看電影時間的延長,負效應也隨之而來。


    注(羊群效應:羊群效應理論,也稱羊群行為、從眾心理。經(jīng)濟學里經(jīng)常用“羊群效應”來描述經(jīng)濟個體的從眾跟風心理。)



邊際成本的線上產(chǎn)品案例


微信

首當其沖的,自然是微信了,這個傳奇產(chǎn)品堪稱邊際成本做的最好的一個,在我們之前都是運用短信電話的時候,每發(fā)一條短信,每打一個電話都要考慮不同的費用,但由于微信的出現(xiàn),極大的解決了用戶的這個痛點,微信已最核心的打字聊天、語音/視頻通話為主要支點,并賦予各種特色產(chǎn)品輔助。在微信最大化的邊際成本趨于零的同時,迅速擴大了用戶使用產(chǎn)品的范圍區(qū),所以,作為互聯(lián)網(wǎng)的邊際成本,我想微信的在這方面確實做的很好。



GoFun出行

這款產(chǎn)品為共享汽車類型,屬于線上+線下產(chǎn)品,Gofun出行的邊際成本做的比較合理是,首先是他的供給側能力較足,因為依托了首汽集團的優(yōu)勢資源,極大的降低了邊際成本,并通過對用戶的日常作息將碎片打車時間、坐公交時間、出游時間等需求作為整體分析,提供了這一種出行服務,并且現(xiàn)在的產(chǎn)品里還融合了長時間租車服務,這就極大的又一次挖掘了一批潛在用戶,在邊際成本遞減并趨于零的同時,反響的用戶群體范圍也在逐漸擴大。同時這個產(chǎn)品還在登陸時跳出有廣告提示,“分享可得免費時長開車券等優(yōu)惠”,這種手法也是除了在邊際成本遞減的同時,運用的用戶酬賞機制,目的是通過用戶引流用戶。



摩拜單車

在文章開篇的時候我拿共享單車舉過例子,其實摩拜單車的性質與共享汽車的性質大體一致,主線路相似程度可達到80%,這里我要和大家說一個定律,關于用戶的定律。當產(chǎn)品開發(fā)者抓區(qū)并成功解決掉某幾種目標用戶的痛點后,其相等模式可無限制復制,并形成范圍值生產(chǎn)從而解決掉這幾種用戶對等的群體用戶痛點。

我給大家舉個例子應該就徹底明白了,就像醫(yī)藥行業(yè)診斷,當醫(yī)生遇到一種從未遇見過的病毒時,其第一次需要花費的成本是極其昂貴的,但只要一旦得到解決,那么當再次遇到同類型病毒時,就可以快速復制解決,其邊際成本迅速降低,反之收益增高,同時同類型病毒則可批量解決。共享汽車和單車產(chǎn)品正是邊際成本與復制的這一體現(xiàn)。




總結

邊際成本在20世紀時是非常難得的一個概念,因為在20世紀的成本里,幾乎都是建立在“原子經(jīng)濟”上的,而直到21世紀互聯(lián)網(wǎng)形體的出現(xiàn),邊際成本將真實的成倍數(shù)下降,這是因為21世紀的成本發(fā)生了轉移,建立在了“比特經(jīng)濟”上。

所謂原子經(jīng)濟的本質就是需要以大規(guī)模生產(chǎn)取勝,它所遵從的是絕對的單一化、標準化、格式化創(chuàng)造。這種創(chuàng)造,并不能形成邊際成本的遞減,甭別說是趨于零,它需要的是逐漸遞增服務,就像和滴滴打車對抗的線下出租車,隨著消費者的增多,它能做的不是整合,而是新增出租車和司機進行匹配,如果不加入互聯(lián)網(wǎng)行業(yè),他們將很難維持下去。


而比特經(jīng)濟,則正好是多元化、個性化、小眾化、扁平化的。它所崇尚的就是一種主客一體、多元共生共存的理念、可以使使用者分享滿足感和快樂感。這樣的好處是在快速擴大用戶群體區(qū)值的同時還能使邊際成本下降。



文章來源:站酷


本質思考是產(chǎn)品創(chuàng)新的基礎

濤濤

不知道從什么時候我開始 對“創(chuàng)新”這個詞感到些許乏力和恐懼,開始思考為什么有些人能看透問題本質?于是有了本文的探索和總結。

平時我們大部分時間都在做一些“應激反應”的事情,經(jīng)常處于“被安排”的情況下,大腦逐漸懶得去思考背后的東西,通常根據(jù)自己的主觀意愿做出一些反應。慢慢依賴一些“道聽途說”而來的方法論來做一些事情,“套用”效果也不理想。

有一定履歷的產(chǎn)品經(jīng)理多數(shù)也會迷上“經(jīng)驗論”。

  • 迷上自己過往的經(jīng)驗,“我以前做這活動就是用這個策略的,效果很不錯”。
  • 迷上他人的經(jīng)驗,“那天和老同學吃飯,他們這個裂變做得不錯,我們也搞一個”
  • 迷上競爭對手的經(jīng)驗,“它們的狙擊槍也有這個功能,我們也加一個”。

種種行為都是沒有通過本質思考的行為表現(xiàn),都是一些脈沖式的思考。別人做什么 ,我們也跟著去做,只能在這個行業(yè)里面產(chǎn)生細微的迭代,無法實現(xiàn)真正的創(chuàng)新。

關于創(chuàng)新,埃隆馬斯克引爆了一個概念,回歸到事物本質,看透問題本源的思維叫“第一性原理”,它不是一個定律也不是真理,而是一種思維模式。

我先不解釋到底什么是第一性原理,因為本來就處于蒙圈的情況下再去看一些專業(yè)的解釋就會更加蒙圈。

下面分享一個故事,一起來了解一下本質思考這種思考方式,拋開哲學、生命、宇宙本質,圍繞“搶域名”這件事,主角蔡文勝是如何將域名搶注成功率從十萬分之一變成50%以上?他到底是怎么做到及如何思考的。

背景:fm365.com注冊于1999年10月21日,因忘記續(xù)費,到2003年10月21日過期,當時這個網(wǎng)站是聯(lián)想重金打造的門戶網(wǎng)站流量非常可觀,當時可能有10萬人要想搶注這個域名。

想搶注域名的人都知道域名釋放時間是在2003年10月21日,但很多人沒有做好基本的調研與了解,不同域名服務商釋放時間不一樣,有些是次日0點,有些是30天,所以當時大部分人都不知道這個具體域名掉落時間,實際上這個域名掉落時間是在70天之后。

那么知道了域名掉落的具體日期, 也不可能一整天都去注冊搶注, 還需要知道具體時間才能搶注成功,而事實上當時這個域名在美國一個域名商手上,所以掉落時間是在美國的中午12點,對應中國是凌晨3點,在那個時間點域名才完全掉落。

那么問題來了,知道了最后具體掉落日期和時間,怎樣才能脫穎而出,成為那個唯一一個能把域名搶到的人?

蔡文勝做了以下4件事:

第一件,首先注冊域名上所有信息、 名字、郵箱等字段事先填好 ,這個過程大概需要5秒鐘, 然后直接按f5就可以了,只要1秒不到,就能提交注冊信息。

第二件,蔡文勝當時查了一下這個網(wǎng)絡請求到底是怎么走的,發(fā)現(xiàn)這個請求是先從廈門連到上海,上海連到美國,請求的路徑非常長,當時在2003年網(wǎng)速還是非常的慢,所以蔡文勝索性租了一臺上海的服務器,直接從上海連到美國,這樣至少在中國理論上是最快的。

第三件,節(jié)省注冊資料字節(jié)長度,把88888@qq.com改成 1@1.com,因為這信息回頭也可以修改,壓縮后比完整的信息要少幾百個字節(jié),這樣加快提交速度,又提高成功率。

第四件,當時據(jù)說搶注這個域名的人有10萬人,蔡文勝預估有大概前面3件事能淘汰掉90%的人,還和剩余10%的人進行競爭,所以還是不能保證能夠注冊并搶注成功。最后蔡文勝搞了一個自動點擊腳本,每秒提交1000次。最終蔡文勝從10萬人里面脫穎而出,成為唯一一個搶到域名的人。

回歸到搶域名這件事的本質上,把域名開放時間設為T0,提交信息到域名服務器的時間設為T1,使T1-T0的時間最短就能搶注成功。

看完上面的故事,回歸產(chǎn)品人如何訓練/培養(yǎng)自己的本質思維。

01 擺脫原有思維慣性

每個人都有一定思維慣性,看到事物會下意識的做出一些反應。

在《思考,快與慢》書中的知識叫“快系統(tǒng)”,人會本能直覺迅速做出一些判斷和反應,這套系統(tǒng)好處是大腦反應非常快,功耗低還”省電“。

所以我們一旦意識到自己在用過往或他人、競爭對手等經(jīng)驗時先打住,不是說不能用,而先思考這些“經(jīng)驗”對現(xiàn)在是否真正能用上。

每個人都有自己對主觀意識,特別是產(chǎn)品經(jīng)理這個崗位主觀意識真的太強了。在數(shù)據(jù)報表或調研結果上看到一批數(shù)據(jù)會帶上自己的主觀想法來解釋這一批數(shù)據(jù)原因。

擺脫原有的思維慣性應該啟動大腦的“慢系統(tǒng)”,慢系統(tǒng)需要調動我們的邏輯思維等能力,一旦啟動邏輯思維能力周期很長,啟動很慢很費力,所以我們?nèi)粘D敲炊嗍虑樘幚淼臅r候,沒有什么時間去切換慢系統(tǒng),所以會造成前面所說的應激反應。

當然我們也非常難做到每次都使用“慢系統(tǒng)”來解決問題,大腦處理不過來,頭發(fā)也堅持不住,但我們可以鍛煉出好的思維方式,讓自己思考時不輕易的跑到原有的思維慣性去。

02 成為“問題少年”

蔡文勝在搶注FM365這事上就是不斷追問自己,“我還能不能更快一點?”、“我怎樣才能比別人更快搶到!”、“如何將請求路徑變短?”、“怎樣才能提升請求速度?” 從解決問題的路徑上,根據(jù)目標一層一層的不斷的對自己發(fā)問,最終這些問題都會迎刃而解。

有問題請教別人也是突破思維慣性的好方法,拋開對錯,觀點過濾,交流時可以認真聽但不要照著做,和老板給你提需求是一個道理。問題方和解決方看到的視角都是不一樣的,利于思維開闊。

03 在實踐中獲得反饋

“實踐”指的洞察已發(fā)生的事物做出自我思考的問題和想法、比如在“產(chǎn)品分析”環(huán)節(jié)重點研究下對方可能接下來會做些什么事,預估做了會產(chǎn)生哪些結果?當前的業(yè)務形態(tài)為什么會這樣設計?

總之產(chǎn)品方法論有時候并沒有那么重要,最重要的不是學習別人的方法論,而是通過自己的本質思考,不斷總結出自己的方法論,有意識的去訓練自己的思維習慣,養(yǎng)成思維模型,這對產(chǎn)品經(jīng)理才是重要的事情。

文章來源:人人都是產(chǎn)品經(jīng)理

復雜問題該用理性決策還是感性決策?

濤濤

一、明知識、默知識與暗知識的四象限圖

AI被熱捧那么久,王維嘉博士的《暗知識》是第一本把它講明白的中文科普書。

這本書第一個知識框架,就是下面這張4象限圖:

思考方式的革命(一)復雜問題該用理性決策還是感性決策?

(該圖來自:王維嘉的《暗知識》)

該圖將知識按“是否可表達”、“是否可感受”的兩個維度分為四類:

  • 可表達的“明知識”(包括可感受的牛頓定律和不可感受的量子力學)
  • 不可表達但能感受到的“默知識”
  • 而“暗知識”則是:不可表達、又沒法感受到。

具體來說,暗知識是機器發(fā)現(xiàn)的,人類無法感受也無法表達的知識。

就像圍棋,人類2000年來保留的棋譜大概有3000萬個(8位數(shù)),但圍棋上棋子的擺放方法的可能性有2的361次方個(108位數(shù)),中間何止相差萬億倍。人類對圍棋的認知,就是基于3000萬這個8位數(shù)范圍的認知。與機器相比,相差10的100次方。這部分機器能掌握而人不能的,就是暗知識。

這是本書讓人驚嘆的第一個點,通過設立一個新的二維坐標模型,就能夠找到人類以往概念上的盲區(qū)!其次,王博士選的詞匯也是超一流的,“暗”和“默”兩個字都很有神采。

雖然是“科普書”,但書里還是不得不講到人類的“神經(jīng)網(wǎng)絡”、計算機的“機器學習”、“卷積”等復雜概念。

我用自己的語言,以“識別一只貓”為例,為大家簡單講述一下AI吧:

(1)識別貓與計算“1+2=?”不同,前者是“默知識”—— 無法用準確的語言描述出來。在計算機歷史上,通過“尖尖的耳朵”、“長尾巴”、“圓眼睛”等信息來識別貓的程序都失敗了。

(2)我們閉上眼睛想想,如何把一只貓與一只豹子的照片區(qū)別開,需要補充很多語言描述。把一只貓與一只狗區(qū)別開,又需要補充一些描述,其實人是不能把“識別一只貓”這件事情用語言明確說清楚的 —— 既然人說不清,傳統(tǒng)計算機程序就做不到。但人,哪怕是三歲的孩子都能區(qū)別貓和狗,背后是什么原理呢?

(3)后來科學家通過研究人類大腦的神經(jīng)網(wǎng)絡,發(fā)現(xiàn)大腦是通過分層判斷,最終在神經(jīng)元中留下“歷史痕跡”的邏輯鏈條的。這是很有趣的生物學現(xiàn)象,一個神經(jīng)元受到的刺激(生物電擊)越多,得到的營養(yǎng)就越多、就會成長得越強大。而每次判斷在每層神經(jīng)元中留下的痕跡,就會強化今后整個人腦神經(jīng)網(wǎng)絡的判斷能力。

(4)計算機科學家根據(jù)對人類大腦神經(jīng)網(wǎng)絡的認識,開發(fā)了計算機“神經(jīng)網(wǎng)絡”。這個網(wǎng)絡不但可以識別“貓”,而且識別貓的過程也同樣無法輸出成為人能認識的“文字描述”。

(5)這些識別算法就沉淀在“神經(jīng)網(wǎng)絡”中(表現(xiàn)為數(shù)據(jù)及數(shù)據(jù)關系),無法被人類直接掌握,人只能通過安裝了神經(jīng)網(wǎng)絡的計算機獲得這個能力。

(6)不知大家注意到?jīng)]有,為了讓計算機解決這個“默知識”的問題,我們最終是用了“暗知識”來解決。

(7)這類“暗知識”,能夠在計算機之間快速復制,但無法在人和人之間復制,人和人之間能傳遞的只能是控制AI計算機的方法。

暗知識大體說完,我再回到與我們的思考方式相關度更高的“默知識”。

二、《思考,快與慢》的“系統(tǒng)1”

《思考,快與慢》這本書大約是我2013年讀到的,我認為這是那一年我讀到最好的書。好就好在研究老對象(人類行為與注意力)的過程中,用了新思考框架,并建立了有說服力的體系。

幾年來,這本書被我放在電腦顯示器下面,意喻為“抬高了我的視野”。當然,最初是為抬高了顯示器,起到保護頸椎的作用。

思考方式的革命(一)復雜問題該用理性決策還是感性決策?

書里是這樣定義人的兩種思維模式的:

  • 系統(tǒng)1 —— 其運行是無意識且快速的,不怎么費腦力,沒有感覺,完全處于自主控制的狀態(tài)。例如會騎自行車的人,他在騎車時是不需要主動意識指揮手如何轉動車把的,系統(tǒng)1會接管這些動作。
  • 系統(tǒng)2 —— 將注意力轉移到需要費腦力的大腦活動上來。例如:大家可以回憶一下自己第一次騎自行車的場景,當時是需要非常專注地控制雙手和雙腳的,所以往往手忙腳亂。我記得我如果稍不能控制,雙手是會放掉車把,抱住旁邊的足球門柱的不知各位剛學自行車時,是否也是如此?

當系統(tǒng)2學習掌握了重復使用的套路后,大腦會將重復工作轉給系統(tǒng)1。

我高中時,經(jīng)常因為簡單的數(shù)學加減乘除四則混合運算錯誤,導致考試得不到高分。我訓練自己做了大量專項練習,后來不僅計算過程不出錯,而且感覺當時是把簡單的四則運算從“系統(tǒng)2”挪到“系統(tǒng)1”了??荚嚂r,手上做著乘法豎式,腦子里考慮是否有更好的解題思路。

從另一個角度看,大腦的重復套路工作從“系統(tǒng)2”轉給“系統(tǒng)1”,還有一個更大的好處 —— 降低能力消耗。

系統(tǒng)1反應很快,對能量的消耗遠低于系統(tǒng)2。我查了《人類簡史》、《文明是副產(chǎn)品》等書籍,看到這樣的資料:晚期智人的大腦占體重的1/20,但耗能、耗氧量卻達到全身的1/5。在工業(yè)革命前的5萬年里,智人供養(yǎng)這樣一個大腦是極其不容易的,所以我推斷:

  • 第一,大腦不會有大比例未開發(fā)區(qū)域,因為咱們的大腦結構在5萬年前成熟時(今天人的腦容量與5萬年前差別不大),人體根本沒有多余的營養(yǎng)可以供它浪費。
  • 第二,從機制上,大腦會盡量把一些套路工作從系統(tǒng)2轉給系統(tǒng)1,以期降低腦力消耗。

系統(tǒng)1畢竟簡化了判斷過程,是否會造成很多誤判呢?我相信是的,但因為能量的限制,人類當時應該是找到了中間最優(yōu)解。

我認為:《思考,快與慢》的“系統(tǒng)1”,學習的其實就是前一節(jié)說的“默知識”。

還是以騎自行車為例,咱們可以教新手一些保持自行車平衡的要領,但一個新手學會騎車的過程,是實踐重于理論的。最后形成的知識,就是無法說清的“默知識”,這個默知識保存在我們每個人的“系統(tǒng)1”當中。

當然,系統(tǒng)1與系統(tǒng)2的關系還有很多層次,并對人類社會產(chǎn)生了深遠影響。

例如:遇到緊急情況時(“快撞到行人了”),系統(tǒng)2會從系統(tǒng)1接管人體控制權,多費一點腦力控制好自行車的方向,避免造成交通事故。

畢竟我的讀者都是toB企業(yè)同事,我還是講一個書中與咱們業(yè)務有關的故事。作者丹尼爾·卡尼曼是諾貝爾經(jīng)濟學獎獲得者,21歲時(1955年)曾經(jīng)在以色列軍隊里負責設計士兵面試流程。這之前,面試官完全根據(jù)感覺打分,結果篩選出來的新兵合格率很低??崧隽艘惶自O計,聽起來和我在《SaaS創(chuàng)業(yè)路線圖(六):如何擴張團隊?》中的做法類似,就是要求面試官嚴格按框架打分。

思考方式的革命(一)復雜問題該用理性決策還是感性決策?

思考方式的革命(一)復雜問題該用理性決策還是感性決策?

(上圖為我系列文章(六)中提供的打分表)

卡尼曼不是他的面試官們的上級,面試官們不喜歡做“打分機器人”??崧淖尣绞?,同意面試官根據(jù)標準格式打分后,最后“閉上眼睛給士兵打個總分”。

最后的結果是,新的測評方法大幅提高了有效率。45年后卡尼曼回到該部隊,發(fā)現(xiàn)他的面試方法還在延用。

而我的面試表最后也有這樣一行:“自己是否愿意帶領此人去完成一個困難的任務?”其實這是一個非常感性的問題,與表格其它部分(記錄工作年限、記錄回答情況等)非常不同。

我觀察,這就是在很多領域中,決策復雜問題的一個優(yōu)選方法:

  1. 把抽象問題具象化:先用理性框架(“明知識”)、從多個角度用數(shù)字化的方法分項打分;
  2. 再把具象問題抽象化:從內(nèi)心出發(fā),我是否要用這個人?(使用了“默知識”:更感性,但往往更準確)

這個過程的好處是:

  1. 過程可操作性好,讓決策者全面思考,不會漏項;
  2. 利用決策者的抽象判斷能力(“默知識”),更高緯度地做出判斷,不會因為打分表的設計缺陷造成決策錯誤。

我們企業(yè)決策中,如果死板地使用調查前設計的“打分表”,往往會錯過發(fā)展機會。因為環(huán)境在劇烈變化,調查前很難做出完美的打分表。而“默知識”會讓我們熟悉業(yè)務的決策者更準確地做出判斷。

三、內(nèi)隱學習和外顯學習

上面說了很多“默知識”的例子,具體怎么學習和使用“默知識”呢?最近“得到APP”的精英日課正好也推出了一篇文章“內(nèi)隱學習和外顯學習”。

簡而言之,外顯學習就是學習“明知識”的過程,掌握歷史知識、化學公式……

內(nèi)隱學習,則是學習“默知識”的過程,學到的是個“感”。例如:英語的語感。

1993年高考時,記得我的英語成績大約是140分(滿分150)。因為不考口語,這全都是英語語法和單詞,大多是“明知識”。

但我工作后能在外企說流利的英文,全有賴于大學時在華中理工(現(xiàn)在的華中科技大學)有一個教“外貿(mào)英語”的廖老師。他逼著我們每人整篇整篇地背誦外貿(mào)英語,上課經(jīng)?,F(xiàn)場考對話,當時那個厭惡哪……沒想到堅持了一個學期,死記硬背了幾百句常用對話后,英語“語感”就形成了。大腦中可以用英文思考問題,我是一生受用。

“精英日課”引用的一個調查研究還有個有趣的結論:外顯學習明知識,注意力越集中越好;但集中注意力反而會妨礙內(nèi)隱學習。

為什么?因為“默知識”是沒有明確規(guī)則的,越努力找規(guī)律越學不會,不如放松一些,讓頭腦直接沉浸在直觀信息中,這樣更容易領悟那個“感”。

在企業(yè)經(jīng)營中,我們經(jīng)常需要新的創(chuàng)意:如何設計一個擺脫俗套的新激勵方式?如何做營銷上的創(chuàng)新?如何設計一個全新的內(nèi)容?這時候,讓注意力分散些,看看不相關的書籍、討論一些別的話題,可能靈感會來的更快。

就像我寫這篇文章,目的與路線圖系列是一樣的,還是想幫助大家提升經(jīng)營管理能力。但如果不引入更多關于思考方式、關于人類發(fā)展史的文章,就會跳不出日常操作的層面,不能給大家?guī)硇碌目諝狻?

四、小結

這篇文字是“思考方式革命”的第一篇。我講的不是明知識、也不是默知識,我講的是一些新的思考方法。

(1)如何通過增添新的維度,讓你對研究對象(無論是客戶群、團隊或產(chǎn)品服務)增加新的評估方式?操作工具就是最前面的四象限圖。

(2)設計新體系時,用詞要精準。王維嘉博士用一個“暗”字,一個“默”字,把體系講的很清楚。“名不正言不順”,這是我經(jīng)常說的道理。一個事兒的“名字”選錯了,要費很多口舌解釋,到頭來沒聽到解釋的人看了還是會誤解。

(3)計算機AI算法是基于人類的“神經(jīng)網(wǎng)絡”模型的。企業(yè)管理中,一個體系的設計、一個測算模型的建立,都要基于“自然”的業(yè)務規(guī)則,基于人性的需求進行考量。我不是講抽象的“道”,我說的是可以操作的規(guī)則。

(4)例如:人的大腦將重復套路工作交給系統(tǒng)1,就是符合降低消耗的規(guī)則的。而“能量的限制”就是工業(yè)革命前的20萬年里控制人類發(fā)展的主要因素。

(5)我們做企業(yè),也是同樣有很多限制,財務上有利潤要求、有任何時點現(xiàn)金流不得低于安全線的要求。這屬于“明知識”。

(6)在不能用“明知識”直接通過計算做出決策的復雜情況下,基于“感覺”的判斷實際上更準確。所以專業(yè)知識重要,但業(yè)務背景更重要。

(7)但如果只靠“感覺”決策,也很危險。文中舉了一個新兵打分的例子。最佳方法是:讓決策者先結構化地全面多維度打分,然后再“感性”地做出最終判斷。

(8)注意力分散些,有利于創(chuàng)新。所以需要新點子時,要給團隊成員新環(huán)境、新場景和一些新時間。

(9)默知識這么重要,如何得到?要反復練習,不專注(忘掉規(guī)則)地學習。

品牌年輕化=品牌年輕人化?

濤濤

當下消費市場,年輕人是絕對的主力人群。對于品牌來講,抓住年輕人就是抓住了市場,于是品牌們紛紛開始“年輕化”。但是在這條路上,一不小心,可能就會陷入“坑”中。本文筆者對品牌年輕化進行分析解讀,總結了自己的看法,供大家學習參考。

互聯(lián)網(wǎng)打破了渠道與媒介的壁壘,加速了整個社會消費觀念、品味、需求的變遷。無論是消費觀念還是購買能力,顯然當下的年輕人是絕對的主力人群。

對于品牌而言,就好像牧羊一般,草在哪兒,羊群就在哪兒,不追草的羊不是已經(jīng)餓死,就是在餓死的路上。

于是品牌年輕化好似成為了一切品牌問題的解藥,不幸的是,這些品牌在年輕化的道路,都走到了相似的逼仄中,年輕化僅僅達到了“形”的貼近,卻夭折在了“神”的部分。

那品牌年輕化到底該如何做呢?

木蘭姐認為,在回答這個問題之前,我們需要先弄清楚一點:

品牌年輕化≠品牌年輕人化

與人一樣,品牌也有自己的生命周期,會經(jīng)歷誕生-成長-成熟-老化的過程。但與人不同的是,品牌生命周期并不單純以年齡來劃分,而是與市場環(huán)境、經(jīng)濟環(huán)境、消費者行為綁定在一起。

但很多品牌往往容易陷進一個誤區(qū):認為品牌年輕化就是年輕人化,于是先給年輕人貼幾個標簽,然后再把這些標簽貼在自己身上,試圖收獲年輕人的認同,混進他們的圈子,用看似時尚、熱門、流行的元素將自己打扮成“年輕人”,但往往最后結果卻是不被年輕人買單的無效溝通。

舉個例子:

KFC前段時間的形象風波就是大型的翻車現(xiàn)場,讓消費者者覺得品牌對“年輕”有誤解。

KFC為了更貼合年輕消費者對顏值的要求,完全翻轉了大家對爺爺慈祥微胖的印象,以更時尚的高顏值形象走入消費者眼簾。

但這個形象橫空出現(xiàn),只給消費者帶來了短暫的視覺沖擊,并沒有讓其產(chǎn)生情感上的認同,甚至是嚇到了部分消費者,很多人直呼不買賬。

△圖片截取自網(wǎng)絡

所幸這只是KFC品牌年輕化的一次嘗試,并沒有真正投入市場,也沒有給品牌帶來太多的影響。

從KFC的案例中我們可以得到什么樣的警醒呢:或許品牌用表面的裝嫩的方式能夠獲得一時關注,但混入年輕人的圈子,走進他們的內(nèi)心卻有些難度。

就像1000個讀者就有1000個哈姆雷特一樣,1000個消費者可能會有1000種需求或喜好,品牌無法對這個群體“一刀切”,也沒有一個品牌能做到被所有年輕人追捧。

要知道,這一代年輕人并不是很多品牌自以為所謂的 “狂拽炸酷吊炸天”這么簡單,品牌需要做的是真正洞察年輕人的生活態(tài)度,先在價值觀上找到和年輕人真正的契合點,強調 “我”,而不是追隨 “他”。

那正解如何呢?

一、為品牌灌注新鮮活力

就像物理學中的杠桿支點一樣,支點找得準不準,直接影響其他要素的確定。對企業(yè)而言,突破品牌桎梏,精準地找到品牌年輕化的支點,才是贏得消費群體的王道。

而這個“品牌年輕化”的支點,木蘭姐認為應該是為品牌灌注新鮮活力,延長或恢復品牌的“青春期”,讓品牌可以一直活躍在時代主力消費人群的面前,不至于被消費者和市場遺忘。

無疑,旺旺是其中的佼佼者者。

旺旺在年輕化的道路上摸索出了一條康莊大道,除了主打情懷回憶殺,還不斷嘗試將品牌時尚化,以此來滿足年輕人的潮流需求,比如六一攜手奈雪的茶推出寶藏奶茶;與自然堂聯(lián)合,打造自然堂x旺旺定制款氣墊BB霜組合裝,以及聯(lián)名款服裝等,一系列令人意外又驚喜的跨界合作,無疑賺足了眼球。

這一波國民經(jīng)典IP與原創(chuàng)潮牌的跨界合作,不僅意味著旺旺已經(jīng)洞察到現(xiàn)如今年輕一代的喜好,更代表了旺旺作為一個國民老品牌,有著高度的包容性,在打破以往成就、固化的品牌形象后,以有活力、年輕化、時尚潮流的品牌范兒,不斷刷新品牌的高曝光度,以及年輕人對品牌的認可度。

可以說,旺旺在嘗試年輕化營銷的同時,也能看到其要做年輕化內(nèi)容、年輕化產(chǎn)品、年輕化品牌的決心。

還有我們的國民老品牌百雀羚,不管是提到廣告,還是產(chǎn)品,百雀羚都是美妝界永遠繞不開的話題,而百雀羚能在消費者心中留下如此重要的認知,都離不開其一直以來的努力和創(chuàng)新。

從三生花系列到現(xiàn)如今的故宮美什件,從《一九三一》到今天的《見微知著》、《多了一點》,通過消費者喜歡的方式,為品牌注入新鮮的血液,讓經(jīng)典老品牌顯得“年輕力”十足,成功激活了消費群體,并在品牌年輕化的形象和銷售轉化量上都實現(xiàn)了質的突破。

可見,只有為品牌注入與時代相符的新內(nèi)涵,才能積極契合消費族群的變遷,才是品牌永葆年輕的護城河。

二、傳遞年起人認同的品牌價值觀

提到這一點之前,我們先來看一個2018年最佳汽車營銷廣告案例,來自奧迪。

在這支廣告里,奧迪沒有流于表面的年輕元素,而是全程展現(xiàn)了一位滑雪飛人,觀眾跟著他腳下的雙板劃過幾乎地球上所有的地貌:山地,森林,沙漠,草原,火山,長城,海洋…

而整個片子中,奧迪車全程沒有入境,只在影片結尾,藍色海洋的背景里出現(xiàn)奧迪的廣告語:“All Conditions Are Perfect Conditions.(所有場景,都是完美場景)”。

但就是這支充滿“挑戰(zhàn)、無畏、前進等精神”的廣告大片最后贏得戛納社會化營銷金獎,引起熱議,深受年輕觀眾的喜愛。

這說明了什么?品牌年輕化,不應拘泥于品牌面貌的年輕,更多的是品牌內(nèi)核的年輕。

再舉個極端的案例:

年過123歲的銳步(Reebok)簽下80歲“高齡青年”王順德為品牌代言人。這個加在一起超過200歲的“超高齡組合”,如果純粹按年紀來說,絕對稱不上“年輕”,而如果單從代言人王順德的外形上硬要找一點年輕元素的話,可能也就能是那一頭狂野白發(fā)中的“狂野”了。

為什么會選中王順德?銳步看中了王順德身上年輕的態(tài)度——堅持、自信、突破極限,向消費者傳遞出“任何年紀,都可以活出自己的樣子,突破極限,打破年齡的疆界”的心態(tài)。

而這跟當代年輕人釋放個性,崇尚平等,追求自由,積極進取,享受生活,不喜歡權威,不喜歡說教的價值觀是一致的,銳步升華了代言人背后的品牌精神。

所以木蘭姐認為,如果你正在為品牌年輕化發(fā)愁,不妨從品牌的核心精神和態(tài)度入手,形成年輕的品牌價值觀,去發(fā)現(xiàn)目標消費群的價值需求,找到一個能在你們之間產(chǎn)生共鳴的態(tài)度,讓他們對品牌產(chǎn)生認同。

三、幫用戶發(fā)聲彰顯自我

此外,90后及00后的自我意識是全面覺醒的,與以往的群體不同,他們天生具有強烈的表達欲及掌控欲,這也進一步催化品牌要用“陪伴心態(tài)”去與年輕人相處,真正懂他們,幫他們發(fā)聲,彰顯自我……最終成為他們心里“陪在他們身邊的人”。

比如說江小白的文案,其實不少是用戶自己寫的文案,然后通過篩選量產(chǎn)出來。再比如有時間火爆的《我的說明書》H5、DIY類H5,引發(fā)了同類H5作品的爆發(fā),背后都是用戶的自我價值表達。

還有今年五四青年節(jié)百度APP通過創(chuàng)意互動手繪形式,站在年輕人的角度,說出了他們的心聲,彰顯年輕人的才華和態(tài)度,也是狠狠地刷了一波存在感。

我們從不拒絕新事物

青年人,就要站在時代與潮流的風口浪尖

甭管哪年,在愛國這個原則性問題上

我們的脾氣還是有點大

在國家最需要我們的時候

青年人逆風而行,救民于水火之中

這就像安裝了八個情感按鍵,撬動用戶心中的共鳴開關,最終完成內(nèi)容與用戶的深度溝通,讓用戶認同品牌價值;更重要的是設計出文案,讓用戶表達自我,從而在用戶群中分享傳播品牌價值。

由此可見,年輕化不是品牌的一廂情愿,而是品牌和消費者的合謀:“看見世界,找到自己”。

結語

最后,木蘭姐想說,年輕化的“套路”不可能一成不變,無須刻意貼合年輕人時下的熱點,抓住深的洞察獲得年輕人共鳴,才是品牌年輕化的最好方式。

文章來源:人人都是產(chǎn)品經(jīng)理

區(qū)分「取消」與「關閉」的設計差異

濤濤

區(qū)分取消與關閉,可以很大程度上避免丟失用戶已操作的內(nèi)容。在關閉視圖之前保存用戶的更改,使用文本標簽而不是「X」圖標,并在破壞性操作之前提供確認對話框。

讓人迷惑的「X」圖標

很久以前,「X」這個符號是用在地圖上,標記「寶藏的藏身地」。但在今天的數(shù)字化界面中,「X」符號不再用來標記位置,而是被用來取消進程,或者關閉某個臨時頁面/彈框。但是如何確定「X」代表的是「取消」 還是「關閉」?有的時候可以確定,有時卻模糊不清難以界定。

其實,主要的問題在于「X」圖標缺少了文本標簽。當同一個圖標在不同的界面,卻代表不同的含義,該圖標的可用性就會受到影響,因為用戶判斷不了到底是什么含義。

為什么要區(qū)分「取消」與「關閉」

當用戶單擊/點擊「X」按鈕來關閉模態(tài)彈框或視圖時,系統(tǒng)會完全取消該過程并清空之前所有操作,這讓人沮喪,甚至抓狂。因為用戶通常認為「X」圖標表示取消或者關閉,所以區(qū)分這兩種可能性對于交互的成功至關重要。

在某些情況下,區(qū)分取消 or 關閉并不重要。當一個彈窗占據(jù)你的大部分屏幕時,點擊「X」按鈕(盡可能快地),既可以關閉該模態(tài),也可以取消它可能觸發(fā)的任何進程。

但是,如果頁面中包含正在運行的計時器,正在播放的音頻,正在選擇多個選項標簽,或其他類型未保存的內(nèi)容,那就很有必要說明「X」圖標所代表的意義。因為用戶可能打算讓計時器或音頻繼續(xù)運行,或者希望立刻應用這些選好的選項標簽,或保存正在進行的工作,同時希望關閉該視圖繼續(xù)其他操作。

例如:絲芙蘭在結賬過程中,使用模態(tài)窗口來展示用戶可以添加到購物車的免費商品。在以下示例中,單擊「 ADD(添加)」按鈕選擇商品后, 該按鈕直接被變成了「 Remove(移除)」,看起來似乎商品已經(jīng)被添加到購物車中了。但是,實際上當用戶單擊右上角的「X」圖標后,該商品并不在購物車中。他需要再重復這個步驟,最后點擊「Done(完成)」按鈕,商品才會被加入購物車。

Sephora:單擊右上角的「X」會取消選擇這些試用商品整個過程。用戶必須先單擊「ADD」,再單擊「Done」才能將商品添加到購物車。

如何避免丟失用戶正在操作的內(nèi)容

要避免丟失用戶正在操作的內(nèi)容,首先需要確定用戶的意圖,是取消還是關閉,并提供明確的選項。有以下幾種方法:

  • 主動要求用戶確認他們的意圖;
  • 使用明確的文本標簽而不是模糊圖標;
  • 顯示兩個不同的按鈕:「X」圖標表示關閉視圖(可以自動保存頁面內(nèi)容/操作),而「取消」則代表放棄該過程。

1. 要求確認

如果用戶在已經(jīng)執(zhí)行操作的模態(tài)彈框或頁面視圖中,點擊「X」圖標,app 則可以在關閉視圖之前,直接詢問用戶是否應用該操作,來確認其意圖。此解決方案非常適合會破壞用戶工作的破壞性取消操作。例如,過濾器視圖可能會被意外關閉,并且關閉會導致用戶丟失其選定的選項。

這個問題在移動端界面上很常見,因為過濾器視圖占用了很大的屏幕空間,這使用戶很難或不能判斷是否已經(jīng)應用了那些選擇。為了防止這種潛在的錯誤,在關閉過濾器視圖之前,跟用戶確認是否要應用這些選擇并關閉視圖,抑或是清除這些選擇。例如:下圖中,當用戶選擇后,點擊「X」圖標時,Lowes 會出現(xiàn)如下確認彈框。

左 :點擊「X」圖標或返回箭頭,所有的選項都會被取消,并將用戶帶回上一個頁面。右:點擊「X」后,出現(xiàn)一個確認對話框,確認用戶是應用還是取消篩選,然后再返回結果列表頁。

同樣,當用戶關閉正在進行的課程時,語言學習應用Duolingo 會顯示一個確認對話框,課程進行中不能中途離開,除非確認「退出」。至少,該 APP 向用戶傳達了這一限制,同時他們也可以選擇「取消」來繼續(xù)課程。點擊「X」按鈕將結束當前課程。為了防止出錯,結束前會出現(xiàn)一個確認對話框。

缺點:

  • 雖然確認對話框在避免「X」圖標有歧義方面很有效,但它卻添加了額外的步驟;
  • 用戶在按下「X」圖標之前還是不知道它到底做了什么,代表什么意思,因此他們可能會對這個操作感到疑惑。

2. 使用文本標簽

不要完全依賴對話框來讓用戶確認模糊的「X」圖標,而是使用明確的文本標簽。文本可以消除歧義,并清楚地傳達將發(fā)生的操作:取消與關閉。

Yelp 的篩選頁面在屏幕頂部提供了標有「Cancel(取消)」和「Reset(重制)」的按鈕,在底部提供了一個大大的「Apply(應用)」按鈕。類似地,Etsy 中的 Filters 視圖提供了「Clear(清除)」和「Done(完成)」兩個按鈕。

注意:Etsy 使用「Done」而不是「Apply」,因為過濾器一經(jīng)選擇就可以被應用,而這里是關于開關切換與否的建議。

(左)Yelp:Cancel、Reset 和 Apply 這三個文本標簽既直接又清晰,這樣用戶就不太可能不小心關閉視圖而丟失他們過濾器中的選擇。(右)Etsy:Clear 為用戶取消提供了一種清晰的方式,而點擊 Done 則返回到「產(chǎn)品列表」頁,其中的選擇已經(jīng)應用。

3. 關閉并保存

如果必須使用「X」圖標而不是文本標簽(比如為了以節(jié)省空間,或者正在遵循團隊的設計語言),請謹慎使用,并在用戶完成前保存操作/內(nèi)容。另外,可以提供一個單獨的「取消」按鈕,讓用戶在進程之外有一個緊急出口,并消除「X」在兩種含義之間的歧義。

例如:Gmail 會自動保存在非模態(tài)窗口中填寫的郵件信息到草稿(Drafts)。這樣的好處是,用戶在需要折疊或關閉該窗口時,仍然保存原來的內(nèi)容以便于下次繼續(xù)編輯。將鼠標懸停在消息窗口右上角的「X」圖標上時,會顯示一段提示:Save & Close(保存到草稿并關閉)。此外,點擊窗口右下角的「垃圾桶」圖標可以刪除該郵件,這個圖標離頂部的「保存和關閉」選項很遠,可以防止用戶誤點。

Gmail:Hover 透露,「X」圖標是用于關閉窗口而不是刪除草稿,它允許用戶保存并關閉消息窗口而不會丟失剛剛正在編輯的郵件。

對于長進程或傾向于在后臺運行的進程(如計時器),默認自動保存也是一種很好的解決方案。

例如,Glow Baby 中,后臺運行喂食或睡眠計時器時,用戶還可以瀏覽 APP 的其他區(qū)域。因為這些計時器一般會運行很長一段時間。此功能還能讓用戶在 APP 中做其他的任務操作,例如記錄之前換尿布的時間、瀏覽文章、逛論壇等。點擊計時器視圖中的「X」圖標也只是關閉窗口并不會取消正在運行的計時器。

Glow Baby:(左)點擊運行計時器視圖中的「X」圖標,在不停止計時器的情況下取消視圖,從而允許用戶繼續(xù)使用 APP 記錄其他類型的事件、參與社區(qū)討論、閱讀文章等。(中)運行計時器的狀態(tài)顯示在屏幕頂部的狀態(tài)欄中。(右)在計時器暫停時點擊「X」圖標,彈出「放棄」或「取消」按鈕以確認用戶的真正意圖。

請注意:在關閉前保存中間工作或維護正在進行的過程是主動的,但有時可能會與用戶的意圖相反。如果用戶打算通過單擊「X」按鈕取消其選擇,那自動應用這些選擇可能會令人困惑和沮喪。

這就是為什么還必須有一個單獨的「取消」按鈕,給用戶一個出口,而不是強迫他們必須關閉時自動保存。

結論

雖然「X」圖標會造成模棱兩可,而且經(jīng)常導致可用性問題,但它不太可能馬上從所有接口中消失。設計人員應該注意「X」圖標的多重含義,消除「關閉」和「取消」之間的歧義,并提供確認對話框或自動保存等保護性措施,避免丟失任何用戶正在操作的內(nèi)容。

若存在疑問,請記?。合缺4?,再退出。

小思考

為什么手機驗證碼登錄微信/淘寶時,驗證碼輸入錯誤,二者都是用的模態(tài)對話框提示用戶,而不是用 Toast 呢?

  • 微信和淘寶的用戶群體都很龐大,幾乎橫跨所有年齡層。Toast 出現(xiàn)又自動消失的交互體驗,用戶會感到不可控,尤其是對大齡、老齡的用戶不夠友好。
  • 也有悖于 iOS 人機交互指南中提到的「用戶控制」這一原則,我想這也是 iOS 設計語言沒有 Toast 這種控件的原因之一吧。
  • 而模態(tài)對話框雖然干擾性較強,但用戶可以隨時控制,在使用過程中是用戶掌握主導權。

補充:Toast 這一控件,原是 Android 系統(tǒng)的控件。但自 Android 5.0 推出原質化設計后,Toast 就被弱化,而是將 Snackbar 作為官方推薦的控件。如今在 Material Design 中更是找不到 Toast 的蹤影。主要原因還是 Snackbar 在交互友好性方面比 Toast 要好,例如:支持手勢交互、支持與 CoordinatorLayout 聯(lián)動等。

日歷

鏈接

個人資料

藍藍設計的小編 http://m.wnxcall.com

存檔