2024秋招腾讯wxg前端一面面经(只招实习转正)

前言

总用时:1h 55min
注意事项:wxg只收实习转正,需要至少先实习60天,地点在广州部门,所以需要确定好时间事宜

特别煎熬,特别难,绞尽脑汁,完全没问html和css,时长很久所以有一些不记得了,但是因为完全顺着逻辑就问下去了,所以能想起来大部分。

问了很多底层、操作系统等等的(真的快忘完了,复习也没复习到那些部分,也有可能一开始就没特别搞清楚),上来手撕三道算法题,感觉把毕生所学都用上了,虽然绩点高但知识没有深入的后果be like

流程

  1. 面试官自我介绍,我自我介绍
  2. 手撕算法:快速排序,实现 + 讲解思路,时间复杂度是多少,怎么计算的时间复杂度
  3. 手撕算法:二叉树从上到下取和最多线路的和(且取的每个元素不能是相邻两个叶子节点),时间复杂度
  4. 手撕算法:两个二叉树判断相同,数据结构如下,时间复杂度,还有其他方法吗?
TreeNode {
	left: Node
	right: Node
	val: Number
}
  1. 实际开发中为什么要避免用递归?递归会导致什么问题?
  2. 堆栈溢出是什么溢出?什么是堆,什么是栈?这里的堆栈和操作系统的堆栈一样吗?
  3. malloc()函数或数据回收会把数据放进堆还是栈?
  4. 栈存什么,堆存什么?栈是先进后出还是先进先出?队列呢?
  5. 你对你简历上写的技术栈哪个比较熟悉?
  6. 读过Vue源码吗?读的文档还是源码?
  7. 场景:Vue中设置一个data: count(初始0),页面中有一个 {{ count }},还有一个按钮点一下就触发handler函数,页面上的count会怎么变化?为什么?
handler() {
   for (let i=0; i<100; i++) {
       this.data = i
   }
}
  1. 什么是$nextTick,怎么判断什么时候我要进行$nextTick
  2. 什么是EventLoop?什么是宏任务,什么是微任务?怎么执行的?
  3. 那么EventLoop的机制是什么?假如你开发Vue,我怎么知道有没有微任务?
  4. 宏任务有哪些?
  5. let i = 1; 是什么任务?
  6. JS有几个线程?
  7. 既然JS只有一个线程,那么怎么实现EventLoop的?怎么异步化的?为什么能实现异步?EventLoop里面有哪些任务,含有let i = 1;这种任务吗?同步任务是EventLoop里面的吗?是超脱于EventLoop里的吗?
  8. 进程是什么?线程是什么?进程和线程的关系?
  9. 多核cpu多线程的情况下,线程用的是同一个CPU吗?
  10. 线程之间怎么通信?进程之间怎么通信?
  11. 场景:有线程A中一个地址指向数据,线程B可以直接拿这个数据吗?
  12. 什么是信号量?干嘛的?
  13. 什么是锁?有哪些锁?
  14. 怎么保证线程安全?
  15. 互斥锁实现机制?

算法题实现思路

  1. 我写的如下,时间复杂度 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)];
}
  1. 递归做的,时间复杂度 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;
}
  1. 递归做的,时间复杂度 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));
}

小结

答得稀烂,看似答上其实没答上,瞎掰都掰不出来,去世

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值