转眼到了研二找实习工作的时候,因为项目的原因,并没有好好复习,从 3 月初开始准备投递简历到 5 月底入职实习公司,实在是非常累同时也收获很大的一段时间。
春招历程
公司名称 | 部门 | 方式 | 技术面次数 | 起止时间 |
---|---|---|---|---|
腾讯 | 腾讯云 | 电话 | 1 | 3-12 |
阿里 | 蚂蚁 | 电话 | 2 | 3-13/19 |
腾讯 | TEG | 电话 | 1 | 3-22 |
携程 | 旅游部 | 线下 | 1 | 3-24 |
搜狗 | 社区搜索 | 视频 | 1 | 3-27 |
链家 | - | 线下 | 2 | 3-28 |
腾讯 | QQ 钱包 | 电话+线下 | 3 | 3-29/4-17 |
头条 | PGC | 视频 | 3 | 3-31 |
作业帮 | 未知 | 线下 | 1 | 4-4 |
京东 | 无界零售 | 线下 | 2 | 4-20 |
百度 | - | 视频 | 3 | 4-22 |
猿辅导 | - | 视频 | 1 | 4-25 |
阿里 | - | 视频 | 2 | 5-27 |
面试记录
腾讯一面(腾讯云)
- 没有自我介绍,直接开始问基础
- es6,
let
和var
的区别 - 箭头函数,
this
指针 null
和undefined
的区别- 把字符型数字转换成数字,都有哪些方法
call
和apply
的区别Array
都有哪些方法- 如何复制对象,深拷贝/浅拷贝,如何复制数组
- 浏览器端都有什么实现异步的操作,nodejs 端又有哪些
setTimeout
,setInternal
,Promise
,async
/await
,requestAnimation(原理)- process.nextTick,…
Promise
和setTimeout
的区别,执行优先级- html5 的新特性, perform
- 如何查询 dom 元素,如何添加 dom 元素
- 重绘和重排,如何避免重排
- web 安全,sql 注入,xss,csrf,如何防止
- css 都有哪些选择器,它们的优先级(id,类,tag…)
- history的实现方式
- react 的生命周期
- js 事件捕获和冒泡,如何阻止
- 如何阻止默认行为(
e.preventDefault
),IE 在这方面有何区别 - 跨域的实现方式,简述 jsonp、cors
- 浏览器缓存机制
- http2 的新特性
- https 与 http 的区别
- http 状态码,304,403
- sql 查询的左连接和右连接有何区别
- 看过什么源码,学习前端的方式有哪些
阿里(蚂蚁金服)
一面
- 自我介绍
- 挑一个印象最深的项目介绍一下
- 在其中负责什么角色
- 有什么技术难点
- 题目:npm 本地化,如给定 100 个 npm 包名,如何下载所有的依赖包(先解析依赖,缓存,并发 )
- 前后端数据交互的方法
- Git
merge
和rebase
有什么区别,各自的适用场景,如果有一个主分支和两个 checkout 出的功能分支,一个先合并,另一个应该用merge
还是rebase
- Webpack、Gulp、Grunt 的区别,为什么要用这些东西
call
,bind
,apply
的区别及为什么要用这些- CSS
position
的属性值及各自含义 - React render 如果
<A><B/></A>
,A
的props
发生变化,B
是否会rerender
,如何避免 - 开放性问题:如何看待前端,为什么选择前端
- 开放性问题:平时学习前端的方式
二面
- 自我介绍
- 项目技术栈
- 项目技术难点,如何解决的
- dva 中为什么用
generator
/yield
而不是async
/await
- vue / vuex 相关问题,有没有用过 vuex 插件
- 有没有写过自动化发布测试的代码
- 最近看的技术文章,详细说一下
腾讯一面(TEG)
- 自我介绍
- 项目介绍
- 项目负责内容,技术难点,选型理由
- Webpack、Gulp
- React 自己封装过的组件
- Web 安全问题及应对方法
- Spring 相关
- 有没有看过 Spring 源码
- Servlet + JSP 存在的问题
- 项目首页加载时间,太慢存在的问题,如何优化
- 跨域,JSONP,如何支持 PUT 方法(Spring 配置响应头)
搜狗一面(社区搜索)
- 自我介绍
- 项目难点介绍
- jQuery 链式调用
['1', '10', '100'].map(parseInt)
- 组合继承(
Animal<-Cat
, 主要考察普通原型继承constructor
被覆盖) - React 和 Vue 的区别
- Webpack 了解多少
- React 和 Vue 是如何实现解析
.jsx
和.vue
的
链家网
一面
- DOM0/1/2/3 的事件使用区别,捕获和冒泡
- string 如何拼接
- 写一个事件代理
- 写一个布局的 css,实现水平和垂直居中
- 重绘和重排
arguments
的callee
和caller
- 简单说了项目用到的技术
- url 的组成部分,并且改变是否会引起页面刷新
- history 和 hashtag 在 SPA 中的应用
- 平时怎么学习 js 的
二面
- 项目中遇到的难点
- 移动端 h5 中如何识别手机设备信息,查到的一种方法
- 一个数组,找出其中重复次数大于 2 的元素的个数
腾讯(QQ 钱包)
一面
- 自我介绍
- 聊项目
- 问基础
- 闭包
- DOM 事件三个阶段
- Web 安全,如何防范
- 前后端数据通讯方式
- 浏览器输入 url 之后…
- 如何突破浏览器请求并发限制
setTimeout
和requestAnimationFrame
的区别- Http 2 如何实现多路复用
- es6 的
let
和const
,和var
有什么区别 - React 和 Vue 的异同点
- 如何实现事件代理
- 什么是执行上下文
- 算法:斐波那契数列
- es6 箭头函数有何不同
二面(线下)
- 自我介绍
setTimeout
和setInterval
和requestAnimationFrame
- 重排/重绘,及如何避免
- 优化:动画掉帧/卡顿如何优化
- 优化:一个页面全是图片,有很多,如何优化
- 优化:页面加载如何优化
- 了解 Service Worker 吗,和 PWA 有什么关系
- 脚本加载方式
async
和defer
的区别 - Web Worker 使用场景
- 双向绑定是如何实现的
- 看过 React 和 Vue 源码吗,哪部分
- 写博客吗
- 有没有开源的东西
三面(线下)
- 自我介绍
- 项目介绍,技术难点,解决方案
- 闭包
- Webpack、Gulp、Grunt 区别
- 最近学习的技术
- Linux 了解吗,bash
- zookeeper 一致性怎么实现的
- 为什么用 Oracle / Mysql / Mongodb 等数据库
- mongodb 数据太大内存放不下怎么办
- Web 安全及在项目中如何实践的
- 移动端如何适配
- 开发过微信小程序吗
- React / Vue 在项目中的实践
- Nodejs 了解吗
- 解决过浏览器兼容性问题吗
- 大数据/高并发等场景下的性能优化(这块很弱)
- 开放性问题:淘宝和京东是如何盈利的
- 开放性问题:如果一个城市要建加油站,会如何考虑
- 开发性问题:全世界人喝的啤酒能否灌满青海湖
今日头条
一面
- 实现一个左边定宽。右边自适应的布局
- 原生
XMLHttpRequest
怎么使用 x => x
,x => {x}
,x => ({x})
,分别以参数 1 调用,输出是什么- 算法:求一个二叉树的深度
- 纯 CSS 实现一个三角形
- 上传文件
FormData
,还有什么 MIME 类型 - 事件代理
- 捕获、冒泡
- 项目中的难点
async
/defer
的区别- 微信网页版登录如何实现的
二面
- 自我介绍
- 项目难点
- React v-dom
- 算法:驼峰命名的字符串转换为一个连字符命名的字符串
cookie
和session
的区别,http-only
- React 组件生命周期
- Layout(reflow) 和 Paint(repaint),分别如何优化
- 前后端通信方式
- DNS 解析过程
- 项目部署方式
- 算法:实现一个图的
getDepth(start, depth)
,找出起点开始深度为depth
的点集合
三面
- 自我介绍
- 算法:dijkstra
- 业务逻辑 / 业务抽象 / 现有技术实现,从这三个层面说一下自己的经验
- 有什么让你自豪的项目
- 写过 webpack 插件吗
作业帮一面
- 画一个布局:
<div class="A"><div class="B"></div></div>
,.A {width: 100px; height: 100px; margin: 50px;} .B {width: 50px; height: 50px; margin: 100px;}
- 左右定宽,中间自适应的布局
alert(a); var a = 12; function a() { return a; }
的输出结果- JSON 对象转 JSON 字符串
- 两个有序数组,不使用循环实现归并
- 两个数组,找出其中交集的唯一元素,如
[1,1,2,3],[1,2]
=>[1,2]
京东(无界零售)一二面
- 项目介绍
- 画项目页面示意图并介绍
- jQuery 和 React、Vue 的区别
- Vue 组件的生命周期
- Vue
computed
和watch
的区别 computed
是如何实现的- Webpack、Gulp、Grunt 的区别
- 如何实现一个树形组件(懒加载/性能)
- CSS 如何实现三角形
- React/Vue DOM-diff 算法
- React 和 Vue 是如何实现的,有何优点
- 缓存
- 如何使 CDN 上的缓存失效
百度
一面
- http 常用状态
get
post
的区别- 前端存储
localStorage
能存储对象数据吗- 语义化标签/好处
- 如何阻止
a
标签跳转 - 隐藏页面元素的方法
- css 实现三角形
- 数组添加、删除、替换元素
- 事件代理
- 同源策略
- 跨域解决方案
jsonp
原理- js 原生动画
- es6 语法用过哪些
const
和var
区别- 箭头函数的
this
- 如何避免嵌套回调
Promise.all
(参数是什么,返回和参数一致吗)- 编写函数检验是否为数组
- 写个正则校验 `xx@baidu.com`
- nodejs 用过吗
require
是如何找模块的- nodejs 子进程是什么原理
- 了解的前端框架、类库,优缺点
- react 中父子/同级组件传递数据
- diff 策略
- 生命周期
- 发请求在哪个周期
- 工程化工具
- 百度开源 FIS 了解吗
- 项目周期一般多久/多少人参与
- 开发过 SPA 吗,好处是什么
- 代码调试思路
- 学习新技术的途径
二面
- 自我介绍
- 项目介绍
- Vue 的
vue-loader
是做什么的 computed
是如何实现的- 编程:实现一个函数
getTop3Tag
获取当前页面内出现次数最多的3
个标签名称 - 编程:实现一个函数
getQuery
获取并解析当前页面的查询字符串 - 编程:实现一个函数
log
,能够在控制台输出内容时在前面加一个'mylog:'
- 读程:各种循环 +
setTimeout
的输出,就是考察循环中异步的闭包,最后一个加了Promise
,有一段答错了(见下面的代码块) - 了解移动端开发吗(说不了解,只做过微信公众号里的页面开发)
weui
的checkbox
那种开关按钮是如何实现的- 平时开发用什么操作系统(Window/Linux)
- 了解 Linux 系统吗,都知道什么
- 两列布局如何实现,左侧定宽,右侧自适应(双飞翼和圣杯)
- CSS 常用选择器及其优先级
1 | for (var i = 0; i < 5; i++) { |
三面
- 介绍一个项目
- 项目难点及如何解决的
- 如何看待前端
- 如何学习新技术
- 最近有了解到什么新技术
- 有什么兴趣爱好,如何平衡工作和生活
- 如何看待
native
开发和hybrid
开发
猿辅导一面
- 自我介绍
- 项目介绍,难点
- React、Vue、Angular 的区别
- Vue 双向绑定如何实现的
- Spring Boot Data Rest 权限是如何控制的
- 编程:
"a bc d"
->"a1bc2d"
- 编程:
"todAY baR"
->"rab YadoA"
- 编程:已有
fetchUrl(url, callback)
,编写batchFetchUrl(urlList, callback)
阿里一面
- 自我介绍
- Promise
async
/await
- 阿里的前端开源产品有哪些了解
- 飞冰
- 浏览器工作原理
- rn 的架构
- weex 中支持 rn 的原理
小结
问题偏好一般也会跟简历内容有关,尤其是项目,要注意从背景、问题、对比方案、解决方案、选择理由、使用效果等几方面来说。
腾讯
特别喜欢问优化,尤其是 Web 图片优化。需要对缓存,http2,cdn 等特别了解。熟悉前端优化的常用手段等。
阿里
偏向问工程化,工具链,项目难度和解决方案等。
百度
非常注重基础,问的很细。
今日头条
每面都有两个算法题,前端的算法到简单 dp 已经封顶了,不会特别难。大多是跟数据结构有关,尤其是二叉树。