1.数组去重
deleteRepeat: function (array) {
var emptyArray = [];
for(let i = 0; i < array.length; i++) {
if(emptyArray.indexOf(array[i]) == -1) {
emptyArray.push(array[i]);
}
}
console.log('这是去重之后的数组');
console.log(emptyArray);
},
思路:创建一个新的空数组,遍历旧的数组,如果新数组里面没有旧数组的某一项,将这一项填入新数组中,遍历完毕时,新数组就是去重之后的数组。
2.生成指定数的阶乘
multiple: function (start, end) {
var result = 1;
var length = end - start + 1;
for (let i = start; i <= length; i++) {
result = result * i;
}
console.log(result)
},
思路:n的阶乘就是1 * 2 * 3 * ... * n
3.求数组中最大差值
findMaxMargin: function (array) {
var maxNumber = this.findMax(array);
var minNumber = this.findMin(array);
var maxMargin = maxNumber - minNumber;
console.log('this is my biggest margin');
console.log(maxMargin);
},
findMax: function (array) {
var max = array[0];
for (let i = 0; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
}
}
return max;
},
findMin: function (array) {
var min = array[0];
for (let i = 0; i < array.length; i++) {
if (array[i] < min) {
min = array[i];
}
}
return min;
},
思路:先找出数组中的最大值和最小值,再做相减运算即可,找最值的思路是,先设定最值是数组中的第一个值,遍历数组,数组中的每一项和设定的最值做比较,将比较的结果付给最值,数组遍历结束时,可得最值。
4.生成斐波那契数列
findMoreWives: function (n) {
var wives = this.allWives;
if (n <= 0) {
return false;
} else if (n == 1) {
wives = [1];
} else if (n == 2) {
wives = [1, 1];
} else {
wives = [1, 1];
for (let i = 2; i < n; i++) {
wives[i] = wives[i - 2] + wives[i - 1];
wives.push(wives[n - 1]);
}
}
wives.splice(n - 1, 1)
console.log(wives);
},
思路:斐波那契数列为,1,1,2,3,5,8,13,21,34,...即每一项是前两项之和。
5.二分查找
search: function (arr, desNum) {
var length = arr.length;
var mid = arr[Math.floor(length / 2)];
console.log(mid);
var destination = desNum;
for (let i = 0; i < length; i++) {
if (arr.indexOf(destination) == -1) {
console.log('寻找的目标不存在于数组中');
return false;
} else {
console.log('寻找的目标存在于数组中');
if (mid == destination) {
console.log('目标就是' + destination);
return false;
} else if (mid > destination) {
console.log('向前查找')
var frontField = arr.splice(0, Math.floor(length / 2) + 1);
console.log(frontField);
this.search(frontField, desNum);
} else if (mid < destination) {
console.log('向后查找')
var backField = arr.splice(Math.floor(length / 2), length / 2 + 1);
this.search(backField, desNum);
}
}
}
},
思路:先判断目标在不在给定数组中,在的情况下才进行寻找操作。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功,否则利用中间位置记录将表分成前后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
6.生成指定长度随机字符串
createComplexRandom: function (n) {
var alpha = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
var finalString = '';
var currentRandom = '';
for (let i = 0; i < n; i++) {
var tag = Math.floor(Math.random() * 10);
if (tag > 4 && tag < 10) {
var alphaPosition = Math.floor(Math.random() * 26);
currentRandom = alpha[alphaPosition];
} else if (tag >= 0 && tag < 5) {
currentRandom = tag.toString();
}
finalString += currentRandom;
}
console.log(finalString);
},
还有一个光有数字的版本
createRandom: function (n) {
var string = '';
for (let i = 0; i < n; i++) {
var perString = Math.floor(Math.random() * 10);
string += perString.toString();
}
console.log(string);
},
7.http协议在网络结构的哪一层
TCP/IP协议栈中,从下至上依次为物理层,数据链路层,网络层,传输层,应用层,每一层的数据都封装在下一层的数据中,因为http协议被封装在tcp包中,使用的端口号为80,因此http协议属于传输层之上,即应用层。
8.CDN加速原理
CDN全称为内容分发网络(Content DeliveryNetwork),CDN是一个策略性部署的整体系统,从技术上全面解决由于网络带宽小,用户访问量大,网店分布不均而产生的用户访问网站响应速度慢的根本原因,CDN的目的是通过在现有的internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络边缘,使用户可以就近取得所需内容,解决internet网络拥塞状况,提高用户访问网站的响应速度。