腾讯WXG 企业微信 一二面+两轮面委+HR

背景:
双非一本,软件工程大四在读
项目:
1. 分布式的商城管理后台,简单的分布式系统;
2. Spring cloud (nacos + gateway) + security + netty实现的分布式聊天室
实习经历:
2021.4 - 2021.8 腾讯IEG实习
一面

算法(一个小时):

  1. topK,分别写出范围小、范围大、范围超大(说思路)的情况。
答: 分别是计数、快选、分治
  1. 超大数计算,两个长度>100的数字进行加减法, 要考虑负数。
答:很简单,处理好进位借位就行

基础:(半个小时,时间比较短,感觉因为wxg用的是C++, 而我用的是Java,所以问的不多)

  1. 堆和栈的区别是什么,哪一个需要程序员控制?

  2. Java加锁有几种方式?

  3. 不同进程中malloc函数返回的值会是相同的吗?(会,因为有虚拟内存)

  4. 栈和队列在操作系统中有哪些应用场景?(递归和调度)

  5. Java的GC,新和老分别是什么算法?为什么?

  6. TCP和UDP的区别是什么?应用场景是什么?

  7. 你觉得微信聊天中哪些功能是UDP哪些是TCP?(聊天tcp、视频udp)

反问:

  1. 工作地点?(广州)

  2. 能给我一些建议吗?(对于一个知识点要深入挖掘)

二面(一个小时):

算法(40分钟):

  1. 剑指offer原题 1-n中出现了几次1 
答:裂开来,虽然是剑指offer原题但是我没做过,现场推导了一个O(n)的数学法。面试官问有没有更好的方法,我说不会了,再推下去这面试就太久了

基础:(20分钟,我觉得时间短的原因同一面)

  1. Java里HashMap长度为什么是2的幂次?

  2. HashMap如果不给长度,第一次初始化是在什么时候?(put方法里)

  3. 如果让你设计一个线程池,你会考虑什么东西?

  4. 为什么要做一个聊天室?

  5. NIO的buffer区是双向的吗?

  6. 你为什么用nacos,为什么不用eureka?为什么用gateway不用zuul?你怎么思考的?

反问:

一轮面委

基础:

  1. 实习做了什么?遇到过什么难点?是怎么解决的?

  2. 你遇到问题是更喜欢自己找答案还是去问别人?(先自己找答案,实在不行再去问。这样可以告诉别人我做了什么)

  3. 为什么用协程不用线程?(因为协程更轻量级)

  4. 如果你的机器都跑不满,进程和线程和协程又有什么区别?

  5. 线程一定比协程更好吗?

  6. TCP和UDP的区别?

  7. http和https的区别?

  8. https数字证书交换的过程详细说一下?(这里说的有点乱,但是大佬说问题不大)

  9. TCP的accept()函数发生在第几次握手?(大坑我超,直接说是三次握手之后,大佬笑了一下说没坑到我)

  10. 进程调度有哪些算法?(按照批处理、实时、交互式区分了一下)

  11. 那在Linux里调度用了什么算法?(都不是,用的完全公平调度程序CFS) 11.1. 哦?介绍一下CFS?

  12. Linux里进程通信有几种方式?(我刚说:可以分为消息传递模型和共享内存模型,大佬打断说ok了不错不错)

  13. 进程同步有几种方式?

  14. 介绍一下管程?

  15. CAS的原理是什么?(TSL指令,最终会在CPU上会执行LOCK CMPXCHG指令)

算法:

  1. 给你一个数组, 把他变成大顶堆/小顶堆

反问:

  1. 以您的角度,我需要补充什么样的知识?(继续保持挖掘深度的热情,看得出你也比较有想法,要明白一切靠自己)

二轮面委

没有基础面试

算法

  1. 给一个二维数组, arri代表点i -> 点j的距离,从0号点开始出发,遍历每一个点最后回到0号点,每个点只能经过一次,输出最短路径和路径的权值和 
答:经典问题了,最后用哈密顿图解决,不过感觉dij也能做,有兴趣小伙伴可以研究一下。(但是处理输出处理了很久= =)
  1. 某城市有两种颜色的出租车:蓝色和绿色(市场占有比例为15∶85)。一辆出租车夜间肇事后逃逸,但还好当时有一位目击证人,这位目击者认定肇事的出租车是蓝色的。但是,他“目击的可信度”如何呢?公安人员在相同环境下对该目击者进行“蓝绿”测试得到:80%的情况下识别正确,20%的情况不正确。请问可以算出在有目击证人情况下肇事车辆是蓝色的概率为多少? 
答:经典贝叶斯公式,注意识别正确有两种可能,分别是正确识别蓝车和错误识别绿车,最终答案41%
  1. rand5()实现rand3()

  2. rand5()实现rand7()

闲聊环节:

  1. 家住哪?(广州)

  2. 平时花在写代码上的时间多吗?(平均每天一道算法题,外加一下午写项目,如果下午没写完晚上还会写,写完了就打游戏)

反问环节

  1. 您对我有什么建议?(我觉得你很不错,不论是数学还是算法都做的很快,继续保持学习,加油)

HR面

  1. 自我介绍

  2. 实习期间有什么亮点

  3. 实习的时候为什么没有留下

  4. 实习最大的收获是什么

  5. 大一的时候去找老师做项目是自己主动去的吗?

  6. 为什么大一就想去做项目了?

  7. 在简历上你提到带了一个团队,能说说是为什么要带这个团队吗?初衷是什么?

  8. 你觉得自己的优点和缺点是什么?

  9. 家是住在哪里?

  10. 有打算过毕业之前来实习吗?

  11. 手上有其他的offer吗?

反问:

  1. 如果我想去实习,我需要做一些什么准备?

1.24 更新,已oc,准备沟通

1.26 更新,offer到了,定好了入职时间,开始踏入社会第一步

#腾讯##面试题目#
全部评论
啊我前天也是wxy二面,直接先四道算法题。请问大佬面完之后多久hr面的呢?
1 回复 分享
发布于 2022-02-10 10:31
太强了
1 回复 分享
发布于 2022-02-06 22:35
tql,WXG人上人
1 回复 分享
发布于 2022-02-06 17:27
tql
1 回复 分享
发布于 2022-02-04 16:09
大佬,聊天室是怎么写的吗,有没有参考的地址
点赞 回复 分享
发布于 2022-06-11 12:44
大佬校友
点赞 回复 分享
发布于 2022-03-10 20:43
竞赛选手吗
点赞 回复 分享
发布于 2022-02-27 19:10
楼主leetcode刷了多少啊?
点赞 回复 分享
发布于 2022-02-22 17:34
牛逼
点赞 回复 分享
发布于 2022-02-16 21:24
楼主,是内推吗?
点赞 回复 分享
发布于 2022-02-07 00:08
为啥要做这个项目,楼主咋回答的😂
点赞 回复 分享
发布于 2022-02-06 14:53
这就是巨佬吗
点赞 回复 分享
发布于 2022-02-05 04:17
tql
点赞 回复 分享
发布于 2022-02-04 23:35
大佬tql,顺便感觉这个面经好熟悉,大佬之前发过吗?
点赞 回复 分享
发布于 2022-02-04 19:46

相关推荐

1. display: none 和 visibility: hidden 的区别• 渲染层面:◦ display: none:元素完全从渲染树移除,不占据空间(回流+重绘)。◦ visibility: hidden:元素仍在渲染树中,占据空间但不可见(仅重绘)。• 子元素影响:◦ display: none:子元素也会被隐藏。◦ visibility: hidden:子元素可通过 visibility: visible 单独显示。2. 三列布局(两边固定,中间自适应)方案1:Flex 布局.container { display: flex; }.left, .right { width: 200px; }.center { flex: 1; }方案2:Calc 计算.center { width: calc(100% - 400px); margin: 0 200px; }方案3:绝对定位 + margin.container { position: relative; }.left, .right { position: absolute; width: 200px; }.center { margin: 0 200px; }3. 闭包• 定义:函数内部引用外部作用域变量,且变量在外部作用域释放后仍被保留。• 作用:实现私有变量、函数防抖/节流等。• 注意:过度使用可能导致内存泄漏。4. React 状态管理方案及区别方案 特点** useState** 组件级状态,适合简单逻辑。** useContext** 跨组件状态,适合全局轻量级状态(避免逐层传递 props)。** Zustand** 轻量级全局状态管理,基于 Context + immer,支持订阅和模块化。** Redux** 复杂全局状态管理,需手动配置 reducer、action 等,适合大型应用。5. 虚拟列表实现• 核心原理:仅渲染可见区域内的列表项,通过滚动事件动态计算并更新显示内容。• 关键步骤:1. 计算可见区域起始索引和结束索引。2. 渲染对应索引的列表项。3. 通过 transform 或 padding 模拟滚动位置,保持滚动条正常显示。6. React 性能优化• 组件优化:◦ 使用 React.memo 缓存函数组件,避免无必要重渲染。◦ useCallback 缓存回调函数,避免子组件因引用变化重渲染。• 状态优化:◦ 避免在 useState 中存储不必要的状态(如临时计算值)。◦ 使用 useReducer 处理复杂状态逻辑,减少重复更新。• 其他:◦ 虚拟列表/表格(长列表优化)。◦ 懒加载(React.lazy + Suspense)。◦ 避免内联函数在渲染中重复创建。7. React 的状态(补充常见问题)• 状态更新异步性:◦ 合成事件和生命周期中,setState 异步更新,需通过回调获取最新值。◦ 原生事件(如 setTimeout)中,setState 同步更新。• 状态穿透问题:◦ 多层组件传递状态时,可用 useContext 或状态管理库简化。8. 代码题:生成有效括号组合(回溯法)var generateParenthesis = (n) => {const res = [];const backtrack = (path, left, right) => {if (path.length === 2 * n) res.push(path);if (left < n) backtrack(path + '(', left + 1, right);if (right < left) backtrack(path + ')', left, right + 1);};backtrack('', 0, 0);return res;};思路:通过回溯法枚举所有可能,用 left 和 right 控制左右括号数量,确保任意时刻 right ≤ left 且总数不超过 n。
点赞 评论 收藏
分享
一、面试基本情况本次面试主要围绕 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道真题和解析
点赞 评论 收藏
分享
评论
28
193
分享

创作者周榜

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