2020年前端面试集锦(DOM HTTP 框架(Vue))

DOM

  • 事件委托
    参考答案 :
    简易版 (有缺陷 没有考虑子元素 ): bug 在于,如果用户点击的是 li 里面的 span,就没法触发 fn,这显然不对
  ul.addEventListener('click',function(e){
  if(e.target.tagName.toLowerCase() === 'li'){
    fn() // 执行某个函数 
    //console.log('您点击了li')
  }
})
。

高级版 :思路是点击 span 后,递归遍历 span 的祖先元素看其中有没有 ul 里面的 li。

function delegate(element, eventType, selector, fn) {
     element.addEventListener(eventType, e => {
       let el = e.target
       while (!el.matches(selector)) {
         if (element === el) {
           el = null
           break
         }
         el = el.parentNode
       }
       el && fn.call(el, e, el)
     })
     return element
   }
//HTML 部分 
<div id="xxx"></div>
// CSS部分 
div{
  border: 1px solid red;
  position: absolute;
  top: 0;
  left: 0;
  width: 100px;
  height: 100px;
}
*{margin:0; padding: 0;}
//JS部分 
//用户按下鼠标标记 判断是否在拖拽 默认没有 
var dragging = false
//上一次的坐标 默认为空 
var position = null

xxx.addEventListener('mousedown',function(e){
//   用户按下鼠标 开始拖拽  
  dragging = true
//   用户按下鼠标的时候 获取xy 
  position = [e.clientX, e.clientY]
})

// 监听鼠标的移动  mousemove 只能监听在document上面
document.addEventListener('mousemove', function(e){
  if(dragging === false){return}
  console.log('hi')
//  获取鼠标坐标 
  const x = e.clientX
  const y = e.clientY
  console.log(x,y)
//   位移 距离 用户鼠标移动的 距离 这一次 减去上一次的 
  const deltaX = x - position[0]
  const deltaY = y - position[1]
//   先换算单位 
  const left = parseInt(xxx.style.left || 0)
  const top = parseInt(xxx.style.top || 0)
//   位移写到div上面
  xxx.style.left = left + deltaX + 'px'
  xxx.style.top = top + deltaY + 'px'
//   这一次的坐标 继承 下一次的开始 
  position = [x, y]
})
document.addEventListener('mouseup', function(e){
  dragging = false
})

HTTP

  • HTTP 状态码知道哪些?分别什么意思?
    参考答案
    — 2xx 表示成功
    — 3xx 表示需要进一步操作
    — 4xx 表示浏览器(客户端)方面出错
    — 5xx 表示服务器方面出错
    — 完整参考 http://www.runoob.com/http/http-status-codes.html

  • HTTP 缓存有哪几种?
    参考答案:* 需要详细的了解 ETag、CacheControl、Expires 的异同
    -- 参考 https://imweb.io/topic/5795dcb6fb312541492eda8c
    答题要点
    1.ETag 是通过对比浏览器和服务器资源的特征值(如MD5)来决定是否要发送文件内容,如果一样就只发送 304(not modified)
    2.Expires 是设置过期时间(绝对时间),但是如果用户的本地时间错乱了,可能会有问题
    3.CacheControl: max-age=3600 是设置过期时长(相对时间),跟本地时间无关。

  • GET 和 POST 的区别 (常考)
    参考答案:(误解颇多 错解,但是能过面试)
    1.GET在浏览器回退时是无害的,而POST会再次提交请求。
    2.GET产生的URL地址可以被加入收藏栏,而POST不可以。
    3.GET请求会被浏览器主动cache,而POST不会,除非手动设置。
    4.GET请求只能进行url编码,而POST支持多种编码方式。
    5.GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
    6.GET请求在URL中传送的参数是有长度限制的,而POST么有。
    7.对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
    8.GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
    9.GET参数通过URL传递,POST放在Request body中

正解:就一个区别:语义——GET 用于获取资源,POST 用于提交资源
详细请参考 : https://zhuanlan.zhihu.com/p/22536382

  • Cookie V.S. LocalStorage V.S. SessionStorage V.S. Session
    参考答案
    1、Cookie V.S. LocalStorage
    主要区别是 Cookie 会被发送到服务器,而 LocalStorage 不会
    Cookie 一般最大 4k,LocalStorage 可以用 5Mb 甚至 10Mb(各浏览器不同)
    2、LocalStorage V.S. SessionStorage
    LocalStorage 一般不会自动过期(除非用户手动清除),而 SessionStorage 在回话结束时过期(如关闭浏览器)
    3、Cookie V.S. Session
    Cookie 存在浏览器的文件里,Session 存在服务器的文件里
    Session 是基于 Cookie 实现的,具体做法就是把 SessionID 存在 Cookie 里

框架Vue

  • watch 和 computed 和 methods 区别是什么?
    参考答案:思路:先翻译单词,再阐述作用,最后强行找不同。
    要点:
    1.computed 和 methods 相比,最大区别是 computed 有缓存:如果 computed 属性依赖的属性没有变化,那么 computed 属性就不会重新计算。methods 则是看到一次计算一次。
    2.watch 和 computed 相比,computed 是计算出一个属性(废话),而 watch 则可能是做别的事情(如上报数据)
  • Vue有哪些生命周期钩子函数? 分别有什么作用?
    参考答案
  1. 钩子在文档全都有,看红色的字。
  2. 把名字翻译一遍就是满分
  3. 要特别说明哪个钩子里请求数据,答案是 mounted
  • Vue如何实现组件之间的通信 ?
    参考答案
    1.父子组件:使用 v-on 通过事件通信
    2.爷孙组件:使用两次 v-on 通过爷爷爸爸通信,爸爸儿子通信实现爷孙通信
    3.任意组件:使用 eventBus = new Vue() 来通信 和 eventBus.$emit 是主要API
    4.任意组件:使用 Vuex 通信
  • Vue 数据响应式怎么做到的?
    参考答案
  1. 答案在文档《深入响应式原理
  2. 要点
    1. 使用 Object.defineProperty 把这些属性全部转为 getter/setter
    2. Vue 不能检测到对象属性的添加或删除,解决方法是手动调用 Vue.set 或者 this.$set
  • Vue.set 是做什么用的? 参考答案 同上
  • Vuex 你怎么用的?
    背下文档第一句:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式
    说出核心概念的名字和作用:State/Getter/Mutation/Action/Module
  • VueRouter 你怎么用的?
    背下文档第一句:Vue Router 是 Vue.js 官方的路由管理器。
    说出核心概念的名字和作用:History 模式/导航守卫/路由懒加载
    说出常用 API:router-link/router-view/this.router.push/this.router.replace/this.route.params this.router.push('/user-admin')
    this.$route.params
  • 路由守卫是什么?
    看官方文档的例子,背里面的关键的话

TypeScript

  • never 类型是什么?
    不应该出现的类型
  • TypeScript 比起 JavaScript 有什么优点?
    提供了类型约束,因此更可控、更容易重构、更适合大型项目、更容易维护

Webpack

  1. 必考:有哪些常见 loader 和 plugin,你用过哪些?
  2. 英语题:loader 和 plugin 的区别是什么?
  3. 必考:如何按需加载代码?
  4. 必考:如何提高构建速度?
  5. 转义出的文件过大怎么办?

上面五题请看这个不错的参考:https://zhuanlan.zhihu.com/p/44438844

安全

  1. 必考:什么是 XSS?如何预防?
    比较复杂,看方方的文章 https://zhuanlan.zhihu.com/p/22500730
  2. 必考:什么是 CSRF?如何预防?
    比较复杂,看若愚的文章 https://zhuanlan.zhihu.com/p/22521378

开放题目

  1. 必考:你遇到最难的问题是怎样的?
    要点:一波三折。参考 https://www.zhihu.com/question/35323603
  2. 你在团队的突出贡献是什么?
    把小事说大。
  3. 最近在关注什么新技术
    书、博客、推特、知乎,不要说 CSDN、百度。
  4. 有没有看什么源码,看了后有什么记忆深刻的地方,有什么收获
    看过源码说源码,推荐看 underscore.js 的源码
    没看过源码就说同事的代码,代码烂就说哪里烂,代码好就说哪里好
    收获:命名规范、设计模式
    刁钻题目
    代码
1、 [1,2,3].map(parseInt)
答案
 1
 NaN
 NaN
代码
2、 var a = {name: 'a'}
 a.x = a = {}
 问 a.x 是多少?
答案
 undefined
3、(a ==1 && a== 2 && a==3) 可能为 true 吗?
利用 == 会调用 valueOf() 的特性
 var a = {
  value: 1,
  valueOf(){
   return this.value++
  }
 }
 a ==1 && a== 2 && a==3 // true
利用 a 会读取 window.a 的特性
 var value = 1; 
 Object.defineProperty(window, 'a', {
     get(){
         return value++;
     }
 })
 a ==1 && a== 2 && a==3 // true
 // 或者 
 a ===1 && a=== 2 && a===3 // true
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容

  • 请参看我github中的wiki,不定期更新。https://github.com/ivonzhang/Front...
    zhangivon阅读 7,105评论 2 19
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,569评论 0 7
  • 一:认识jquery jquery是javascript的类库,具有轻量级,完善的文档,丰富的插件支持,完善的Aj...
    xuguibin阅读 1,703评论 1 7
  • 本篇收录了一些面试中经常会遇到的经典面试题以及自己面试过程中遇到的一些问题,并且都给出了我在网上收集的答案。马上就...
    菲菲菲菲妞阅读 909评论 0 3
  • 结合网上和个人总结,仅供参考。 1、HTML&CSS: 1、DOM结构 —— 两个节点之间可能存在哪些关系以及如何...
    FredericaJ阅读 3,918评论 3 7