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));
}

小结

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

CSDN也发了这个:点击跳转CSDN - 2024秋招腾讯wxg前端一面面经(只招实习转正)

#面试题刺客退退退##前端##秋招##面经##2024秋招前端#
全部评论
这基本在问408的内容了明天面试了,害怕
1 回复 分享
发布于 2024-01-11 22:04 浙江
想问下这种算法题的解法都是要拿js写吗
1 回复 分享
发布于 2023-08-27 21:07 浙江
感觉问的不像前端常规hh 有点难
1 回复 分享
发布于 2023-08-27 21:07 浙江

相关推荐

06-14 01:40
已编辑
南昌大学 前端工程师
没有自我介绍,直接从项目开始结合八股开始介绍一下项目1.&nbsp;你对&nbsp;React&nbsp;底层有了解过吗&nbsp;&nbsp;&nbsp;我以为这是在问我有没有看过&nbsp;React&nbsp;源码,开始还有点想放弃回答的,后来我硬着头皮开始讲声明式编程,组件化之类的。。。&nbsp;&nbsp;&nbsp;突然觉得不管怎么样,我觉得都可以讲讲和这些东西沾点边的,起码让面试官了解你知道什么吧哈哈(仅个人观点)2.&nbsp;讲讲&nbsp;React&nbsp;的生命周期3.&nbsp;刚才你在讲生命周期时提到了&nbsp;useEffect&nbsp;依赖数组不为空的情况,如果我想进行数据请求这些操作应该怎么处理依赖数组呢4.&nbsp;那么你还用过什么其他的&nbsp;hooks&nbsp;吗5.&nbsp;useCallback&nbsp;和&nbsp;useMemo&nbsp;之间的区别6.&nbsp;组件之间的通信&nbsp;&nbsp;&nbsp;我只讲了父组件向子组件之间的&nbsp;props&nbsp;传递和状态提升进行子组件之间同一变量状态的同步7.&nbsp;那么如果我不想使用状态提升应该怎么办呢&nbsp;&nbsp;&nbsp;我说可以使用&nbsp;forwardRef&nbsp;和&nbsp;useImperative&nbsp;hooks&nbsp;来实现将子组件中特定&nbsp;DOM&nbsp;元素暴露给父组件&nbsp;&nbsp;&nbsp;还有一些状态管理工具&nbsp;zustand,Redux8.&nbsp;有使用过&nbsp;Redux&nbsp;吗9.&nbsp;你的项目中有使用过&nbsp;antd,讲讲你对它的一些看法&nbsp;&nbsp;&nbsp;这里有点尴尬了,我一直以为只能`npm&nbsp;install&nbsp;antd`将所有的组件的下载,但是面试官说我玩的不够溜实际也可以向&nbsp;Shadcn&nbsp;UI&nbsp;一样实现按需下载10.&nbsp;你的&nbsp;webpack&nbsp;是怎么配置的,是使用了默认配置吗,还是使用了自己的配置呢11.&nbsp;你是如何实现的自动化部署呢(这个问题我觉得还挺频繁的,基本只要看了我的简历的面试官都问了,得仔细总结一下这个问题)12.&nbsp;你使用过&nbsp;vite&nbsp;和&nbsp;webpack,这两者你觉得有什么区别呢&nbsp;&nbsp;&nbsp;&nbsp;我个人只从了开发环境下和一些其他小的方面的区别进行讲述,后来面试结束觉得可以再深入讲讲13.&nbsp;你写到你会&nbsp;flex&nbsp;讲讲&nbsp;flex&nbsp;的一些常见属性14.&nbsp;我有一个盒子,左侧元素在屏幕缩放时不变,右侧元素会按照缩放而变化15.&nbsp;Sass&nbsp;的使用感受16.&nbsp;Sass&nbsp;中样式的深度嵌套应该怎么写(应该是好奇发问,面试官应该没用过&nbsp;Sass)17.&nbsp;使用过的&nbsp;git&nbsp;的常见命令18.&nbsp;合作开发中遇到冲突怎么解决19.&nbsp;git&nbsp;rebase&nbsp;和&nbsp;git&nbsp;merge&nbsp;之间的区别20.&nbsp;你为什么会觉得&nbsp;git&nbsp;merge&nbsp;会比&nbsp;git&nbsp;rebase&nbsp;更适合合作开发21.&nbsp;你做过一些外包项目,这些项目是什么&nbsp;&nbsp;&nbsp;&nbsp;Hugo,PHP&nbsp;然后面试官听到我写过&nbsp;PHP&nbsp;再那里笑了好久:“哈哈哈,PHP,世界上最好的语言”貌似没了,然后写了一道很简单的算法这几次面试下来,我觉得我自己在知识方面上有进步之外,我也渐渐体会到了如何去把握面试节奏,面试不应该是一场严肃的知识问答而是一场畅快的技术交流。要去引导面试官问你会的问题,可以在对一个问题的讲解时将另一个(你熟悉的)知识点进行相关联,这样的话大概率面试官会去你问你提到的另外一个知识点,来把握面试节奏。当然我还是一个小白,只是将自己的理解分享,也希望给大家带来帮助
查看44道真题和解析
点赞 评论 收藏
分享
字节跳动Data&nbsp;AML部门前端实习一面面经本次面试时长1小时,主要涵盖项目经历、技术原理、基础知识和算法编程等方面,具体内容如下:一、项目经历面试官首先询问了实习项目相关内容,围绕项目背景、技术实现、遇到的问题及解决方案展开交流,考察对实际项目的参与度与理解深度。二、Suspense原理及实现1.&nbsp;原理:Suspense&nbsp;是&nbsp;React&nbsp;用于处理异步渲染的组件,可在数据加载或组件渲染完成前展示加载指示器,提升用户体验。2.&nbsp;实现方式:被问到在&nbsp;useEffect&nbsp;中存在&nbsp;fetch&nbsp;请求时,如何让顶层组件感知组件存在异步请求。回答可通过&nbsp;React&nbsp;Context&nbsp;实现信息透传,但存在更优方案,可从&nbsp;React&nbsp;的新特性或状态管理库角度进一步优化&nbsp;。三、JS基础1.&nbsp;var、let和const的区别:var&nbsp;存在变量提升,会导致变量在声明前可被访问;let&nbsp;和&nbsp;const&nbsp;具有块级作用域,更加安全。2.&nbsp;var逐渐被弃用原因:var&nbsp;没有块级作用域,在复杂代码中容易引发变量覆盖等意外问题,使用&nbsp;let&nbsp;和&nbsp;const&nbsp;可避免此类风险,提高代码的可读性和稳定性。四、CSS基础1.&nbsp;三列瀑布布局(两边固定,中间自适应):纯CSS可通过浮动或绝对定位实现;使用flex布局更优雅,flex:&nbsp;1&nbsp;表示该元素会自动分配剩余空间。2.&nbsp;flex常用属性:主要涉及主轴和横轴方向设置,如&nbsp;flex-direction&nbsp;定义主轴方向;常用的居中属性包括&nbsp;justify-content:&nbsp;center(主轴居中)和&nbsp;align-items:&nbsp;center(交叉轴居中)&nbsp;。3.&nbsp;CSS动画:通过&nbsp;animation&nbsp;属性实现,配合关键帧&nbsp;@keyframes&nbsp;定义动画的起始和结束状态、变化函数(如线性变化)以及时间等参数。animation&nbsp;在渲染进程的合成线程执行,不会阻塞JS执行,效率较高。五、算法编程题1.&nbsp;合并有序链表//&nbsp;定义链表节点结构function&nbsp;ListNode(val,&nbsp;next)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;this.val&nbsp;=&nbsp;(val&nbsp;===&nbsp;undefined?&nbsp;0&nbsp;:&nbsp;val);&nbsp;&nbsp;&nbsp;&nbsp;this.next&nbsp;=&nbsp;(next&nbsp;===&nbsp;undefined?&nbsp;null&nbsp;:&nbsp;next);}var&nbsp;mergeTwoLists&nbsp;=&nbsp;function(l1,&nbsp;l2)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;dummy&nbsp;=&nbsp;new&nbsp;ListNode(0);&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;current&nbsp;=&nbsp;dummy;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(l1&nbsp;&amp;amp;&amp;amp;&nbsp;l2)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(l1.val&nbsp;&amp;lt;&nbsp;l2.val)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;current.next&nbsp;=&nbsp;l1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l1&nbsp;=&nbsp;l1.next;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;current.next&nbsp;=&nbsp;l2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l2&nbsp;=&nbsp;l2.next;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;current&nbsp;=&nbsp;current.next;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;current.next&nbsp;=&nbsp;l1&nbsp;||&nbsp;l2;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;dummy.next;};2.&nbsp;二叉树寻找公共父节点(节点有parent指针)function&nbsp;lowestCommonAncestor(p,&nbsp;q)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;set&nbsp;=&nbsp;new&nbsp;Set();&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(p)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set.add(p);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;=&nbsp;p.parent;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(q)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(set.has(q))&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;q;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;=&nbsp;q.parent;&nbsp;&nbsp;&nbsp;&nbsp;}}3.&nbsp;实现sum函数curry化&nbsp;&nbsp;&nbsp;
查看11道真题和解析
点赞 评论 收藏
分享
评论
15
58
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务