一周的面试题有点多,希望你能够转发收藏起来,方便自己后面有时间可以更好的回顾备忘,也当做是对我们的一点支持,谢谢!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 testconsole.time('Math.floor()')for (var i = 0; i < 100000; i++) { test = Math.floor(numbers[i])}console.timeEnd('Math.floor()')var testconsole.time('~~')for (var i = 0; i < 100000; i++) { test = ~~ (numbers[i])}console.timeEnd('~~')var testconsole.time('<<0')for (var i = 0; i < 100000; i++) { test = (numbers[i]) << 0}console.timeEnd('<<0')var testconsole.time('|0')for (var i = 0; i < 100000; i++) { test = numbers[i] | 0}console.timeEnd('|0')var testconsole.time('parseInt')for (var i = 0; i < 100000; i++) { test = parseInt(numbers[i])}console.timeEnd('parseInt')var testconsole.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.76513671875msparseInt: 11.83984375mstoFixed(): 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('')}