2024秋招腾讯wxg前端一面面经(只招实习转正)
前言
总用时:1h 55min 注意事项:wxg只收实习转正,需要至少先实习60天,地点在广州部门,所以需要确定好时间事宜
被拷打,被问一个问题想至少一分钟多,本来紧张组织语言就很灾难,又特别难特别煎熬,绞尽脑汁,完全没问html和css,时长很久所以有一些不记得了,但是因为完全顺着逻辑就问下去了,所以能想起来大部分。
问了很多底层、操作系统等等的(真的快忘完了,复习也没复习到那些部分,也有可能一开始就没特别搞清楚),上来手撕三道算法题,感觉把毕生所学都用上了,虽然绩点较高但知识没有深入的后果be like
流程
- 面试官自我介绍,我自我介绍
- 手撕算法:快速排序,实现 + 讲解思路,时间复杂度是多少,怎么计算的时间复杂度
- 手撕算法:二叉树从上到下取和最多线路的和(且取的每个元素不能是相邻两个叶子节点),时间复杂度
- 手撕算法:两个二叉树判断相同,数据结构如下,时间复杂度,还有其他方法吗?
TreeNode {
left: Node
right: Node
val: Number
}
- 实际开发中为什么要避免用递归?递归会导致什么问题?
- 堆栈溢出是什么溢出?什么是堆,什么是栈?这里的堆栈和操作系统的堆栈一样吗?
- malloc()函数或数据回收会把数据放进堆还是栈?
- 栈存什么,堆存什么?栈是先进后出还是先进先出?队列呢?
- 你对你简历上写的技术栈哪个比较熟悉?
- 读过Vue源码吗?读的文档还是源码?
- 场景:Vue中设置一个
data: count
(初始0),页面中有一个{{ count }}
,还有一个按钮点一下就触发handler函数,页面上的count会怎么变化?为什么?
handler() {
for (let i=0; i<100; i++) {
this.data = i
}
}
- 什么是
$nextTick
,怎么判断什么时候我要进行$nextTick
了 - 什么是EventLoop?什么是宏任务,什么是微任务?怎么执行的?
- 那么EventLoop的机制是什么?假如你开发Vue,我怎么知道有没有微任务?
- 宏任务有哪些?
let i = 1;
是什么任务?- JS有几个线程?
- 既然JS只有一个线程,那么怎么实现EventLoop的?怎么异步化的?为什么能实现异步?EventLoop里面有哪些任务,含有
let i = 1;
这种任务吗?同步任务是EventLoop里面的吗?是超脱于EventLoop里的吗? - 进程是什么?线程是什么?进程和线程的关系?
- 多核cpu多线程的情况下,线程用的是同一个CPU吗?
- 线程之间怎么通信?进程之间怎么通信?
- 场景:有线程A中一个地址指向数据,线程B可以直接拿这个数据吗?
- 什么是信号量?干嘛的?
- 什么是锁?有哪些锁?
- 怎么保证线程安全?
- 互斥锁实现机制?
算法题实现思路
- 我写的如下,时间复杂度
O(nlogn)
,说了感觉可用期望算,最后不会算,只能大概讲一下
pivot = arr[Math.floor(arr.length / 2)]; // 以中点元素作为基数的话
quicksort(arr, pivot)
function quickSort(arr, pivot) {
if (arr.length <= 1) {
return arr;
}
const left = [];
const right = [];
for (const ele of arr) {
if (ele < pivot) {
left.push(element);
} else if (ele > pivot) {
right.push(ele);
}
}
return [...quickSort(left), pivot, ...quickSort(right)];
}
- 递归做的,时间复杂度
O(2^n)
// nums的结构类似 [3, 2, 3, 3, 1]
function rob(nums, start, end) {
if (start > end) {
return 0;
}
// 递归从最下面的叶子节点网上加
const curHouse = nums[start] + rob(nums, start + 2, end);
const nextHouse = rob(nums, start + 1, end);
if(curHouse > nextHouse){
return curHouse;
}
return nextHouse;
}
- 递归做的,时间复杂度
O(n)
,其他方法说了一下推栈做(弄成数组的结构),但没成功写出来
/**
TreeNode {
left: Node
right: Node
val: Number
}
*/
function compare1(tree1, tree2) {
if(tree1 === null && tree2 === null) {
return true;
}
if((tree1 === null && tree2 !== null) || (tree1 !== null && tree2 === null)) {
return false;
}
return (tree1.value === tree2.value
&& compare1(tree1.left, tree2.left)
&& compare1(tree1.right, tree2.right));
}
小结
答得稀烂,看似答上其实没答上,瞎掰都掰不出来,去世
CSDN也发了这个:点击跳转CSDN - 2024秋招腾讯wxg前端一面面经(只招实习转正)
#面试题刺客退退退##前端##秋招##面经##2024秋招前端#