腾讯前端面经 - 按知识点分类
本文档按技术知识点对腾讯前端面试题目进行分类整理,帮助候选人系统性地复习各个技术领域。
目录
一、网络协议
1.1 TCP相关
- TCP连接中的四次挥手流程是怎样的?
- TCP三次握手的过程是怎样的?
- TCP如何实现可靠传输?
- TCP和UDP的区别是什么?应用场景是什么?
- 你觉得微信聊天中哪些功能是UDP哪些是TCP?
- http2怎么通过streamID实现多路复用?
- 为什么http2不能完全解决队头阻塞,而http3却可以?
1.2 HTTP/HTTPS
- HTTP协议中常见的状态码有哪些,分别代表什么含义?
- HTTP与HTTPS协议有哪些主要区别?
- HTTP/1.0、HTTP/1.1和HTTP/2.0之间有哪些重要的改进和差异?
- HTTP/1.0、HTTP/1.1、HTTP/2之间有哪些主要区别?
- HTTP/2除了多路复用,还有哪些优点?
- HTTP2了解过吗?contentLength了解过吗?
- keepalive模式下为什么需要传contentLength字段?
- HTTP3了解过吗?
- 启用http2需要在nginx中做哪些配置?
- HTTPS数字证书交换的过程详细说一下?
- HTTPS网站证书是怎么获取的?
- 怎么验证权威机构颁发的证书是真的?
- nginx是怎么配置https的?
- https了解过吗?
1.3 浏览器相关
- 描述从浏览器地址栏输入URL到页面完整呈现的整个过程?
- 描述一下浏览器缓存机制?
- 浏览器有哪些常见的缓存策略?
- 介绍一下CDN的工作原理和应用场景?
- 为什么bilibili、百度这些网站的html页面不做缓存?
1.4 WebSocket
- HTTP和WebSocket的区别?
- 实时协作编辑使用什么协议?
- WebSocket怎么建立的?和HTTP的关系
- WebSocket有没有同源限制?
- WebSocket的使用场景(socket.io降级)?
1.5 其他
- 除了HTTP还用过什么应用层协议?
- 解释HTTP请求和响应的过程,以及关键组成部分
二、前端安全
2.1 XSS攻击
- 常见的Web安全攻击有哪些,如何防范跨站脚本攻击(XSS)?
- 前端常见的攻击方式有哪些?
- 针对这些前端攻击,有哪些防范手段?
2.2 CSRF攻击
- Token如何防范CSRF攻击?
- 讲解CSRF
- 前端安全防范措施?xss攻击和csrf攻击?
2.3 其他安全
- JWT相对Cookie在安全性上有什么优势,即便JWT也放在请求头中传输?
- 在前端开发中,如何有效防范常见的安全漏洞,表单验证的最佳实践是什么?
- 有哪些常见的web攻击?ddos攻击怎么防御?
- 为甚么要有同源策略?
- 描述同源策略,以及如何解决跨域问题
三、跨域与缓存
3.1 跨域
- 常见的跨域解决方案有哪些?
- 在实际项目中,你使用过CORS吗?具体应用场景是怎样的?
- 简单请求?跨域?
3.2 缓存
- 解释缓存和缓冲的概念及异同?
- 缓存相关(对比缓存?强缓存?对应请求头)
- cookie有哪些属性?
四、JavaScript基础
4.1 原型与继承
- 说说对OOP的理解
- 在JS中如何实现多重继承?
- 说一下原型链,原型链实现继承
- 如何理解原型链?
4.2 闭包与作用域
- 闭包
- 闭包的理解
- 什么是变量提升
- 说说对闭包的理解
4.3 事件循环
- 分析以下代码,说明其输出结果,并解释JavaScript事件循环机制?
- setTimeout(0)和promise.then()区别
- vue中nextTick的实现,结合浏览器事件循环机制说一下?
- node的事件循环机制?
4.4 ES6特性
- es6中的set(集合)和map(字典)的使用和对应的数据结构
- async和await在es5的浏览器中是怎么实现兼容的?polyfill了解过吗?
- Promise的工作原理,以及与传统回调函数的区别
- 描述一下TypeScript泛型的概念及应用?
4.5 数据类型与方法
- 各种原生方法的使用,基本类型和引用类型
- JS基本数据类型有哪些?
4.6 算法与数据结构
- 排序的实现
- 了解哪些排序算法?
- 说一下快排的实现思路
- 解释快速排序的原理和时间复杂度?
- 数组的sort排序算法
- 快排原理
- 如何实现查找字符串中最长不重复子串的算法?
- 如何将一个扁平化的数组结构转换为树形结构?
- 实现一个LRU缓存机制
五、CSS与渲染
5.1 CSS基础
- bfc布局规则
- 什么是盒模型?
- grid相比flex有哪些优点?
- 新版本的浏览器flex有gap属性吗?
- grid布局怎么处理兼容性?
5.2 性能优化
- 阐述重绘(Repaint)和重排(Reflow)的概念及其对性能的影响?
- 什么情况下会引发重绘?
- SVG与Canvas在渲染机制、性能表现以及各自的潜在优劣方面有何区别?
- 是否使用过Canvas技术进行开发?
5.3 移动端适配
- 项目怎么做的移动端适配?
- flexible原理
- 移动端的1像素问题怎么解决
- 有开发过移动端吗?
- 移动端常见的点击穿透怎么解决?
- css像素比有了解过吗?
- 安卓怎么兼容0.5px边框?
- 如果让你写一个自动转换0.5px边框的loader,该loader能自动将0.5px边框转换成安卓兼容的样式,你会怎么实现,简单说说思路
5.4 其他
- 拖拽功能有实现过吗?
- relative定位和transform都是视觉上的偏移,那他们有什么不一样的地方?
- 访问元素的top属性会不会引起回流?
- 对于这种2d平面的transform动画有没有什么手段开启gpu加速优化它?
六、Vue框架
6.1 Vue基础
- 你熟悉的框架(vue),如何学习框架,vue的特点,vue的生命周期
- Vue的生命周期钩子有哪些?
- 用vue遇到的性能问题
- 在vue项目中如何设置统一的头部字段
6.2 Vue原理
- 介绍一下Vue的内部机制
- Vue 2和Vue3双向绑定原理有何不同?
- Vue 3为何选择使用Proxy实现响应式?
- Vue数据响应式的原理?
- vue中nextTick的实现,结合浏览器事件循环机制说一下?
- 你对Vue源码的理解程度如何?
6.3 虚拟DOM与Diff算法
- 说一下对虚拟DOM的理解
- Diff算法的具体比较过程?
- 怎么看待virtual dom?ast语法树了解吗?
- vue diff?
6.4 计算属性与监听
- vue computed和watch区别?
- computed怎么实现的缓存(dirty)?
6.5 Vue3新特性
- vue3双向数据绑定实现?createRender?
- 和vue2有哪些不同,提到了函数式编程,说下对函数式编程对的理解
6.6 其他
- vue-loader做了哪些事情?
七、工程化与构建工具
7.1 Webpack
- 你对构建工具的理解
- Webpack插件的工作机制是怎样的?
- Webpack的构建工作流程是怎样的?
- 在Webpack中如何实现代码分割?
- 路由懒加载的实现原理是怎样的?
- 如何优化Webpack的打包速度?
- 项目中是否用过哪些loader?plugin?
- 你写的这个插件实现了什么?怎么实现的?
- sourcemap原理知道吗?
7.2 Vite
- 是否使用过Vite?
- Vite为何能够实现更快的开发构建速度?
7.3 其他
- 打包工具都用过哪些?
八、Node.js
8.1 Node基础
- node相关问题,node的事件循环机制?
- stream两种模式的区别?
- 看过koa源码都会觉得和express有很大不同,说一下?
九、小程序
9.1 小程序基础
- 你写过小程序,说下和写vue有什么区别?
- 对小程序的了解?从技术上讲
- 小程序有什么问题或有什么建议?
- 小程序与网页开发的区别
9.2 小程序API
- 小程序中setData会有性能问题?
- jsbridge?
十、其他技术
10.1 微前端
- 看你项目里有写微前端,使用的是哪种微前端框架?
- 微前端对比iframe有哪些优势?
- qiankun框架怎么实现多应用场景下的js隔离?
10.2 PWA与ServiceWorker
- servicework和webwork了解吗?
- work的使用需要做webpack配置吗?
- pwa应用怎么做离线提交?
- 前端有监听断网联网状态的事件有了解过吗?
- localStorage大小是多少?
- 如果前端要持久化图片这种比较大的资源怎么办?
10.3 WebWorker
- 你对Web Worker的理解是什么?
10.4 低代码
- 说说你对低代码的了解
10.5 云原生
- 说说对云原生的理解
10.6 Nginx
- 介绍一下Nginx及其在项目中的应用?
十一、项目与经验
11.1 项目经验
- 介绍一下一个项目经验?
- 在开发个人项目的时候用到了哪些工具?
- 为什么要做这个项目?
- 前后端如何交互?
- 项目中,业务数据的传输形式是什么?
- 项目是如何进行部署的?
11.2 项目优化
- 在项目中具体应用了哪些性能优化方法,这些优化策略是否都是独立思考并实现的?
- 项目中是否实现了分片上传功能?
- 首屏加载时间怎么优化?
- 首屏加载fcp、lcp指标有了解过吗?
- ssr和预渲染有什么区别?
11.3 难点与解决
- 实习做了什么?遇到过什么难点?是怎么解决的?
- 如果程序出现错误,调试思路和解决方法是怎样的?
十二、算法题
12.1 数组与字符串
- 实现一个函数,接受数组作为参数,数组元素为整数或者数组(数组里面还可能有数组),函数返回扁平化后的数组。要求给出不使用递归、不使用字符串处理的解法
- 如:输入 [1, [2, [ [3, 4], 5, []], 6]],输出 [1, 2, 3, 4, 5, 6]
- 假设有一个升序数组,经过不确定长度的偏移,得到一个新的数组,我们称为循环升序数组。(例:[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 并发与请求
- 设计一个函数,用于测试请求一个 URL 的平均耗时。要求可以设置总的请求次数以及并发请求个数。假设环境是小程序,使用的接口是 wx.request ,不考虑请求失败的情况
12.3 动态规划
- 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法
- 爬楼梯
- 打家劫舍 III
- 三数之和的变形题
- 组合问题
- 图相关的题目
12.4 搜索与查找
- 搜索二维矩阵
12.5 字符串处理
- 猴子吃香蕉
- 回文字符串个数(这道题出现频率很高,朋友面试的时候也遇到了,最长回文子字符串)
12.6 树与堆
- 堆和栈的区别,哪一个需要程序员控制?
- 给你一个数组,把他变成大顶堆/小顶堆
12.7 手写题
- 手写bind
- 手写简版promise,基础架子,不用写all、race等api
- 手写代码函数柯里化和数组转树
十三、个人问题
13.1 自我介绍
- 自我介绍一下?
- 自我介绍和项目介绍
13.2 个人评价
- 个人在技术能力或职业发展方面,相较于他人有哪些突出的优势和需要改进的劣势?
- 自我评价一下
- 你觉得有哪些优点?
- 周围人对你的评价
- 你遇到的难题
13.3 学习与成长
- LeetCode刷题数量大概是多少,是否有偏好的题目类型?
- 怎么学习前端的?
- 抗压能力如何?
- 最近在看什么新东西吗?
- 为什么要离职?怎么学习的?
- 你遇到问题是更喜欢自己找答案还是去问别人?
- 平时花在写代码上的时间多吗?
13.4 背景信息
- 方便介绍一下籍贯和教育背景吗?
- 家在哪里?
- 家住哪?
13.5 其他
- 有什么问题想向我们提问吗?
- 有什么问题吗?
- mySQL了解吗?
- 实习周期?
- 平时关注哪些技术论坛?
- 有写技术博客的习惯吗?
- 平时有什么爱好?
- 在访问国外网站时,你遇到过哪些问题?你是如何解决的?
