如何修改URL而不刷新页面

MDN文档

https://developer.mozilla.org/zh-CN/docs/Web/API/History_API

概述

在使用ajax进行网页的部分更新时,URL同时变化能让页面更加好看,并且显示为类似与直接加载页面的效果。

在HTML中使用window对象的history属性能实现对页面历史的操作,包括前进、后退、跳转,在HTML5中提供了对history栈的操作。

window.history相关操作

// HTML
window.history.back() // 后退历史
window.history.forward() // 前进历史
window.history.go(1) // 跳转到history栈中当前页面的相对位置为指定值的页面

// HTML5
window.history.pushState(Obj, title, url) // 向history栈中写入新状态
window.history.replaceState(obj, title, url) // 替换当前页面状态
  • obj 状态对象,用于存储页面历史状态的数据,比如可以用于存放访问后端时需要调用的参数或者api地址,然后重写popstate方法来在浏览器历史操作时访问state中指定的资源
  • title 标题,暂时没用,建议使用空字符串避免api变更时受影响
  • url 历史的url,可选参数,默认为当前页面地址。会显示在地址栏,我们使用它就可以进行页面地址的变更

朴素贝叶斯分类算法

资料来源:CSDN

前置知识

贝叶斯公式

贝叶斯公式是我们在概率论中学到的一个应用非常广泛的公式,常用来计算后验概率 $$ P(A|B) = \frac{P(B|A)P(A)}{P(B)} $$

分类问题

定义:已知集合$C= y_1, y_2, … y_n$ 和 $I = x_1, x_2, … x_n$,确定一个映射$y = f(x)$,使得 $\forall x_i \in I$ 有且只有一个 $y_i \in C$ ,使得 $y_i = f(x_i)$。

其中 $C$ 叫做类别集合,其中每一个元素都是一个类别,而 $I$ 叫做项集合(特征集合),其中每个元素都是一个待分类项。$f$ 叫做分类器。

朴素贝叶斯分类

朴素贝叶斯分类的核心算法就是贝叶斯公式,在此处我们可以使用更加精确的描述来代替贝叶斯公式中的事件代称: $$ P(类别|特征) = \frac{P(特征|类别)P(类别)}{P(特征)} $$ 朴素贝叶斯分类算法的任务就是要求出 $P(类别|特征)$,然后我们再根据概率去判断类型。

算法名称中的朴素二字意为在算法中将特征的各个子特征看作相互独立,从而使得其可以拆分成子概率的连乘: $$ P(X|Y) = P(x_1|Y)P(x_2|Y)…P(x_n|Y) = \prod_{i=1}^{n} P(x_i|Y) $$ 计算时将特征拆分成子特征的成绩,能够方便地进行求解。

音律2科学

五度相生法

由古希腊数学家毕达哥拉斯提出

三分损益法

古中国乐师管仲提出

十二平均律

最早由明朝朱载堉提出,经巴赫广泛传播

驻波

基频

泛音

波长

$$ \lambda = \frac{2L}{n} \\ L \text{长度} \\ n \text{一个整数,基波为1} \\ $$

波速

$$ v = \sqrt{\frac{T}{\rho}} \\ T \text{为张力} \\ \rho \text{为线密度} \\ v = \lambda f $$

频率

$$ f = \frac{v}{\lambda} = \frac{1}{2L}\sqrt{\frac{T}{\rho}} $$

序列化与redis

序列化可以将数据结构转化成字符串格式,而Redis是key-value类型的数据库,因此将数据结构进行序列化之后就将其转化成了单值,可以方便地存储到Redis中,避免使用复杂的hash表来存储数据,特别是日志、流水一类的数据,使用Redis作为缓存,可以极大地提高应用的性能。

php 序列化

<?php
$value = [
  'a' => 1,
  'b' => 2
];
$encode = serialize($value);
echo $encode;
print_r(unserialize($encode));

输出

a:2:{s:1:"a";i:1;s:1:"b";i:2;}
Array
(
    [a] => 1
    [b] => 2
)

使用shell进行文件批量更名

使用shell命令来对文件名进行批量的替换是一个很有用的功能,最近主要是需要将笔记名称批量进行部分替换,所以使用shell来进行实现

代码如下:

chGo() {
    currentDir=$(pwd)
    cd $currentDir/$1
    echo -e "\033[32mprocessing path: \033[34;40m$currentDir/$1\033[0m"
    for i in ./*
    do
        if test -d $i
        then
            if [ -n $(echo $i | awk -F' ' '/go(lang)?([\w.]*)?/{print}') ]
            then
                newDir=$(echo $i | sed -e '1s/golang/Go/g' -e '1s/go/Go/g')
                if [ -d $newDir ]
                then
                    echo -e "\033[33mDirectory $newDir is already existed\033[0m"
                else
                    mkdir $newDir
                    if [ $? -eq 0 ]
                    then
                        echo -e "\033[32mcreate dir $newDir\033[0m"
                    fi
                fi
            fi
            chGo $i
        elif test -f $i
        then
            if [ -n $(echo $i | awk -F' ' '/go(lang)?([\w.]*)?\.md/{print}') ]
            then
                newName=$(echo $i | sed -e '1s/golang/Go/g' -e '1s/go/Go/g')
                mv $i $newName 
                if [ $? -eq 0 ]
                then
                    echo -e "\033[32mmv $i -> $newName\033[0m"
                fi
            else
                echo pass' '$i
            fi
        fi
    done
    cd $currentDir/
}

rootDir=$(pwd)
chGo $1 
cd $curentDir

其中用到了递归来遍历子文件夹,使用了不同颜色的输出来打印处理结果 在使用中会不断切换工作目录来避免文件路径中出现的文件名干扰正则的匹配

现有问题

会对根目录中的不匹配文件也进行移动

Go Module 模块

内容摘自 https://colobu.com/2018/08/27/learn-go-module/

在Go1.11中新加入了一个特性:模块(module)

使用的基本命令为go mod

使用go module 能让你摆脱golang原有的包管理,将项目放在任意的路径,使用module来添加依赖的模块

使用

使用go module的首要步骤就是加入环境变量GO111MODULE=true

创建一个新的项目

使用命令

go mod init pkgname

可以创建一个空的go.mod,然后你可以在其中增加依赖比如

require github.com/smallnest/rpcx latest

或者由go自动发现和维护

管理项目

对于已经创建了go.mod的项目, 可以通过go get ./..让他查找依赖。

通过go mod tidy可以为go.mod调整依赖

go mod 命令

命令 含义
download download modules to local cache (下载依赖的module到本地cache))
edit edit go.mod from tools or scripts (编辑go.mod文件)
graph print module requirement graph (打印模块依赖图))
init initialize new module in current directory (再当前文件夹下初始化一个新的module, 创建go.mod文件))
tidy add missing and remove unused modules (增加丢失的module,去掉未用的module)
vendor make vendored copy of dependencies (将依赖复制到vendor下)
verify verify dependencies have expected content (校验依赖)
why explain why packages or modules are needed (解释为什么需要依赖)

翻墙

防止国内访问不到golang.org/x的各个包,在go.mod中写入replace语句将其替换成github上的相应库。

replace (
	golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac => github.com/golang/crypto v0.0.0-20180820150726-614d502a4dac
	golang.org/x/net v0.0.0-20180821023952-922f4815f713 => github.com/golang/net v0.0.0-20180826012351-8a410e7b638d
	golang.org/x/text v0.3.0 => github.com/golang/text v0.3.0
)