mirror of
https://github.com/zhwei820/learn.lianglianglee.com.git
synced 2025-09-17 08:46:40 +08:00
759 lines
21 KiB
HTML
759 lines
21 KiB
HTML
<!DOCTYPE html>
|
||
|
||
<!-- saved from url=(0046)https://kaiiiz.github.io/hexo-theme-book-demo/ -->
|
||
|
||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||
|
||
<head>
|
||
|
||
<head>
|
||
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
|
||
|
||
<link rel="icon" href="/static/favicon.png">
|
||
|
||
<title>24 结束语 数学底子好,学啥都快.md.html</title>
|
||
|
||
<!-- Spectre.css framework -->
|
||
|
||
<link rel="stylesheet" href="/static/index.css">
|
||
|
||
<!-- theme css & js -->
|
||
|
||
<meta name="generator" content="Hexo 4.2.0">
|
||
|
||
</head>
|
||
|
||
|
||
|
||
<body>
|
||
|
||
|
||
|
||
<div class="book-container">
|
||
|
||
<div class="book-sidebar">
|
||
|
||
<div class="book-brand">
|
||
|
||
<a href="/">
|
||
|
||
<img src="/static/favicon.png">
|
||
|
||
<span>技术文章摘抄</span>
|
||
|
||
</a>
|
||
|
||
</div>
|
||
|
||
<div class="book-menu uncollapsible">
|
||
|
||
<ul class="uncollapsible">
|
||
|
||
<li><a href="/" class="current-tab">首页</a></li>
|
||
|
||
</ul>
|
||
|
||
|
||
|
||
<ul class="uncollapsible">
|
||
|
||
<li><a href="../">上一级</a></li>
|
||
|
||
</ul>
|
||
|
||
|
||
|
||
<ul class="uncollapsible">
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/00 开篇词 数学,编程能力的营养根基.md.html">00 开篇词 数学,编程能力的营养根基.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/01 从计数开始,程序员必知必会的数制转换法.md.html">01 从计数开始,程序员必知必会的数制转换法.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/02 逻辑与沟通,怎样才能讲出有逻辑的话?.md.html">02 逻辑与沟通,怎样才能讲出有逻辑的话?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/03 用数学决策,如何规划好投入、转化和产出?.md.html">03 用数学决策,如何规划好投入、转化和产出?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/04 万物可数学,经典公式是如何在生活中应用的?.md.html">04 万物可数学,经典公式是如何在生活中应用的?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/05 求极值:如何找到复杂业务的最优解?.md.html">05 求极值:如何找到复杂业务的最优解?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/06 向量及其导数:计算机如何完成对海量高维度数据计算?.md.html">06 向量及其导数:计算机如何完成对海量高维度数据计算?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/07 线性回归:如何在离散点中寻找数据规律?.md.html">07 线性回归:如何在离散点中寻找数据规律?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/08 加乘法则:如何计算复杂事件发生的概率?.md.html">08 加乘法则:如何计算复杂事件发生的概率?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/09 似然估计:如何利用 MLE 对参数进行估计?.md.html">09 似然估计:如何利用 MLE 对参数进行估计?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/10 信息熵:事件的不确定性如何计算?.md.html">10 信息熵:事件的不确定性如何计算?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/11 灰度实验:如何设计灰度实验并计算实验的收益?.md.html">11 灰度实验:如何设计灰度实验并计算实验的收益?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/12 统计学方法:如何证明灰度实验效果不是偶然得到的?.md.html">12 统计学方法:如何证明灰度实验效果不是偶然得到的?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/13 复杂度:如何利用数学推导对程序进行优化?.md.html">13 复杂度:如何利用数学推导对程序进行优化?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/14 程序的循环:如何利用数学归纳法进行程序开发?.md.html">14 程序的循环:如何利用数学归纳法进行程序开发?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/15 递归:如何计算汉诺塔问题的移动步数?.md.html">15 递归:如何计算汉诺塔问题的移动步数?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/16 二分法:如何利用指数爆炸优化程序?.md.html">16 二分法:如何利用指数爆炸优化程序?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/17 动态规划:如何利用最优子结构解决问题?.md.html">17 动态规划:如何利用最优子结构解决问题?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/18 AI 入门:利用 3 个公式搭建最简 AI 框架.md.html">18 AI 入门:利用 3 个公式搭建最简 AI 框架.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/19 逻辑回归:如何让计算机做出二值化决策?.md.html">19 逻辑回归:如何让计算机做出二值化决策?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/20 决策树:如何对 NP 难复杂问题进行启发式求解?.md.html">20 决策树:如何对 NP 难复杂问题进行启发式求解?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/21 神经网络与深度学习:计算机是如何理解图像、文本和语音的?.md.html">21 神经网络与深度学习:计算机是如何理解图像、文本和语音的?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/22 面试中那些坑了无数人的算法题.md.html">22 面试中那些坑了无数人的算法题.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/23 站在生活的十字路口,如何用数学抉择?.md.html">23 站在生活的十字路口,如何用数学抉择?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
<a class="current-tab" href="/专栏/程序员的数学课/24 结束语 数学底子好,学啥都快.md.html">24 结束语 数学底子好,学啥都快.md.html</a>
|
||
|
||
|
||
|
||
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<div class="sidebar-toggle" onclick="sidebar_toggle()" onmouseover="add_inner()" onmouseleave="remove_inner()">
|
||
|
||
<div class="sidebar-toggle-inner"></div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<script>
|
||
|
||
function add_inner() {
|
||
|
||
let inner = document.querySelector('.sidebar-toggle-inner')
|
||
|
||
inner.classList.add('show')
|
||
|
||
}
|
||
|
||
|
||
|
||
function remove_inner() {
|
||
|
||
let inner = document.querySelector('.sidebar-toggle-inner')
|
||
|
||
inner.classList.remove('show')
|
||
|
||
}
|
||
|
||
|
||
|
||
function sidebar_toggle() {
|
||
|
||
let sidebar_toggle = document.querySelector('.sidebar-toggle')
|
||
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
|
||
let content = document.querySelector('.off-canvas-content')
|
||
|
||
if (sidebar_toggle.classList.contains('extend')) { // show
|
||
|
||
sidebar_toggle.classList.remove('extend')
|
||
|
||
sidebar.classList.remove('hide')
|
||
|
||
content.classList.remove('extend')
|
||
|
||
} else { // hide
|
||
|
||
sidebar_toggle.classList.add('extend')
|
||
|
||
sidebar.classList.add('hide')
|
||
|
||
content.classList.add('extend')
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
function open_sidebar() {
|
||
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
|
||
let overlay = document.querySelector('.off-canvas-overlay')
|
||
|
||
sidebar.classList.add('show')
|
||
|
||
overlay.classList.add('show')
|
||
|
||
}
|
||
|
||
function hide_canvas() {
|
||
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
|
||
let overlay = document.querySelector('.off-canvas-overlay')
|
||
|
||
sidebar.classList.remove('show')
|
||
|
||
overlay.classList.remove('show')
|
||
|
||
}
|
||
|
||
|
||
|
||
</script>
|
||
|
||
|
||
|
||
<div class="off-canvas-content">
|
||
|
||
<div class="columns">
|
||
|
||
<div class="column col-12 col-lg-12">
|
||
|
||
<div class="book-navbar">
|
||
|
||
<!-- For Responsive Layout -->
|
||
|
||
<header class="navbar">
|
||
|
||
<section class="navbar-section">
|
||
|
||
<a onclick="open_sidebar()">
|
||
|
||
<i class="icon icon-menu"></i>
|
||
|
||
</a>
|
||
|
||
</section>
|
||
|
||
</header>
|
||
|
||
</div>
|
||
|
||
<div class="book-content" style="max-width: 960px; margin: 0 auto;
|
||
|
||
overflow-x: auto;
|
||
|
||
overflow-y: hidden;">
|
||
|
||
<div class="book-post">
|
||
|
||
<p id="tip" align="center"></p>
|
||
|
||
<div><h1>24 结束语 数学底子好,学啥都快</h1>
|
||
|
||
<p>学到了最后,不知道你有没有思考过这样的问题:数学究竟意味着什么?</p>
|
||
|
||
<p>在回答这个问题之前,我们先看几个跟数学有关的案例或桥段。</p>
|
||
|
||
<p><strong>美剧《危机边缘》第三季的第三集</strong></p>
|
||
|
||
<p>一个年轻男子在邮筒上放置了一支笔,紧接着发生了一系列的连锁案件。先是笔掉在地上,导致一个老人去弯腰捡拾;接着,骑车而过的路人撞倒了老人,导致一群人围观;最后,围观群众过多,让公交车司机没注意红绿灯变化,导致撞死了一个手捧鲜花的女子。原来,这个年轻男子是个智商极高的人,通过各种精准的计算,对事情有了准确预判,完成了自己的杀人计划。</p>
|
||
|
||
<p><strong>电影《决胜 21 点》</strong></p>
|
||
|
||
<p>几个数学高才生,利用假期时间,在赌城拉斯维加斯,玩他们再熟悉不过的“21点”,最终狂赢三百多万的美金。他们靠记住扑克牌的分布状况推算获胜概率,并调整自己的下注策略,谋求统计上收益期望最大的策略。</p>
|
||
|
||
<p><strong>综艺节目《相声有新人》</strong></p>
|
||
|
||
<p>有一对博士夫妻尝试在相声中加入数学公式元素。他们认为,人类的情感可以被公式化计算,并进一步利用这些公式创作出让人产生情感共鸣的相声。虽然他们的相声并没有让我发笑,但这的确算得上是数学与相声融合的大胆尝试。</p>
|
||
|
||
<p>生活中的我们,总是面临各种各样的选择。</p>
|
||
|
||
<ul>
|
||
|
||
<li>我现在非常饿、要吃饭,是选择去可能会排队很久的网红店,还是选择去吃快速便利的麦当劳?</li>
|
||
|
||
<li>今天有一些阴天,是保守地在书包里背着一把雨伞,还是激进点,不带伞轻装出行?</li>
|
||
|
||
<li>等公交时来了一个不太顺路的车,是选择先上车,还是继续等待着那趟更顺路的车?</li>
|
||
|
||
</ul>
|
||
|
||
<p>面对人生中的选择,你一定要尽可能避免用抛硬币的方式来决策人生。相反,你需要具备做出更合理的决策的能力。</p>
|
||
|
||
<ul>
|
||
|
||
<li>例如,你根据过往数据计算出网红店高峰排队的时间期望是 20 分钟,而麦当劳只需要 3 分钟就能完成汉堡包的出餐,那么去麦当劳吃饭也许是个更好的选择。</li>
|
||
|
||
<li>又如,你根据所在城市的历史天气状况数据计算发现,阴天条件下产生降水的概率 P(降水|阴天) 只有 0.05,那么激进一点,不带伞也许是个更好的选择。</li>
|
||
|
||
<li>再比如,你计算出不太顺路的公交车会让你多花费 10 分钟的出行时间,而“顺路车”平均 3 分钟就会来一趟,那么继续等待更顺路的车也许是个更好的选择。</li>
|
||
|
||
</ul>
|
||
|
||
<p>你有没有发现,利用收集到的数据做一些数学计算之后,往往会让你做出的决策更合理。反过来说,有了数学的武器之后,意味着人生做出的选择会更合理。</p>
|
||
|
||
<h3>解决问题的通用框架——形式化定义和最优化求解</h3>
|
||
|
||
<p>我在专栏的《05 | 求极值:如何找到复杂业务的最优解?》和《07 | 线性回归:如何在离散点中寻找数据规律?》中反复提到过一个解决问题的通用框架,那就是<strong>形式化定义</strong>和<strong>最优化求解</strong>。</p>
|
||
|
||
<p>当你遇到一个问题时,不妨试着用一个带参数的函数,来形式化定义这个问题;接着,通过各种各样求极值的办法,求解这个函数的最优值。</p>
|
||
|
||
<p>通过这两个步骤,你遇到的问题就能迎刃而解。</p>
|
||
|
||
<p>对于这两个步骤而言,第二步<strong>最优化求解</strong>就是求函数极大值/极小值的问题,如果你还会了梯度下降法,你就能找到绝大多数的函数的极值。</p>
|
||
|
||
<p>而问题的关键就是第一步,如何<strong>形式化定义</strong>一个问题。</p>
|
||
|
||
<h4>【形式化定义】</h4>
|
||
|
||
<p>在很多人眼中,事物是不可被计算的。例如,“我无法计算出他人的内心世界”“我无法计算出下一张扑克牌的花色是什么”“我无法在事前计算出足球比赛的结果”。然而,在数学家的眼中,数学家宁愿相信一切都是可以被计算的。也许,根据 TA 与你在微信上互动的频次、TA 每天说话提到你的次数等数据,就能计算出 TA 对你的好感度。</p>
|
||
|
||
<p>也许,可以根据已经翻出来的几张扑克牌的花色分布,就能计算出下一张扑克牌更可能的花色是什么。也许,根据两队历史交锋结果、比赛当时的主客场因素、球队主力伤病情况等因素,就能计算出主队获胜的概率。因此,只要你相信数学,你就能让更多的问题可被形式化定义。</p>
|
||
|
||
<p>学生时代,你一定听过这样的几句话,“学好数理化,走遍全天下”。在我的中学时代中,也有老师说过,“物理和化学的本质是数学”;在成为一名程序员之后,也听说过“一流的程序员靠数学”的说法。</p>
|
||
|
||
<p>那么,为什么这些不同的学科都指向了数学呢?</p>
|
||
|
||
<p>这与解决问题的通用框架有关。理工类的学科,研究的是实际日常生活中的问题。如果你是一个善于运用数学思想的人,那么你一定可以让更多的问题被<strong>形式化定义</strong>出来,再用一个数学的<strong>最优化求解</strong>算法,来找到问题的答案。</p>
|
||
|
||
<p>也就是说,一个实际的日常生活中的问题,会被你用数学的思想来解决。有了这个本事之后,在你的眼中,不论是物理问题、化学问题、通信问题,或者是编程问题,都将会变成数学问题。那么,只要你的数学能力够强、底子够好,你就可能做到学啥都快,干啥都游刃有余。</p>
|
||
|
||
<h3>专栏回顾</h3>
|
||
|
||
<p>这门专栏马上就要和大家说再见了,你还记得我们与大聪明、大迷糊、大漂亮学了哪些趣味数学吗?我们一起回顾一下吧。
|
||
|
||
<img src="assets/CgpVE1_79_yAPs3vAAEKkj94p7M782.png" alt="WechatIMG504.png" /></p>
|
||
|
||
<ul>
|
||
|
||
<li>在公瑾的算账定律中,我们用数学计算“你”与大聪明、大漂亮、大迷糊在麻将桌上的得失。</li>
|
||
|
||
<li>之后,我们又在“双十一剁手算钱”和“万有引力看人缘”的故事中,了解了数学偷藏在生活和万物中的奇妙。</li>
|
||
|
||
<li>再之后,又用转化漏洞分析法点醒了大漂亮,提升成绩的关键;还用数学,教大迷糊如何应对公务员考试中的行测题。最重要的是,让你也明白了做事高效的奥秘;</li>
|
||
|
||
</ul>
|
||
|
||
<p>之后,我们又加深了难度,一路升级打怪。</p>
|
||
|
||
<ul>
|
||
|
||
<li>白话理解“极大似然估计”“线性回归”“数学归纳法”,解决了让你学生时代头疼数年的隐讳、模糊的数学概念。</li>
|
||
|
||
<li>而后,我们又带着概率论滤镜观看足球赛,用信息熵计算出“阿根廷队 vs 葡萄牙队”的结果不确定性。</li>
|
||
|
||
<li>还帮助大迷糊计算灰度实验的收益和可靠性;用动态规划为大聪明找出最优回家路线。</li>
|
||
|
||
<li>寓教于乐,我们还在“汉诺塔游戏”和“多米诺骨牌”中通晓了“递归”和“归纳”的本质;</li>
|
||
|
||
<li>最后,又通过三个数学公式,以小见大,认识了 AI 的最简骨架。</li>
|
||
|
||
</ul>
|
||
|
||
<blockquote>
|
||
|
||
<p>你还记得它们出现在哪些课时吗?同学们,可以根据课时大纲回顾以上内容。</p>
|
||
|
||
</blockquote>
|
||
|
||
<h3>数学底子好,学啥都快</h3>
|
||
|
||
<p>可能你会发现,这门以数学为主题的专栏,总是带着你算,算概率、算得失、算方案、算金钱,甚至算婚恋,仿佛真的可以用数学预测未来,掌握命运。</p>
|
||
|
||
<p>但实际上,生活更像是《阿甘正传》所言,“就像一盒巧克力,你永远不知道下一颗是什么味道”。确实,就算是神算子,也无法用数学算出自己的命运和未来。</p>
|
||
|
||
<p>但即使你不能像大聪明一样,从小聪明到大,但你却可以脚踏实地,深耕自己的专业,创造一个未来:</p>
|
||
|
||
<ul>
|
||
|
||
<li>就像是从小都迷迷糊糊的大迷糊,小时候成绩不好,毕业了也没考上公务员,但却成了一名抢手的程序员,升职加薪;</li>
|
||
|
||
<li>也像是从小超级刻苦的大漂亮,小学时无论如何用功,成绩也不见提升,但长大了却成为优秀的前端工程师,遇到靠谱哥,收获幸福。</li>
|
||
|
||
</ul>
|
||
|
||
<p>学数学只是一个缩影,他们更是在数学中得到了探索和成长,虽然没有用数学预测出未来,却借助数学创造了一个未来。</p>
|
||
|
||
<p>最后,希望数学能够强健你的思维,丰盈你的大脑,让你有一个智慧并勇于拼搏的人生。</p>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div>
|
||
|
||
<div style="float: left">
|
||
|
||
<a href="/专栏/程序员的数学课/23 站在生活的十字路口,如何用数学抉择?.md.html">上一页</a>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<a class="off-canvas-overlay" onclick="hide_canvas()"></a>
|
||
|
||
</div>
|
||
|
||
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"70997bf429973cfa","version":"2021.12.0","r":1,"token":"1f5d475227ce4f0089a7cff1ab17c0f5","si":100}' crossorigin="anonymous"></script>
|
||
|
||
</body>
|
||
|
||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||
|
||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NPSEEVD756"></script>
|
||
|
||
<script>
|
||
|
||
window.dataLayer = window.dataLayer || [];
|
||
|
||
|
||
|
||
function gtag() {
|
||
|
||
dataLayer.push(arguments);
|
||
|
||
}
|
||
|
||
|
||
|
||
gtag('js', new Date());
|
||
|
||
gtag('config', 'G-NPSEEVD756');
|
||
|
||
var path = window.location.pathname
|
||
|
||
var cookie = getCookie("lastPath");
|
||
|
||
console.log(path)
|
||
|
||
if (path.replace("/", "") === "") {
|
||
|
||
if (cookie.replace("/", "") !== "") {
|
||
|
||
console.log(cookie)
|
||
|
||
document.getElementById("tip").innerHTML = "<a href='" + cookie + "'>跳转到上次进度</a>"
|
||
|
||
}
|
||
|
||
} else {
|
||
|
||
setCookie("lastPath", path)
|
||
|
||
}
|
||
|
||
|
||
|
||
function setCookie(cname, cvalue) {
|
||
|
||
var d = new Date();
|
||
|
||
d.setTime(d.getTime() + (180 * 24 * 60 * 60 * 1000));
|
||
|
||
var expires = "expires=" + d.toGMTString();
|
||
|
||
document.cookie = cname + "=" + cvalue + "; " + expires + ";path = /";
|
||
|
||
}
|
||
|
||
|
||
|
||
function getCookie(cname) {
|
||
|
||
var name = cname + "=";
|
||
|
||
var ca = document.cookie.split(';');
|
||
|
||
for (var i = 0; i < ca.length; i++) {
|
||
|
||
var c = ca[i].trim();
|
||
|
||
if (c.indexOf(name) === 0) return c.substring(name.length, c.length);
|
||
|
||
}
|
||
|
||
return "";
|
||
|
||
}
|
||
|
||
|
||
|
||
</script>
|
||
|
||
|
||
|
||
</html>
|
||
|