阿里 & 腾讯春招前端实习面经
从3月19日开始面,现在也算是为我的春招之路留下一个句号了。春招没有投很多公司,只投了阿里和腾讯,不过一起也经历过十几次面试吧,希望能给各位带来一些帮助。
背景:双非大三,有一段在字节的实习经历。
下面很多都是面完才想起来的,可能有一些遗漏吧,但是可以说个大体方向。
腾讯
wxg 开平
一面
- 上来4道算法,感觉都是简单到中等难度吧。
- dom 相关,问的挺多的,感觉比较全面吧
- script 标签解析会阻碍页面加载吗
- 输入一段 url 后的相关流程,然后引出去计网相关的
- 富文本编辑器传入 img 怎么处理
- 跨域和相关解决方案
- xss 相关
- csrf 相关
- 项目中最大的挑战
二面(挂)
上来先做三道题,一个版本号比较,一道两数之和要求 O(n) 复杂度,一道leetcode 670: 最大交换。
- 在字节的经历
- http/https 相关
- http2的优点和缺点,如何解决
- http3是怎么解决的
- quic 协议原理能说下吗
- react 的渲染流程,diff 算法
- 如何实现组件 darkmode 模式
其实都答出来了,但是说的答案没有表达很清楚,后面问了下原因果然是表达上的问题,555。
PCG 腾讯视频
一面
- 在字节的实习经历
- 原型和原型链相关
- 实现一个 new 操作符
- 箭头函数和普通函数的区别
- ES6 新特性有哪些
- 变量提升和暂时性死区的关系
- 事件循环,我这里说了 Node端和浏览器端的不同,然后宏任务和微任务在 Node 11 后的改变,面试官好像对这个很感兴趣,叫我细说了下。
- 跨域相关
- 浏览器的预检请求,怎么判断检验成功
- 简单请求和复杂请求的区别
- 强缓存协商缓存
- cookie的字段有哪些,大小限制
- xss
- csrf
- 三次握手
- 一道算法题:带小数的大数相加
二面(挂)
- 实习经历
- 数据库范式
- 数据库分表原则
- 详细说一下 nat 协议
- 说一下你了解的排序方法,详细说一下基数排序和桶排序
- UDP如何实现可靠传输(还是 quic 那套)
- 详细说一下ARP协议,ARP病毒
数据库分表原则完全没复习。。其余还好,总共没面到 30 min,还是挂了,感觉有点莫名,害。
CSIG 腾讯云(offer)
一面
- 三道题,一道扁平化数组,一道实现向 url 添加 query 参数,一道实现数据 Camel 和 Pascal 命名规范的转换(需要优化代码,具体往生成二次函数那样去写)
- 400状态码一般是什么问题,如何排查错误
- session 是什么,有什么缺点
- cookie的字段,cookie 中 domain 的作用,有哪些场景(我答的单点登录)
- token 相关
- 跨域相关
- 简单请求和复杂请求的区别
- 事件捕获和事件冒泡,区别和各自执行的时机
二面
- 上来做了五道题(请叫我做题家哈哈),题还是挺简单的
第一题判断打印顺序async function async1() { console.log('async1 start') // 2 await async2() console.log('async1 end') // 6 } async function async2() { console.log('async2') // 3 } console.log('script start') // 1 setTimeout(() => { console.log('setTimeout') // 8 }, 0) async1() new Promise((resolve) => { console.log('promise 1') // 4 resolve(1) }).then(() => { console.log('promise 2') // 7 }) console.log('script end') // 5
第二题是根据数组创建链表
第三题根据之前的链表查找距离末尾 k 距离的节点
第四题是实现一个可以重复调用指定回调的函数,传入参数为回调函数,执行次数,间隔时间。
第五题是 leetcode 154. 寻找旋转排序数组中的最小值 II - 前端安全(xss,csrf,sql注入)
- 一个网站能获取能获取另一网站 cookie 吗
- 服务端劫持了 token 怎么做防御
- 服务端反爬虫
- 服务端跨域应该如何设置
- Node 和 JAVA 的区别,Node 是怎么控制操作系统的
- JS 为什么要是单线程,有什么好处
- 既然 JS 是单线程,那么面对网络请求的时候为什么能异步处理
- 进程和线程的区别
- 进程间通信方式
- 使用装饰器的好处
- Mixins 和 装饰器的不同,Mixins 的缺点
- Aop 编程的好处
- fiber 了解吗,具体说下
- react 内部对渲染做了哪些优化,相对于以前和现在
- react现在有哪些阶段
- 如果在 diff 的时候又修改的值,react 会怎么做
三面
- 如何学习前端的
- js 闭包的用途
- 前端产生随机数,Math.random 一个 5-10
- pv和uv是什么
- serverless和传统后台的区别,好处是什么
- Fass 架构
- 前端监控相关
- 前端异常捕获上报
- 如何实现埋点上传
- 埋点使用什么请求,为什么
- 前端如何做防盗链
- 反问
四面
- css 中的颜色单位
- 16进制颜色对应多少字节,如果 32 位 的呢
- 负载均衡说一下
- 如果要实现负载均衡,需要注意什么
- 如果 Node 要在后端更新文件,如何安全更新
- 进程守护需要注意什么
- pm2 原理
- 三握四挥
- 挥手后 tcp 连接能复用吗,说下原因
- 能马上复用吗,有什么注意点
- 应该算是算法吧,这里简单概括一下,输入 n ,每次减一或减二,有几种方案
- typescript 新版本有哪些特性
- 写一个工具函数,获取某个函数的第二个参数类型:
type Tool<T> = T extends (...args: [any, infer U, ...any[]]) => any ? U : never export function fun(a: string, b: number) {} type B = Tool<typeof fun>
- 反问
hr面
- 学校学了什么
- 为什么离开字节
- 字节经历
- 在字节学到了什么,最大挑战
- 最大缺点
- 考研吗
- 还有其他的offer吗
- 阿里和腾讯你选择哪个
阿里
达摩院云小蜜
总的来说考的都挺基础的,一二面都是考基础,算法貌似没怎么考过,三四面都是个人经历拓展出去的
一面
- 上来先做三道题笔试,一道 flex 布局相关,一道 url 解析,一道 version 版本解析,很基础
- CSS 优先级
- 跨域相关
- jsonp 实现,有什么缺陷
- 三种 css 引入方式的优先级
- 知道事件代理吗,什么时候要用到?(说了下概念,哪些事件不推荐做事件代理,哪些事件无法做事件代理,e.currentTarget 和 e.target 区别啥的)
- 如何让一个div变为可聚焦(加 tabIndex 属性)
- 网络安全(sql注入,xss,csrf)
- 如何预防 xss,要渲染富文本 react 的 xss 问题怎么办(解析 url,判断白名单,或者手写编译器,类似 babel 运行时解析,再用 React.createElement 创建元素)
- react diff
- key 的作用(不用 key 也能渲染,只是每次都需要比对 fiber 节点,有 key 就走 key )
- 浏览器缓存
- https流程
- 最近关注的技术(webpack5,vite)
- webpack5 的新特性
- vite 为什么这么快(大致说了使用 esbuild 开发,然后服务端对浏览器的网络请求做了映射,在服务端动态解析路径和模块之类的)
- 反问
二面
- 介绍自己
- 在字节的经历,学到了什么
- 做了哪些 code review
- 如果有很多if else,怎么优化
- JSON.stringify 的深度用法,如何美化输入(顺便拓展了一下前端做文本点击复制时如果复制 JSON.stringify 转换的文本不能使用 Input 而应该是 textarea)
- 对象删除元素应该怎么做(说了下 delete 和 Reflect,具体的区别)
- 什么是函数式编程,对函数式的理解
- 纯函数的概念,好处和用途
- 如何删除数组指定索引元素,过滤等(比较基础,拓展了一下 immutable 与 mutable 之类的)
- Promise相关实例和静态方法的概念,如何在 Promise.all 失败的时候判断是哪个失败的
- 拿到对象的 key 有哪些方法,使用 for...in 和 Object.keys 有什么不同
- vue 和 React 的区别
- React 生命周期
- useEffect 主要的用途,在项目中的使用场景
- react hooks 性能优化
- react 的数据流方案(简易数据流方案 useContext + createContext + useImmer,状态管理库:rematch、recoil 这些)
- 不同的数据应该怎么存储(全局共享放在Context,组件内部放 State)
- 前端存储(主要说了 Cookie、IndexedDB、LocalStorage、SessionStorage 这些)
- Cookie 和 LocalStorage 的区别
- Node 如何分层合理一些(后端那套吧)
- 什么是 IOC 机制,如何在 Node 里面使用(按照 nest.js 的思路答的,MVC + IOC + 元编程)
- 前端性能优化(做个思路梳理,网络 -> html -> css -> js -> 打包优化)
- 反问
三面
大部分都是个人经历强相关了,主要是在实习和学校的一些经历,然后说了下目前的开源项目和自己的项目以及规划啥的,就不展开说了。
四面
- 为什么会选择前端
- 介绍字节实习
- 如何设计一个项目的国际化功能
- 你认为 node.js,vue,react 各种出现的原因和各自优缺点是啥
- 实习遇到的最大的困难
- devops 流程是怎么样的,如何制作一个原子服务
- 最大的缺点
hr面(挂)
具体分为三类吧,没问多的,叫我介绍了一下实习,学校和打比赛的相关事情,然后挂了555,感觉学历那是个短板吧,可能横向比较了。
达摩院视觉实验室(已 oc)
上一个部门被挂后然后十分钟被捞起来了,貌似因为前面的技术面的比较好,接着上面的流程继续面,只加了一个技术和一个hr面。
一面
- 字节经历详细说
- 你怎么看待跨端框架的
- 如何实现国际化
- 如何实现 darkmode
- 离线化的具体原理
- 网络 5层 osi 7层
- http之上的协议有哪些
- 平时会在哪里学习技术,看哪些资料
- 最近关注的技术,细说一个你比较了解的
hr面
- 自我介绍
- 从大一到大三的前端经历,学习感悟
- 为什么不考研
- 还有其他 offer 吗
做个总结吧,其实面试题大都大同小异,都是考察计网、操作系统这些和前端相关的一些知识,可以发现有很多面试题实际都出现过很多次,感觉可以重点针对这部分进行复习。实际上我在回答相同问题的时候都会从上一次问题中吸取经验,然后结合面试官的一些意见进行优化。面试失败不要紧,面试本来就是一个成长的过程,保持心态,最后都会有不错的收获的。
最后,春招就要结束了,祝大家都能收获自己满意的 offer ~~。