整理了一下之前参加的,阿里、腾讯、微软等大厂前端面试题和体验, 希望对打算换工作的同学有些帮助。
微软
online:电话面试
电话面试,需要在电脑旁,通过微软teams软件,并利用在线编辑软件在线答题
- React哪个阶段发请求
- DidMount异步请求未结束,组件被卸载了怎么办
- 如何实现一个可以停止的Promise
- 使用过underscore或者loadash吗
- 实现一个Filter函数,将多叉树结构中节点含有目标属性的节点及其父元素过滤出来,比如仅保留单数的树
- RN 拆包的性能提高数据?
- RN 做过的基础组件
onsite:现场面试
安排了5个人,面了4位,中午二面完事,有礼貌的女面试官还请吃微软食堂,食堂会议室环境都非常好。 前三面不懂前端,问的项目的设计模式,算法一道题,最后那位熟悉前端聊得还行,然后就没有然后了。
- 部分有序数组,查找目标值的下标
- 无序数组查找a[j]-a[i]最大差,并且要求j>i
- React引入非React第三方插件
- React生命周期
- React16
- 进程和线程的理解
- url输入到显示的过程
- 非React项目引入React, React项目引入JQuery如何配置
阿里
电话面试
- 怎样实现响应式
1. rem;
2. initial-scale;
- 如何解决1px问题?
小于按1px处理;
特殊的时候在UI走查需要修改,再利用media query处理
- 如何实现跨域
1. jsonp 不能post
2. iframe 可以post
3. cors 后端添加白名单
- cors 如何携带cookie?
网页端中,对于跨域的 XMLHttpRequest 请求,需要设置withCredentials 属性为 true。
- 怎样获取元素的样式
行内样式:document.getElementById('dom').style.fontSize;
实际样式:window.getComputedStyle(getElementById('dom')).fontSize;
- dom的0级事件,2级事件?
0级事件:onclick,多个0级事件会被覆盖;
2级事件:addEventListener,不会覆盖;
- js 捕获,冒泡,绑定事件第三个参数?
第三个参数useCapture,是否为捕获模型,默认值是fasle, 不使用捕获,而是冒泡。
如果是捕获的话,事件会从顶级响应,最后执行点击元素的回调。
阻止冒泡,父级,被点击的元素需要使用冒泡模型,并e.stopPropagation()
面试
- css盒模型
- border-box模型,border算在width里吗
- position
- 响应式方案
- viewport怎么理解的?
- viewport 的width=640会怎样?
- 让一个元素向右移动100px都有几种办法?
- transfrom都有哪些
- 动画过渡怎样设置
- 重绘,重排有什么区别?怎样在实际中运用的?
- 闭包的理解?有实际使用吗?
- 函数节流?手写
- 怎样控制this指向?bind,apply的区别?比如在React类中调用封装好的函数节流方法,如何保证this,如何判断当前函数this指向类而不是window.
- setTimeout返回值是什么?
- get, post的区别
- 如何控制浏览器缓存
- 什么情况会跨域,端口不同会吗?
- cors跨域与其他方式的区别
- jsonp跨域的原理?
- typeof 的返回值有哪些?
- 如何判断a是A类的实例?
- 如何判断一个数是NaN?
- 事件传递的两个阶段?先冒泡还是先捕获?
- 如何实现事件代理?手写,什么场景应用?
- node与amd模块化区别?
- webpack如何使用的?
- React 多入口配置如何使用webpack实现?
- vue如何实现双向数据绑定?
baidu
- BFC
- 垂直居中
- 浮动元素的display是什么
- 三栏布局
- 位移动画
- 两栏布局,左侧高度根据右侧高度一致,右侧自适应
- js文件加载顺序
所有 <script> 标签引进的 JavaScript 会按照他们引入的顺序依次被解析,在没有使用 defer 或者 async 的情况下,只有在解析完前面 <script> 元素中的代码之后,才会开始解析后面 <script> 元素中的代码。
由于浏览器会先解析完不使用 defer 属性的<script> 元素中的代码,然后再解析后面的内容,所以一般应该把<script> 元素放在页面最后,即主要内容后面, </body> 标签前面。
使用 defer 属性可以让脚本在文档完全呈现之后再执行,延迟脚本总是按照指定它们的顺序执行。
-使用 async 属性可以表示当前脚本不必等待其他脚本,也不必阻塞文档呈现。不能保证异步脚本按照它们在页面中出现的顺序执行。
- rem根节点如何计算
- 如何实现将下划线命名改成驼峰
- 实现webpack插件的思路
- Flux
- 纯函数,原生js哪些是纯函数
- 模块化区别
第二轮
- 跨域
1. iframe;
2. jsonp;
3. cors;
4. 服务端代理;
- React Native性能打点;
- RN 兼容性问题;
- RN 性能问题;
- RN 拆包的方案和收益;
- 实现requireJS
- 性能优化
1. 减少请求数
2. 减少请求体
3. 渲染优化
- 如何减少请求数,缓存
- 如何减少请求体,压缩静态文件
- 如何检查运行时间过长的函数
- 如何实现高保真,响应式
- Vue组件间通信方式
- Vue如何在全局增加一个方法;
- Vue如何控制组件样式不污染全局
- Vue第三方插件如何结合局部样式?
一个组件添加使用两个css标签,一个scope,一个不是,都加上同样的父容器选择器,来覆盖第三方组件样式
- 如何实现React 服务器渲染
- 如何实现数据持久化
- XSS攻击
腾讯
- “你简历的项目经验写的比较少,这是一份简单的面试题,先做一下”,
-
- setTimeout事件循环题
- new 运算符做了什么
- 闭包题
- 循环,作用域题
- cookie, sessionStorage, localStorage区别
- TCP,UDP区别
- 实现快排
- 后续也没有针对面试题问,提到算法在实际上不怎么用到,根据项目经验问的
- http,https区别
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- rem根节点的字体大小计算
- initial-scale响应式的缺陷
- 1像素问题
- RN响应式
- RN 路由表
- RN 缺点
- RN 调研
- RN 性能考核点
- web 性能考核点
- 服务器渲染中请求如何处理
- RN,web长列表的优化
- 网络请求数据过大如何优化
- 下拉刷新如何实现
- RN js, Native 通讯遇到的问题
爱奇艺
- setState触发render的时机
- 实现promise 特性链式,合并分叉
- TCP 三次握手
- 客户端Js Bridge
- http缓存
1. 强缓存(Expires/Cache-Control),不走网络
2. 协商缓存(Last-Modified / If-Modified-Since), 200/304
- vue react区别
相同:
1. 使用 Virtual DOM
2. 提供了响应式 (Reactive) 和组件化 (Composable) 的视图组件。
不同:
react 需要主动更新数据,更灵活,
vue 是被动的数据绑定
jsx,html模板
- css梯形
//结合border:
height: 0;
width: 100px;
border-top: 100px solid red;
border-right: 37px solid yellow;
border-left: 37px solid green;
- css浮动
- this存在几种指向
a.如果是一般函数,this指向全局对象window;
b.在严格模式下"use strict",为undefined.
c.对象的方法里调用,this指向调用该方法的对象.
d.构造函数里的this,指向创建出来的实例.
- vue双向绑定怎么实现
v-module双向绑定
v-bind/: 单向绑定
vue是通过Object.defineProperty()来实现数据劫持的。
Object.defineProperty是es5不能shim的,所以vue不支持IE8
Object.defineProperty是什么?
数据劫持+发布订阅
- react 优化
- 函数节流,高数防抖
- 垂直水平居中
- 你的工作环境(系统,编辑器)
- 遇到问题如何解决
- 获取知识来源,论坛
饿了么
- js变量类型
- es6新变量:Symbol
- 原型链
- jquery链式调用
- jquery元素缓存
- jQuery,React区别
- React HOC
- React 生命周期及作用
- React setState做了什么
- React 优化
- React 组件通信几种
- Redux 数据流转
- es6新特性及其应用
- 跨域方式
- 模块化介绍
- TypeScript 特性
- 事件循环, 结合题目
- webpack的应用
- http缓存
头条
- 如何实现锚点的平滑滚动?
1. setInterval逐渐移动scrollTop;
2. html, body{ scroll-behavior:smooth; }
3. transform:translateY滚动页面
- 多列元素,平均分配,宽高相等,整体垂直居中的综合css题
主要考核结合flex, css2等经验;具体答案略;
- node环境中,如何判断3个npm镜像哪个快?
Promise.race();
- 如何实现Promise.race?或如何判断三个异步请求先结束
略
- 如何实现“千位分割”,比如203030,返回203,030;
1. 正则;
2. 遍历;
- 你们项目有前端性能监控吗?
前端性能统计的数据大致有以下几个:
白屏时间:从打开网站到有内容渲染出来的时间节点;
首屏时间:首屏内容渲染完毕的时间节点;
用户可操作时间节点:domready触发节点;
总下载时间:window.onload的触发节点。
可以使用Navigation.timing 统计到的时间数据来计算一些页面性能指标,比如DNS查询耗时、白屏时间、domready等等。如下:
DNS查询耗时 = domainLookupEnd - domainLookupStart
TCP链接耗时 = connectEnd - connectStart
request请求耗时 = responseEnd - responseStart
解析dom树耗时 = domComplete - domInteractive
白屏时间 = domloadng - fetchStart
domready时间 = domContentLoadedEventEnd - fetchStart
onload时间 = loadEventEnd - fetchStart