前端开发博客微信群第四周面试题汇总

一周的面试题有点多,希望你能够转发收藏起来,方便自己后面有时间可以更好的回顾备忘,也当做是对我们的一点支持,谢谢!

ps:下周这个频道可能没法继续了,如有喜欢分享和整理资料的群友,请与群主漫步联系,帮助自己,交流进步,分享让你成长,期待你与我联系。

面试题从这里开始~

1.如何实现数组的随机排序?

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('')
}

以上就是这周的面试汇总,记得给我们点好看,转发支持我们更好的走下去。每道题目的答案并非标准答案,我们期待在评论区看到你的答案。想接收每日最新面试题和最新文章推荐的可以进入加我们微信群哦。

每道面试题都附带了codepen链接,记得点击原文链接看看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值