Skip to content

腾讯前端面经 - 按知识点分类

本文档按技术知识点对腾讯前端面试题目进行分类整理,帮助候选人系统性地复习各个技术领域。


目录


一、网络协议

1.1 TCP相关

  1. TCP连接中的四次挥手流程是怎样的?
  2. TCP三次握手的过程是怎样的?
  3. TCP如何实现可靠传输?
  4. TCP和UDP的区别是什么?应用场景是什么?
  5. 你觉得微信聊天中哪些功能是UDP哪些是TCP?
  6. http2怎么通过streamID实现多路复用?
  7. 为什么http2不能完全解决队头阻塞,而http3却可以?

1.2 HTTP/HTTPS

  1. HTTP协议中常见的状态码有哪些,分别代表什么含义?
  2. HTTP与HTTPS协议有哪些主要区别?
  3. HTTP/1.0、HTTP/1.1和HTTP/2.0之间有哪些重要的改进和差异?
  4. HTTP/1.0、HTTP/1.1、HTTP/2之间有哪些主要区别?
  5. HTTP/2除了多路复用,还有哪些优点?
  6. HTTP2了解过吗?contentLength了解过吗?
  7. keepalive模式下为什么需要传contentLength字段?
  8. HTTP3了解过吗?
  9. 启用http2需要在nginx中做哪些配置?
  10. HTTPS数字证书交换的过程详细说一下?
  11. HTTPS网站证书是怎么获取的?
  12. 怎么验证权威机构颁发的证书是真的?
  13. nginx是怎么配置https的?
  14. https了解过吗?

1.3 浏览器相关

  1. 描述从浏览器地址栏输入URL到页面完整呈现的整个过程?
  2. 描述一下浏览器缓存机制?
  3. 浏览器有哪些常见的缓存策略?
  4. 介绍一下CDN的工作原理和应用场景?
  5. 为什么bilibili、百度这些网站的html页面不做缓存?

1.4 WebSocket

  1. HTTP和WebSocket的区别?
  2. 实时协作编辑使用什么协议?
  3. WebSocket怎么建立的?和HTTP的关系
  4. WebSocket有没有同源限制?
  5. WebSocket的使用场景(socket.io降级)?

1.5 其他

  1. 除了HTTP还用过什么应用层协议?
  2. 解释HTTP请求和响应的过程,以及关键组成部分

二、前端安全

2.1 XSS攻击

  1. 常见的Web安全攻击有哪些,如何防范跨站脚本攻击(XSS)?
  2. 前端常见的攻击方式有哪些?
  3. 针对这些前端攻击,有哪些防范手段?

2.2 CSRF攻击

  1. Token如何防范CSRF攻击?
  2. 讲解CSRF
  3. 前端安全防范措施?xss攻击和csrf攻击?

2.3 其他安全

  1. JWT相对Cookie在安全性上有什么优势,即便JWT也放在请求头中传输?
  2. 在前端开发中,如何有效防范常见的安全漏洞,表单验证的最佳实践是什么?
  3. 有哪些常见的web攻击?ddos攻击怎么防御?
  4. 为甚么要有同源策略?
  5. 描述同源策略,以及如何解决跨域问题

三、跨域与缓存

3.1 跨域

  1. 常见的跨域解决方案有哪些?
  2. 在实际项目中,你使用过CORS吗?具体应用场景是怎样的?
  3. 简单请求?跨域?

3.2 缓存

  1. 解释缓存和缓冲的概念及异同?
  2. 缓存相关(对比缓存?强缓存?对应请求头)
  3. cookie有哪些属性?

四、JavaScript基础

4.1 原型与继承

  1. 说说对OOP的理解
  2. 在JS中如何实现多重继承?
  3. 说一下原型链,原型链实现继承
  4. 如何理解原型链?

4.2 闭包与作用域

  1. 闭包
  2. 闭包的理解
  3. 什么是变量提升
  4. 说说对闭包的理解

4.3 事件循环

  1. 分析以下代码,说明其输出结果,并解释JavaScript事件循环机制?
  2. setTimeout(0)和promise.then()区别
  3. vue中nextTick的实现,结合浏览器事件循环机制说一下?
  4. node的事件循环机制?

4.4 ES6特性

  1. es6中的set(集合)和map(字典)的使用和对应的数据结构
  2. async和await在es5的浏览器中是怎么实现兼容的?polyfill了解过吗?
  3. Promise的工作原理,以及与传统回调函数的区别
  4. 描述一下TypeScript泛型的概念及应用?

4.5 数据类型与方法

  1. 各种原生方法的使用,基本类型和引用类型
  2. JS基本数据类型有哪些?

4.6 算法与数据结构

  1. 排序的实现
  2. 了解哪些排序算法?
  3. 说一下快排的实现思路
  4. 解释快速排序的原理和时间复杂度?
  5. 数组的sort排序算法
  6. 快排原理
  7. 如何实现查找字符串中最长不重复子串的算法?
  8. 如何将一个扁平化的数组结构转换为树形结构?
  9. 实现一个LRU缓存机制

五、CSS与渲染

5.1 CSS基础

  1. bfc布局规则
  2. 什么是盒模型?
  3. grid相比flex有哪些优点?
  4. 新版本的浏览器flex有gap属性吗?
  5. grid布局怎么处理兼容性?

5.2 性能优化

  1. 阐述重绘(Repaint)和重排(Reflow)的概念及其对性能的影响?
  2. 什么情况下会引发重绘?
  3. SVG与Canvas在渲染机制、性能表现以及各自的潜在优劣方面有何区别?
  4. 是否使用过Canvas技术进行开发?

5.3 移动端适配

  1. 项目怎么做的移动端适配?
  2. flexible原理
  3. 移动端的1像素问题怎么解决
  4. 有开发过移动端吗?
  5. 移动端常见的点击穿透怎么解决?
  6. css像素比有了解过吗?
  7. 安卓怎么兼容0.5px边框?
  8. 如果让你写一个自动转换0.5px边框的loader,该loader能自动将0.5px边框转换成安卓兼容的样式,你会怎么实现,简单说说思路

5.4 其他

  1. 拖拽功能有实现过吗?
  2. relative定位和transform都是视觉上的偏移,那他们有什么不一样的地方?
  3. 访问元素的top属性会不会引起回流?
  4. 对于这种2d平面的transform动画有没有什么手段开启gpu加速优化它?

六、Vue框架

6.1 Vue基础

  1. 你熟悉的框架(vue),如何学习框架,vue的特点,vue的生命周期
  2. Vue的生命周期钩子有哪些?
  3. 用vue遇到的性能问题
  4. 在vue项目中如何设置统一的头部字段

6.2 Vue原理

  1. 介绍一下Vue的内部机制
  2. Vue 2和Vue3双向绑定原理有何不同?
  3. Vue 3为何选择使用Proxy实现响应式?
  4. Vue数据响应式的原理?
  5. vue中nextTick的实现,结合浏览器事件循环机制说一下?
  6. 你对Vue源码的理解程度如何?

6.3 虚拟DOM与Diff算法

  1. 说一下对虚拟DOM的理解
  2. Diff算法的具体比较过程?
  3. 怎么看待virtual dom?ast语法树了解吗?
  4. vue diff?

6.4 计算属性与监听

  1. vue computed和watch区别?
  2. computed怎么实现的缓存(dirty)?

6.5 Vue3新特性

  1. vue3双向数据绑定实现?createRender?
  2. 和vue2有哪些不同,提到了函数式编程,说下对函数式编程对的理解

6.6 其他

  1. vue-loader做了哪些事情?

七、工程化与构建工具

7.1 Webpack

  1. 你对构建工具的理解
  2. Webpack插件的工作机制是怎样的?
  3. Webpack的构建工作流程是怎样的?
  4. 在Webpack中如何实现代码分割?
  5. 路由懒加载的实现原理是怎样的?
  6. 如何优化Webpack的打包速度?
  7. 项目中是否用过哪些loader?plugin?
  8. 你写的这个插件实现了什么?怎么实现的?
  9. sourcemap原理知道吗?

7.2 Vite

  1. 是否使用过Vite?
  2. Vite为何能够实现更快的开发构建速度?

7.3 其他

  1. 打包工具都用过哪些?

八、Node.js

8.1 Node基础

  1. node相关问题,node的事件循环机制?
  2. stream两种模式的区别?
  3. 看过koa源码都会觉得和express有很大不同,说一下?

九、小程序

9.1 小程序基础

  1. 你写过小程序,说下和写vue有什么区别?
  2. 对小程序的了解?从技术上讲
  3. 小程序有什么问题或有什么建议?
  4. 小程序与网页开发的区别

9.2 小程序API

  1. 小程序中setData会有性能问题?
  2. jsbridge?

十、其他技术

10.1 微前端

  1. 看你项目里有写微前端,使用的是哪种微前端框架?
  2. 微前端对比iframe有哪些优势?
  3. qiankun框架怎么实现多应用场景下的js隔离?

10.2 PWA与ServiceWorker

  1. servicework和webwork了解吗?
  2. work的使用需要做webpack配置吗?
  3. pwa应用怎么做离线提交?
  4. 前端有监听断网联网状态的事件有了解过吗?
  5. localStorage大小是多少?
  6. 如果前端要持久化图片这种比较大的资源怎么办?

10.3 WebWorker

  1. 你对Web Worker的理解是什么?

10.4 低代码

  1. 说说你对低代码的了解

10.5 云原生

  1. 说说对云原生的理解

10.6 Nginx

  1. 介绍一下Nginx及其在项目中的应用?

十一、项目与经验

11.1 项目经验

  1. 介绍一下一个项目经验?
  2. 在开发个人项目的时候用到了哪些工具?
  3. 为什么要做这个项目?
  4. 前后端如何交互?
  5. 项目中,业务数据的传输形式是什么?
  6. 项目是如何进行部署的?

11.2 项目优化

  1. 在项目中具体应用了哪些性能优化方法,这些优化策略是否都是独立思考并实现的?
  2. 项目中是否实现了分片上传功能?
  3. 首屏加载时间怎么优化?
  4. 首屏加载fcp、lcp指标有了解过吗?
  5. ssr和预渲染有什么区别?

11.3 难点与解决

  1. 实习做了什么?遇到过什么难点?是怎么解决的?
  2. 如果程序出现错误,调试思路和解决方法是怎样的?

十二、算法题

12.1 数组与字符串

  1. 实现一个函数,接受数组作为参数,数组元素为整数或者数组(数组里面还可能有数组),函数返回扁平化后的数组。要求给出不使用递归、不使用字符串处理的解法
    • 如:输入 [1, [2, [ [3, 4], 5, []], 6]],输出 [1, 2, 3, 4, 5, 6]
  2. 假设有一个升序数组,经过不确定长度的偏移,得到一个新的数组,我们称为循环升序数组。(例:[0,3,4,6,7] 可能变成 [6,7,0,3,4])。给定一个数字和一个循环升序数组,判断这个数字是否在这个数组内,在的话返回 true,否则返回 false。要求时间复杂度 O(logN)
    • 示例1:输入:nums = [6,7,0,3,4], target = 0,输出:true
    • 示例2:输入:nums = [6,7,0,3,4], target = 2,输出:false

12.2 并发与请求

  1. 设计一个函数,用于测试请求一个 URL 的平均耗时。要求可以设置总的请求次数以及并发请求个数。假设环境是小程序,使用的接口是 wx.request ,不考虑请求失败的情况

12.3 动态规划

  1. 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法
  2. 爬楼梯
  3. 打家劫舍 III
  4. 三数之和的变形题
  5. 组合问题
  6. 图相关的题目

12.4 搜索与查找

  1. 搜索二维矩阵

12.5 字符串处理

  1. 猴子吃香蕉
  2. 回文字符串个数(这道题出现频率很高,朋友面试的时候也遇到了,最长回文子字符串)

12.6 树与堆

  1. 堆和栈的区别,哪一个需要程序员控制?
  2. 给你一个数组,把他变成大顶堆/小顶堆

12.7 手写题

  1. 手写bind
  2. 手写简版promise,基础架子,不用写all、race等api
  3. 手写代码函数柯里化和数组转树

十三、个人问题

13.1 自我介绍

  1. 自我介绍一下?
  2. 自我介绍和项目介绍

13.2 个人评价

  1. 个人在技术能力或职业发展方面,相较于他人有哪些突出的优势和需要改进的劣势?
  2. 自我评价一下
  3. 你觉得有哪些优点?
  4. 周围人对你的评价
  5. 你遇到的难题

13.3 学习与成长

  1. LeetCode刷题数量大概是多少,是否有偏好的题目类型?
  2. 怎么学习前端的?
  3. 抗压能力如何?
  4. 最近在看什么新东西吗?
  5. 为什么要离职?怎么学习的?
  6. 你遇到问题是更喜欢自己找答案还是去问别人?
  7. 平时花在写代码上的时间多吗?

13.4 背景信息

  1. 方便介绍一下籍贯和教育背景吗?
  2. 家在哪里?
  3. 家住哪?

13.5 其他

  1. 有什么问题想向我们提问吗?
  2. 有什么问题吗?
  3. mySQL了解吗?
  4. 实习周期?
  5. 平时关注哪些技术论坛?
  6. 有写技术博客的习惯吗?
  7. 平时有什么爱好?
  8. 在访问国外网站时,你遇到过哪些问题?你是如何解决的?

Released under the MIT License.