2020从我第一份简历投递出去已经将近两个月了,虽然暂时没画句号,但我想先记录一下,你们裸面的,裸辞的都慎重一下。
下面写的都是真实面试过的,真的会考的。包括腾讯,阿里,头条,滴滴,美团,好未来,真融宝,快手,贝壳等,对问的题目进行了分类。
题主中途也心理崩溃过,好在有靠谱领导和小伙伴分析,靠谱老公支持,最终抗到了现在。
-
日常问题
- 自我介绍(99%会问,最好还是准备一下)
-
html篇
- meta一般有什么属性?
-
css篇
- flex 弹性布局了解吗?用过哪些?
- flex布局??怎么让它一个居左一个居右?
- positon说一下类型;absolute父级没有relative针对什么定位
- 左右布局有几种方式
- 标准盒模型和怪异盒模型的区别
- BFC解释一下
- 元素居中的方法
-
js基础篇
- 闭包、原型链(手写闭包)
- javascript继承
- 原型链说一下,字符串有原型吗(有,__propto__指向Object),所有对象都有原型吗
-
理解事件循环机制(会问你详细怎么走的,必须得无理解了才能完全hold住);async与await是什么任务;为什么是微任务
示例题1 console.log('script start'); setTimeout(function() { console.log('setTimeout'); }, 0); Promise.resolve().then(function() { console.log('promise1'); }).then(function() { console.log('promise2'); }); console.log('script end');
示例2:输出什么,为什么?
示例3 async function async1(){ console.log('async1 start') await async2() console.log('async1 end')//w1 } async function async2(){ console.log('async2') } console.log('script start') setTimeout(function(){// h1 console.log('setTimeout') },0) async1(); new Promise(function(resolve){ console.log('promise1') resolve(); }).then(function(){ console.log('promise2')//w2 }) console.log('script end')
示例4任务队列理解 setTimeout(()=>{ console.log(1); Promise.resolve().then(()=>{ console.log(2); }); }, 0) setTimeout(()=>{ console.log(3); Promise.resolve().then(()=>{ console.log(4); }); }, 0)
- DOM操作——怎样添加、移除、移动、复制、创建和查找节点
- cookie、localStorage、sessionStorage 区别和使用场景
- 跨域相关问题,怎么解决?几种方式?
- 跨域的方法
- 为什么会跨域,跨域到后端了吗
- 为什么会跨域,跨域的实现;option在什么情况会发
- 跨域,cookie允许跨域的配置withCredentials: true
- 缓存有哪些
- 缓存有哪些,协商缓存返回状态是什么,强缓存返回状态是多少
- 缓存:强缓存,协商缓存,seestion,localstorge,cookie
- 刷新列表会造成数据丢失怎么办
- cookie,localstorge,sessionStorge区别
- cookie怎么带给后端(withcans)
- call,apply,bind的区别
- ajax原生怎么写?get与post的区别?post的参数放在哪里的?
- post/get的区别,contentType的类型
- js实现深度复制(手写代码)
- js的基本数据类型;怎么判断数据类型(必须答出对象原型才肯罢休);symbol怎么声明
- [1,2,3].toString()和{a:10}.toString分别打印什么,为什么
- 邮箱的正则怎么写?
写一个正则匹配/<script/>内的内容 const str = /<script\>....</script> /<div\></div> \<label text="aa"/></label>
- 垃圾回收机制,闭包应用场景
- 事件循环原理
- 判断是否是数组--instanseof ,是否是它的实例
- 浏览器缓存
判断下面的对象是如何成环的 var a = { b: c } var c = { d: d } var d = { a: a }
-
ES6篇
- promise 实现原理
- promise的实现(手写代码)
- 怎么判断5个全对
- promiseAll --->原生实现
-
promise结合try catch
try{ Promise.reject(2) .catch((e)=>{ console.log(e) throw new Error(3) }) }catch(e){ console.log(e) } try{ const data = await Promise.reject(2); console.log(data); console.log(4); throw new Error(3); }catch(e){ console.log(e)
- async await
- js实现继承,ES6实现继承,es6有用吗?ES6 class有用吗?babel把es6转为ES5?ES5实现继承?
- set map/weakmap区别
- map和forEach的区别
- Es6 commonJS的区别
- es6和ts
-
function 和尖头函数的区别
m:function(){ console.log(this) }, n:()=>{console.log(this)} }; a.m(); a.n(); var x=a.m; var y=a.n; function f(){ x(); y(); } x(); y();
-
解构
const obj = { a: { b:1, }, c:2 } const obj1 = {...obj}; const obj2 = {...obj1}; obj.a.b = 3; obj.c = 4; obj1.a.b
-
Vue篇
- vue的组件间怎么通信?父子间怎么通信?父组件调子组件的方法怎么调用?
- vuex
- vue生命周期;beforeCreated created之间的区别;created和 beforeMouned之间的区别;如果父组件和子组件,生命周期又是怎样的
- SPA,vue单页面如何在后退时返回到上次滚动位置(考vue-router)
- vue双向绑定的原理。那是怎么向订阅者发送消息的呢?
- vue data 到view的过程(要答出Vdom哦,没问你也要答,不然扣分~~~)
- vue-router路由:hash# history;history主要的API;pushState replaceState 区别
- vue 模版,虚拟Dom 到真实Dom的转换过程
- vue MVVM驱动的原理是什么
- 详细说一下vue的周期,平时用什么哪些周期多一些?他们的应用场景
- nextTick,他的原理是什么
-
vue.nextTick(()=>{})是怎么实现的,以及下面的输出
data: { a: 1 } vue.nextTick(()=>{ this.a = 2 console.log(this.a) }) Promise.resolve().then(()=>{ this.a = 3; }) console.log(this.a)
- vue-router路由,默认的是什么【hash】
- vue路由的钩子函数----没答上来
- 组件的通信方法
- vuex的数据流向,vuex的原理
- vue过滤器有哪些,数字格式化{{ num | formatAmount(0)}} 它的原理
- vue使用use的使用的发生了什么
- computed计算属性的原理
- vuex为什么这么设计,为什么要采用传参数的方式
- vue-router
- vue函数式组件和非函数式组件
- 登录 权限 content 路由导航
- vuex说一下
- event.bus (知识)//new Vue(),自定义事件
- v-model的双向绑定原理
- object.property的缺点,为什么不能监听
- vue3.0的改进proxy
- vue的原理
- jquery和vue的区别
- vue获取元素的方法
- nextTick,原理
- created和mounted的区别
- computed和watch的区别,哪种效率高一些
- data 为什么是一个函数
- data的函数可以改成箭头函数吗
- vue3.0 为什么使用proxy
- 数据新增对象怎么让它可以更新到组件上-vue.set
-
webpack篇
- webpack打包用过吗?
- webpack loader(module)和plugin用了哪些
- webpack的loader和plugin的区别,为什么要使用loader,各个loader的作用
- 为什么webpack4可以再命令行直接执行
- 用过哪些webpack的高级属性
- 热重载是怎么做的
- 不同环境怎么区分打包(packge.json)
- webpack的构建过程
- 热更新的原理-------》不知道
- 自定义插件的流程
- require的原理,es6转es5原理
- tree shaking的原理以及如何充分利用tree shanking
-
npm篇
- npm发布了几个包?打包出来的格式?
- npm install发生了什么
-
http篇
- http缓存?
- http缓存,这两个缓存的关联关系是怎么样的,是怎么转换的
- 一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?
- HTTP/2 和 HTTP 1.1 有什么区别?
- http状态码有哪些?
- 浏览器输入地址发生了什么
- http2.0了解吗
- http请求成功的状态码有哪些
- http2.0的改进
-
移动端
- 移动端怎么做适配?
- rem和em的区别;
- 如果要在chrome上显示10px的字怎么办
- rem是基于什么布局的一个方式?
- hybrid开发?
- 怎样实现 微信开发的登陆与分享 ?
- 遇到过哪些移动端的一些坑
- PC和移动怎么自适应怎么做
- 手机调试问题
- 移动端设置
- Pc和移动开发的区别
-
性能优化篇
- 如何优化和减少页面的加载时间。
- 性能优化相关?
- 项目中做了哪些性能优化
- cdn有哪些优化静态资源加载速度的机制
- 设计AutoComplete组件(又叫搜索组件、自动补全组件等)时,需要考虑什么问题?
- 浏览器第一次访问,第二次访问,第三次访问的区别
- DOMContentLoad 与ttfb区别
- ready与onload区别,哪个先执行
- 错误监控
- DNS解析
- CDN的理解
- 常见的性能
- 防抖
- 函数节流,函数防抖实现
-
服务端篇
- koa2中间键用了哪些
- nodejs?了解哪些部分?
- node的进程管理
- koa2节点管理
- node了解多少
- node了解多少
-
手写代码和算法篇
请用js实现将一个二维数组转换成树结构 例如:将下面数据 [ ["a", "aa", "aaa", "aaaa"], ["b", "bb", "bbb"], ["a", "ab", "aba"], ["a", "aa", "aab"] ] 转为: [ { "name" : "a", "child" : [ { "name" : "aa", "child" : [ { "name" : "aaa", "child" : [ { "name" : "aaaa", "child" : [] } ] }, { "name" : "aab", "child" : [] } ] }, { "name" : "ab", "child" : [ { "name": "aba", "child" : [] } ] } ] }, { "name": "b", "child" : [ { "name" : "bb", "child" : [ { "name" : "bbb", "child" : [] } ] } ] }
`fn = f(n-1) + f(n-2) f0 = 0 f1 = 1 n >=0 正整数 fn`
- 数组拍平(手写代码)
-
嵌套数组拍平
[1,2,3,4,[5,6,[7]],8] [1,2,3,4,5,6,7,8] 除了常规方法,还有奇葩方法,全转字符串再把中括号删掉
-
query解析
?a=0&a=1&a=2&c&url=url内容#333 转成 { query:{ a:[0,1,2], url:'url内容' }, hash:''
-
手写
var data = { a: { b: { c: 'ScriptOJ' } } } console.log(safeGet(data, 'a.b.c')) // => scriptoj console.log(safeGet(data, 'a.b.c.d')) // => 返回 undefined console.log(safeGet(data, 'a.b.c.d.e.f.g')) // => 返回 undefined console.log('ScriptOJ') // => 打印 ScriptOJ
- 手写阶乘 5*4*3*2*1
- 拖拽
- 写一个函数,计算两个矩形是否碰撞
- 实现函数,功能是给数组打乱顺序,要求不能用sort进行打乱
- 手写快速排序
- 手写promise的实现
- 浅拷贝
- 深拷贝
- 怎么让0全部到最后去的方法
- 二叉树
- [1,2,5,3] 得到10的函数
- 两个有序数组(升序)排序组合成1个有序数组(升序)
- 二分查找算法
- 5000 → 5,000,5430342 → 5,430,342
- var list = [{age: 1}, {age:13}, {age:8}],按照 age的值 将list从大到小排序
- var list = [{age: 1}, {age:13}, {age:8}],输出重复次数最多的age?重复了多少次?(此问题和第一问无关系)
-
函数柯里化
请实现方法`curry(Function) => Function`,传入一个多参函数,返回单参函数 example: const sub = function(a, b, c, d) { return a+b+c+d; } const subCurry = curry(sub); sub(1,2,3,4) = subCurry(1)(2)(3)(4) sub(1,2,3,4) = subCurry(1,2)(3)(4)
-
项目流程篇
- 前端上线流程是怎么样的
- 怎么保障你的代码质量
- 代码上线了有问题怎么办
- 部署是怎么样的过程,上线的过程是怎么样的?他是怎么被用户访问到的?
- 如何保证代码质量
-
开放性问题
- 目前你对什么Web技术最感兴趣
- 最近了解前端的什么技术?
- 你有什么想问我的吗
- 你遇到的一些难点
- 介绍一个你的一个项目
- 说一下你的用户体验怎么优化的
- 你最近在学习什么
- 技术的积累沉淀有哪些
- 你为什么要离职
- 了解为微应用吗
- 你是如何设计组件的,如何设计一个dialog,要考虑哪些问题
- 你平时是怎么学习
- 你想做什么工程
- 你有什么想问我的
- 技术管理有什么想法
- mock方法
- 组件怎么封装
- 你的兴趣爱好
- 最骄傲的一件事
- 你的优点和缺点
- 你有什么要问我的
- 开发组件的注意事项
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。