2024-8-2 米哈游一面 挂

2024-8-2 米哈游一面 挂

被拷打了 😭

问题

  • 并发和并行的区别

  • 浏览器是多线程还是单线程的,有哪些线程

  • 多线程有什么缺点

  • 如何防止多线程对一个资源进行变更造成问题

  • http2 有哪些功能

  • udp 和 tcp

  • http3 是如何基于 udp 实现的可靠传输

  • map 和 weakMap、object

  • vue 的 computed 原理

  • 事件循环

  • 水平垂直居中

  • 写输出

class Foo {
static a() {
console.log(1)
}
a() {
console.log(2)
}
}

Foo.prototype.a = function () {
console.log(3)
}

Foo.a = function () {
console.log(4)
}

Foo.a()
let obj = new Foo()
obj.a()
Foo.a()
  • 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
// 示例 1:
// 输入: nums = [1,1,1,2,2,3], k = 2
// 输出: [1,2]

// 示例 2:
// 输入: nums = [1], k = 1
// 输出: [1]

// 这是我写的,但是有问题
const getNum = (nums, k) => {
const map = new Map()
nums.forEach(item => {
if (!map.get(item)) map.set(item, 1)
else map.set(item, map.get(item) + 1)
})
let arr = []
let i = 0
for ([k, v] of map) {
arr[i] = { key: k, val: v }
i++
}
// let arr = map.map(([k,v])=>({key:k,val:v}))
arr.sort((a, b) => a - b)
return arr.slice(0, k - 1).map(item => item.key)
}
console.log(getNum([1, 1, 1, 2, 2, 3], 3))
  • 手写防抖
// 写的有问题
function debounce(fn, wait = 500, immeidate) {
let timer = null
return function (...args) {
const runNow = !timer && immeidate
if (timer) {
clearTimeout(timer)
return
}
timer = setTimeout(() => {
fn.apply(this, args)
}, wait)
runNow && fn.apply(this, args)
}
}

let newFn = debounce(() => {
console.log(1)
})
newFn()
newFn()
newFn()
newFn()
  • 看输出
// 记忆中的

function changeO(o) {
o.url = 'xxxx'
o = new Object()
o.url = 'yyy'
}
let o = new Object()
changeO(o)
console.log(o.url)

反问

  • 竞争强度:不清楚
  • 干啥:内部平台
  • 面试侧重:因人而异

总结

玉玉

后话

防抖:

const debounce_2 = (cb, wait, immediate) => {
let timer = null
return function (...args) {
if (immediate && !timer) {
cb.apply(this, args)
timer = '11'
} else {
clearTimeout(timer)
timer = setTimeout(() => {
cb.apply(this, args)
timer = null
}, wait)
}
}
}

看输出:

class Foo {
static a() {
// 类内部才可以访问,外部无法访问
console.log(1)
}
a() {
// 每个生成出来的对象都有这个属性,而且都不一样
console.log(2)
}
}

// 生成出来的对象共用的,因为在原型链上
Foo.prototype.a = function () {
console.log(3)
}

// 类(构造函数)作为一个对象的属性
Foo.a = function () {
console.log(4)
}

Foo.a() // 4
let obj = new Foo()
obj.a() // 3
Foo.a() // 4