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

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

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

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


关注我

我的微信公众号:前端开发博客,在后台回复以下关键字可以获取资源。

  • 回复「小抄」,领取Vue、JavaScript 和 WebComponent 小抄 PDF
  • 回复「Vue脑图」获取 Vue 相关脑图
  • 回复「思维图」获取 JavaScript 相关思维图
  • 回复「简历」获取简历制作建议
  • 回复「简历模板」获取精选的简历模板
  • 回复「加群」进入500人前端精英群
  • 回复「电子书」下载我整理的大量前端资源,含面试、Vue实战项目、CSS和JavaScript电子书等。
  • 回复「知识点」下载高清JavaScript知识点图谱

每日分享有用的前端开发知识,加我微信:caibaojian89 交流