一周的面试题有点多,希望你能够转发收藏起来,方便自己后面有时间可以更好的回顾备忘,也当做是对我们的一点支持,谢谢!
ps:下周这个频道可能没法继续了,如有喜欢分享和整理资料的群友,请与群主漫步联系,帮助自己,交流进步,分享让你成长,期待你与我联系。
面试题从这里开始~
1.如何实现数组的随机排序?
关于数组的排序,可以看看我以前写过的一篇文章:js随机数组,js随机洗牌算法
var arr = [1,2,3,4,5,6,7,8,9]
function randomsort1 (arr) {
for (let i = 0, len = arr.length; i < len; i++) {
const ran = parseInt(Math.random() * len)
const temp = arr[ran]
arr[ran] = arr[i]
arr[i] = temp
}
return arr
}
function randomsort2 (arr) {
const newarr = []
while (arr.length) {
const ran = parseInt(Math.random() * arr.length)
newarr.push(arr[ran])
arr.splice(ran, 1)
}
return newarr
}
function randomsort3 (arr) {
return arr.sort(() => Math.random() - 0.5)
}
2.请将数组中所有的0移动到数组尾部
var arr = ['a',1,0,'d',1,0,2]
function moveZeros (arr) {
return [...arr.filter(v => v !== 0), ...arr.filter(v => v === 0)]
}
3.如果需要手动写动画,你认为最小时间间隔是多久,为什么?
显示器默认频率是60HZ,即1秒刷新60次,故最小时间间隔是 1000/60 = 16.7毫秒。
4.什么是Cookie 隔离?
若静态文件位于主域名下,请求静态文件时会携带cookie到服务器,浪费流量,故需隔离。
由于cookie有域的限制,不能跨域提交请求,故将静态文件置于非主要域名下,请求静态文件时便不会携带cookie数据。如此可降低请求头大小和请求时间,以便达到降低整体请求耗时的目的。
5.请写出js中取整的方式?哪一种方式效率更高?
- Math.floor()
- ~~按位非
- <<0左移
- |0按位或
- parseInt
- toFixed()
// 准备一个包含100000个小数的数组
var numbers = []
for(var i = 0; i < 100000; i++) {
numbers[i] = Math.floor(Math.random() * 100000) / 10000
}
var test
console.time('Math.floor()')
for (var i = 0; i < 100000; i++) {
test = Math.floor(numbers[i])
}
console.timeEnd('Math.floor()')
var test
console.time('~~')
for (var i = 0; i < 100000; i++) {
test = ~~ (numbers[i])
}
console.timeEnd('~~')
var test
console.time('<<0')
for (var i = 0; i < 100000; i++) {
test = (numbers[i]) << 0
}
console.timeEnd('<<0')
var test
console.time('|0')
for (var i = 0; i < 100000; i++) {
test = numbers[i] | 0
}
console.timeEnd('|0')
var test
console.time('parseInt')
for (var i = 0; i < 100000; i++) {
test = parseInt(numbers[i])
}
console.timeEnd('parseInt')
var test
console.time('toFixed()')
for (var i = 0; i < 100000; i++) {
test = numbers[i].toFixed(0)
}
console.timeEnd('toFixed()')
/*
Math.floor(): 5.799072265625ms
~~: 5.5419921875ms
<<0: 7.20703125ms
|0: 7.76513671875ms
parseInt: 11.83984375ms
toFixed(): 68.804931640625ms
*/
以上运算耗时并不固定,与浏览器版本、操作系统等都有关联。
测试结果表明:
~~按位非、<<0左移、|0按位或、Math.floor()运算速度都挺快,
parseInt紧随其后,toFixed()最耗时。
6.给定整数数组和单个整数,返回整数数组中2个值相加为单个整数的值。
function sum_pairs (arr, sum) {
const seen = {};
for (let x of arr) {
if (seen[sum - x]) {
return [sum - x, x]
} else {
seen[x] = true
}
}
}
sum_pairs([11, 3, 7, 5], 10)
sum_pairs([4, 3, 2, 3, 4], 6)
sum_pairs([0, 0, -2, 3], 2)
sum_pairs([10, 5, 2, 3, 7, 5], 10)
7.请写出一个判断字符串是否是回文的函数
function reverseStr(str) {
return str === str.split('').reverse().join('')
}
以上就是这周的面试汇总,记得给我们点赞,转发支持我们更好的走下去。每道题目的答案并非标准答案,我们期待在评论区看到你的答案。想接收每日最新面试题和最新文章推荐的可以进入加我们微信群哦。