24.9.5 腾讯音乐25秋招前端笔试记录

现在秋招已结束,整理发一些面经笔经,回馈一下牛客社区。

准备:
9.3
https://gw-c.nowcoder.com/api/sparta/jump/link?link=https%3A%2F%2Fwww.nowcoder.com%2Fexam%2Fcompany%3FcurrentTab%3Drecommand%26jobId%3D100%26selectStatus%3D0%26tagIds%3D9079
这里一共有六份真题试卷。
刚刚尝试在两个小时内回答腾讯音乐娱乐集团2024校园招聘-前端开发笔试(II),结果三道算法只做出了两道。后面看题解发现第三道直接暴力枚举就行了,第二道确实有点难度(甚至是暴力枚举都很难写)。但是我第三道由于被第二道搞没了心态,就直接放弃了(真在笔试的时候千万别放弃)。所以客观来看我还是能做出三道的。
刚才仔细看了一下第二道题,应该是属于动态规划,感觉其实也没有想象中那么难,可以认为是需要进行细致分类讨论的子问题分解递推求解。虽然我很菜,但是我要怀有题目不难的信念,这样才能保持心态良好。
发现有一套试卷打不开,那我这两天做四套题就好了。

9.4
今天大概就是继续刷题好了。做两套或者三套。
花了四个小时才做好了一套卷,这次是把全部题目都通过了。虽然花的时间超了,但是也给自己增加了信心:我是有能力把所有题目都做出来的,包括十分困难的动态规划!
但是动态规划的那道题目我就花了1小时40分钟,其实前面20分钟已经把递推公式写出来了。但是发现自己的编程还不够熟练,而且平台的js版本要滞后一些,有些方法用不了。做的过程中常把数组和字符串的方法搞混了,还有些方法直接忘了。比如我在想办法往数组的前面插入一个元素,想了10分钟竟没有办法,只好作弊查了一下MDN文档,原来要用splice(0,0,value)。
所以还要抄一抄数据结构来熟练一下。
后面这份试卷就没那么幸运了,而且最后一道看程序写结果的题目到现在也没有完全搞明白,只是知道有那么回事。其中比较奇妙的就是在函数内给没有声明过的变量赋值会变为globalThis的变量,而不管调用函数时的this是什么。
function test() {           
getName = function() { 
    Promise.resolve().then(() => console.log(0)); 
    console.log(1);               
};
return this; 
}
比如上面的getName会变为globalThis的一个变量(即全局变量)。不管是直接调用:
test(),还是用call或apply指定this:test.call(obj)或test.apply(obj),getName都会变为globalThis的一个变量,而不会绑定到obj。
此外,我认为TME2022校园招聘前端开发岗位笔试(II)的第一道算法的描述是错误的。“若当前节点为右儿子,会变成当前节点的双亲节点的右边相邻兄弟节点的左孩子节点。(如果当前节点的双亲节点已经是最右边的节点了,则会变成双亲节点同级的最左边的节点的左孩子节点)”,这里的右边相邻兄弟节点严格来说具有同一父节点的才算兄弟节点,不过测试用例则是把堂兄弟结点也算是兄弟节点了。

9.5
今天继续刷了TME的两套题目(实习生),有些题没做出来,不过也算是练了一下手感。
做了五套题,现在大概已经有了些感觉,起码打字速度加快了一些,对算法的实现流畅了一些。其中最大的进步可能就是初步领略了动态规划。有许多题目败在了算法复杂度上,确实是基本功不够扎实导致的,因为实在是想不出优化的办法,看了一下题解经常会看到一些人说xxx方法这样,希望我也有一天可以做到这样。不过按目前的情况来看大概要到春招的时候了。

笔试:
刚才完成了TME的笔试,ac了三道题(一共四道)。四道都是比较基础的算法题,但是由于脑子不太好使,第三道一开始想歪了(想到了动态规划那边),最后用偏暴力的递推来解,但是计算子方阵权值的长度选取一下没想清楚,导致没做出来。
不过想想还是算了,毕竟笔试AC了三道已经算是我历史上的最佳成绩了,毕竟之前算法一直是我的弱项,而之前的面试都是一道都做不出来的。这无疑给了我充分的信心:我不会被算法卡脖子!
全部评论

相关推荐

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

创作者周榜

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