腾讯前端暑期实习凉经

老实说在面试之前已知对腾讯印象挺好的,周围大部分人对腾讯评价也还行。直到暑期面完腾讯,我只能说腾子还是尽显老一辈互联网国企风范。

今天下午又捞我起来当某个大头兵的业绩,拒了,*******

IEG

一面

  • 算法:合并两个有序数组。
  • 算法:给一个有序数组,删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除多余元素后数组的新长度。要求不能使用额外的空间。
  • 算法:连续子数组的最大和。
  • 简历上两个项目详细询问一些实现的细节。
  • pnpm是什么?
  • Monorepo架构的优缺点?用于团队开发时候的注意点。

一面面试官对我印象还不错,说我不是科班出身算法基础也项目经历都还行,建议我继续实践。

二面

  • TCP和UDP的区别?如何实现可靠的UDP协议?
  • TCP和IP的区别?
  • 进程和线程的区别?
  • 进程间的通信方式有哪些?
  • 前后端进行数据交互的方式?(XMLHttpRequest、fetch、WebSocket不知道了)
  • 如何判断和后台的数据请求成功与否?304是成功吗?
  • 如何控制浏览器使用与不使用缓存?
  • 计算机基础相关的知识你是怎么学习的?
  • 写过node吗?如果要搭一个web服务器你准备怎么做?
  • 现代计算机都是多核架构的,编写代码的时候如何利用这个多核架构呢?
    • 1000万个数字找到前十个最大的数?(最小堆,总是将数值最大的十个元素保持在堆顶)
    • 一等奖一个1%,二等奖2个2%,三等奖3个3%,如何设计这个抽奖系统?(长度100的数组,放1个1,2个2,3个3,其余位置放垃圾值,每次随机生成索引去数组里取值即可)
    • hardman。

    二面这个面试官,上来先是一张臭脸顶屏幕上,看到我简历上不是科班出身的时候脸直接黑了,估计这时候已经想好面试结果了。而且不得不吐槽,发音是真的不标准,每次问问题都要花很大精力去辨析他说的什么。

    PGC

    应用宝经典五道题,其他牛友有写,不说了。

    CDG

    一面

    • 实现数组扁平化。
    • 有效的括号。
    • 异步任务调度器,只能同时运行两个异步任务。(跟我理解的原生写法有些差别)
    • 介绍一下实习期间负责的工作。
    • 介绍一下项目里面的登录和注册功能的实现。
    • Cookie和Session的区别。
    • 说一下注册的整个流程。
    • 后端会对用户信息进行加密吗?在前端已经加密的情况下,后端还有必要进行加密吗?
    • GET和POST方法的区别?
    • 说一下HTTP的各个版本的特性?
    • 进程和线程的区别?进程之间的通信方式有哪些?
    • JS的垃圾回收机制说一下?
    • 基本数据类型和引用数据类型的区别。垃圾回收机制针对的是哪个类型?
    • 平时怎么学习网络、系统等计算机基础知识。
    • 了解过计算机组成原理吗?

    二面

    • 算法题:有效的括号组合,括号匹配的一个变种吧,加上字符串的全排列。
    • 学习过哪些工程化的方案?为什么项目要用Monorepo,它有什么缺点吗?
    • 平时刷题吗?刷过多少?
    • 浏览器输入URL到渲染页面的过程中,有哪些进程和线程参与工作,他们之间如何协作?哪些计算机资源被这些进程和线程所消耗了?
    • 上面的过程中哪些环节可能会受到前端攻击?Vue如何避免XSS攻击?
    • 说一下实习的项目和做的工作?
    • 加快项目冷启动的速度,除了升级构建工具还有什么办法?
    • 看过什么优秀项目的源码吗?为什么要看源码?有想过自己实现nextTick吗?
    • Vue在内存使用优化上有哪些设计?
    • 你觉得实习期间做的项目的难点在哪里?你自己项目有什么代码上的难点吗?
    • 一个优秀的组件库应该如何进行设计?
    • 你觉得自己相比科班的同学求职的时候有哪些优势?(死的快可以火速面下一家)
    • 最近比较火的大语言模型有接触过吗?它们跟前端如何结合呢?
    • 说一下自己遇到过的最大的挫折,付出过的最大的努力。

    一二面的面试官其实对我印象还可以,面试最后的反问环节对我的评价都是积极的居多,到这我还觉得有希望打赢复活赛,see you again小孩版都到嘴边了。

    三面

    • 你觉得自己有什么优势?还有其他的专业能力吗?
    • 你说自己工作能比较快的上手,具体怎么上手?
    • 操作系统了解的不多是吧,那我多问几个系统的问题。
    • 数据库也了解不多是吧?只学过JS?C++没学过吗?那我再问几个数据库和C++的问题。
    • 指针是什么?
    • TCP了解吗?TCP协议的包头的字段有哪些?TCP有什么用?
    • 常见的Web攻击方式?
    • 你实习的时候学到了啥?我觉得你项目和实习都很简单啊,你觉得自己有啥成长和贡献。

    三面上来就是几个KPI味道满满的问题,面试官没开摄像头,可能知道我是非科班出身,数据库和C++不会接触太多就一直问,具体的问题我也懒得回忆了,总之就是体验最差的一场面试。

    没能让鹅大人尽兴,真是抱歉了。

    #25届暑期实习##前端暑期实习#
    全部评论
    腾讯这个hardMan函数考了至少六七年了,给大家两种解题满分代码作参考吧:https://mp.weixin.qq.com/s/-hEjxY0yI6ZBTzAlc3xwAw
    1 回复 分享
    发布于 2024-08-23 09:54 广东

    相关推荐

    一、面试基本情况本次面试主要围绕 React 相关技术、流式传输以及算法与 React Hook 实现展开,包含技术原理问答和两道代码实现题。二、技术问题回顾与解答1. React Router 的实现机制React Router 基于 HTML5 的 history API 实现单页面应用的路由功能。它通过监听浏览器的 popstate 事件(当用户点击浏览器的前进、后退按钮时触发)以及手动调用 history.pushState()、history.replaceState() 方法来更新 URL 地址,同时不触发页面刷新。在 React 组件中,通过 BrowserRouter(基于 history API)、HashRouter(基于 URL 的 hash 部分,兼容性更好)等组件包裹应用,结合 Route 组件定义不同路径对应的渲染组件。当 URL 变化时,React Router 会根据当前路径匹配相应的 Route 并重新渲染对应的组件,从而实现页面内容的更新 。不过在本次面试中,我对这块知识掌握不够扎实,未能完整清晰作答。2. React memo 是做了什么React.memo 是一个高阶组件,用于对函数式组件进行性能优化。它会对组件的 props 进行浅比较,如果前后两次传入的 props 浅比较结果相同,就直接复用之前渲染的结果,不再重新执行组件函数,从而避免不必要的重复渲染。但需要注意,它仅对 props 变化进行比较,当组件内部状态(如通过 useState 创建的状态)变化时,即使 props 未变,组件仍会重新渲染。3. React Suspense 怎么实现的React Suspense 用于处理组件的异步加载情况,让开发者可以指定在异步操作(如数据获取、动态导入组件)进行时显示的加载状态。它通过在组件树中标记一个“等待”区域,当子组件中有异步操作未完成时,会先渲染 Suspense 组件指定的 fallback 内容(如加载动画),直到异步操作完成,再渲染实际的子组件内容。内部实现依赖于 React 的 Fiber 架构,利用 Fiber 的可中断、可恢复特性,在等待异步操作完成期间释放 CPU 资源,不阻塞主线程,提高应用的响应性能 。4. 流式传输相关讨论在讨论流式传输时,我提出可以在前端利用 Server-Sent Events(SSE)实现。SSE 是一种单向的、由服务器向客户端推送数据的技术,适合用于实时数据传输场景。同时,对于 JSON 数据的处理,采用流式解析会更加高效,比如在处理阶乘等数据量较大且逐步生成的场景下,流式解析无需一次性将所有数据加载到内存中,而是边接收数据边解析处理,减少内存占用,提升数据处理效率。三、代码题实现1. 大数相减(考虑负数结果)function subtractLargeNumbers(num1, num2) {function compare(num1, num2) {if (num1.length > num2.length) return 1;if (num1.length < num2.length) return -1;for (let i = 0; i < num1.length; i++) {if (num1[i] > num2[i]) return 1;if (num1[i] < num2[i]) return -1;}return 0;}const sign = compare(num1.split(''), num2.split(''));let larger = sign >= 0? num1 : num2;let smaller = sign >= 0? num2 : num1;let result = '';let carry = 0;for (let i = 0; i < larger.length; i++) {let diff = parseInt(larger[larger.length - 1 - i]) - (parseInt(smaller[smaller.length - 1 - i]) || 0) - carry;if (diff < 0) {diff += 10;carry = 1;} else {carry = 0;}result = diff + result;}while (result[0] === '0' && result.length > 1) {result = result.slice(1);}return sign < 0? '-' + result : result;}2. 实现一个可暂停、继续的倒计时 React Hookimport { useState, useEffect } from'react';function useCountdown(initialTime) {const [time, setTime] = useState(initialTime);const [isRunning, setIsRunning] = useState(true);let intervalId;useEffect(() => {if (isRunning && time > 0) {intervalId = setInterval(() => {setTime(prevTime => prevTime - 1);}, 1000);} else {clearInterval(intervalId);}return () => clearInterval(intervalId);}, [isRunning, time]);const start = () => {setIsRunning(true);};const pause = () => {setIsRunning(false);};return {time,start,pause};
    查看6道真题和解析
    点赞 评论 收藏
    分享
    评论
    11
    37
    分享

    创作者周榜

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