Fetch 和 Ajax 有什么差别
首先让我们来现清理下概念
Ajax 最正确的概念应该是 异步 JavaScript 和 XML (Asynchronous Javascript And XML) ,是指通过核心对象 XHR (XMLHTTPRequest) 达到一种向服务器提出请求并处理响应而不阻塞用户的技术,为Web交互方向打开了新的大门。再后来,由于很多框架都封装了对应的 Ajax 方法,比如大名鼎鼎的 jQuery 中的 $.ajax(url, func),很多开发者开始直接称呼这类对 XHR (XMLHTTPRequest) 对象进行方法封装的方法为 Ajax 。
而 Fetch 这种新方法提供了一种简单,合理的方式来跨网络异步获取资源。
下面来了解下 Fetch 在使用中和 Ajax 的差别~
一、Promise标准提到 Fetch 和 Ajax 最大的不同,应该是 Fetch 是基于标准 Promise 实现,支持 async/await
试试这个简单的请求
1234567fetch('http://example.com/movies. ...
VPS出事的又一天
今天 vps 又被禁了,记一下检查流程 ╮(╯▽╰)╭
S1.检查是不是机子挂了进行海外连接ip测试站长工具 ping.chinaz.com/ 选择“海外”进行测试
如果全部超时,机子挂了,解决方案:
可能搬瓦工机房服务器处于维修状态,这个页面 可以查看当前机房服务器状态,绿色是正常
重启
重装
提交工单,找客服
备用 ip 测试工具
http://ping.pe/
S2. 检查是否ip被禁进行国内连接 ip 测试 同S1, 选择所有国内站点进行测试,如果全部超时,ip被封无疑
更换ip
免费更换地址 登陆后,点击 Test ,如果 bwg 检查 ip 确实被封,可以免费换(现在是,每十周并且被封才能免费换)
收费更换地址
S3.检查是否端口被封
telnet IP 端口
如果不是 ssh 端口被封还好,把自己暴露的服务端口改下重启,麻烦的是要通知所有用你机子的人..
SSH 端口被封
修改配置文件,修改/添加端口号
1vim /etc/ssh/sshd_config
...
了解你使用的 Sort ( 实现剖析) - 3
先上图, 本篇文章涉及 归并排序 和 基数排序 两种算法
往期:
了解你使用的 Sort ( 实现剖析) - 1 中,介绍了 **插入排序** 和 **交换排序** 中四种排序算法
了解你使用的 Sort ( 实现剖析) - 2 中,介绍了 **选择排序** 中两种算法
归并排序归并排序使用分治法,核心在于数列的“分”与“合”,不断地将两个已排好序的数组合并一个有序数组
思路:
将数组分割为两个部分,创建新的数组a1和 b1
如果a1的长度大于2,则继续执行1过程,直至ai
将ai中两个数字进行比较交换位置形成有效数组
递归向上比较两个数组大小并合并成新的有序数组 (例如比较数组第一位,即可得出哪个数组更小)
参考动画去理解 ↓
基数排序前置条件:
必须为整数数组,或者你可以转化为整数数组
知道数组的位数范围(比如 0 - 999 最多三位)
基数排序是桶排序的改进算法。由于桶排序需要创建数组数据范围长度的空间,很浪费空间,基数排序则是一个逐位(个位、十位、百位等)的桶排序,空间仅需长度为10的数组
思路:
首先只关注数组a中每个数的个位 ...
了解你使用的 Sort ( 实现剖析) - 2
先上图, 本篇文章涉及 选择排序 中两种算法
往期:
了解你使用的 Sort ( 实现剖析) - 1中,介绍了 **插入排序** 和 **交换排序** 中四种排序算法
直接选择思路:
遍历数组a[0]-a[n]并得出最小值a[j], 将a[0]与a[j]互换
遍历数组a[1]-a[n]并得出最小值a[j], 将a[1]与a[j]互换
循环直至结束
参考动画去理解 ↓
堆排序核心:将数组构造成二叉堆↓(左侧数组,右侧对应二叉堆)
二叉堆(英语:binary heap)是一种特殊的堆,二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足堆特性:父节点的键值总是保持固定的序关系于任何一个子节点的键值,且每个节点的左子树和右子树都是一个二叉堆。当父节点的键值总是大于或等于任何一个子节点的键值时为“最大堆”。当父节点的键值总是小于或等于任何一个子节点的键值时为“最小堆”。
思路:
构建二叉堆 (注意如果子节点与父节点交换了位置,则交换位置后的父节点仍需要向下验证)
解构二叉堆为数组(注意二叉堆两个子节点的大小关系是不保证的,需要做比较)
& ...
了解你使用的 Sort ( 实现剖析) - 1
先上图, 本篇文章涉及 插入排序 和 交换排序
基础插入排序思路:
将数组分为已完成排序部分和未完成排序部分,总是左侧为已完成部分
首先第 0 位归为已完成排序部分
将未完成排序部分中最左侧的数字依次与已完成排序部分的进行比较,如果左侧数字更大,则交换两那个数字,直至没有交换,至此已完成排序部分多一位
重复第三步操作直至未完成排序部分清空
参考动画去理解,小方块都绿是每个循环的结束 ↓
Shell 排序 (希尔排序)由于基础插入排序每次都是一个挨着一个数字比较,希尔排序是对数字移动次数减少的一个改进算法。
定义一个正整数 d1 (可以理解为步数)
从第 0 位至 arr.length-d1 位遍历,将当前位 i 与 i+d1 为进行比较,如果第 i 位数大于 第 i+d1 位,则进行交换
再定义一个正整数 d2 (d2 < d1) 执行同2步骤
重复上述操作直至取 di=1,即对整个数组进行一次插入排序
可以理解为为了大概率减少数字间的交换,设计的一种增量逐步减少式的插入排序
一般 d1 选择 arr.length/2, ...
意料之外的排序(Sort "Bug")
数字排序先抛出一个你一定遇到过的问题
当我们对一个数组进行排序的时候,你会发现结果诶??再仔细一看,怎么像是感觉根据字符串排序了,我传入的明明是数字..
★ 所以第一个点,我们要记住compareFunction默认是会转换为字符串按照字符的 Unicode 位点进行排序的
1arr.sort([compareFunction])
数字排序要这样写
12345678arr.sort(function(a, b) { return a - b})// orarr.sort((a, b) => a - b)
中文排序上面提到 compareFunction 默认是按照 Unicode 点位进行比较的,那么中文肯定是不能如图这样排序了
这时候,你需要一个转化为其他字符集来比较的方法 String.localeCompare。
1referenceStr.localeCompare(compareString[, locales[, options]])
实现 ↓
localeCompare 可以指定具体语言进行字符的比较,不过这个目前 ...