新鲜出炉的8月前端面试题

媒介

近来参加了几场口试,积聚了一些高频口试题,我把口试题分为两类,一种是基础试题: 主要考核前端技基础是不是踏实,是不是能够将前端学问体系串连。一种是开放式问题: 考核营业积聚,是不是有本身的思索,思索问题的体式格局,这类问题没有标准答案。

基础题

问题的答案供应了一个思索的方向,答案不一定准确周全,有毛病的处所迎接人人请在批评中指出,共同进步。

怎样去设想一个组件封装

  1. 组件封装的目的是为了重用,进步开辟效力和代码质量
  2. 低耦合,单一职责,可复用性,可保护性
  3. 前端组件化设想思绪

js 异步加载的体式格局

  1. 衬着引擎碰到 script 标签会停下来,比及实行完剧本,继承向下衬着
  2. defer 是“衬着完再实行”,async 是“下载完就实行”,defer 假如有多个剧本,会按照在页面中涌现的递次加载,多个async 剧本不能保证加载递次
  3. 加载 es6模块的时刻设置 type=module,异步加载不会形成壅塞浏览器,页面衬着完再实行,能够同时加上async属性,异步实行剧本(应用顶层的this等于undefined这个语法点,能够侦测当前代码是不是在 ES6 模块当中)

css 动画和 js 动画的差别

  1. 代码庞杂度,js 动画代码相对庞杂一些
  2. 动画运转时,对动画的掌握程度上,js 能够让动画,停息,作废,停止,css动画不能增添事宜
  3. 动画机能看,js 动画多了一个js 剖析的历程,机能不如 css 动画好

XSS 与 CSRF 两种跨站进击

  1. xss 跨站剧本进击,重假如前端层面的,用户在输入层面插进去进击剧本,转变页面的显现,或则盗取网站 cookie,防备要领:不相信用户的一切操纵,对用户输入举行一个转义,不许可 js 对 cookie 的读写
  2. csrf 跨站要求捏造,以你的名义,发送歹意要求,经由过程 cookie 加参数等情势过滤
  3. 我们没法完全根绝进击,只能进步进击门坎

事宜托付,目的,功用,写法

  1. 把一个或许一组元素的事宜托付到它的父层或许更外层元素上
  2. 长处,削减内存斲丧,动态绑定事宜
  3. target 是触发事宜的最详细的元素,currenttarget是绑定事宜的元素(在函数中平常等于this)
  4. JavaScript 事宜托付详解

线程,历程

  1. 线程是最小的实行单位,历程是最小的资本管理单位
  2. 一个线程只能属于一个历程,而一个历程能够有多个线程,但至少有一个线程

负载平衡

  1. 当体系面临大批用户接见,负载太高的时刻,通常会运用增添效劳器数目来举行横向扩大,运用集群和负载平衡进步全部体系的处置惩罚才能
  2. 效劳器集群负载平衡道理?

什么是CDN缓存

  1. CDN 是一种布置战略,依据差别的区域布置相似nginx 这类效劳效劳,会缓存静态资本。前端在项目优化的时刻,习气在讲台资本上加上一个 hash 值,每次更新的时刻去转变这个 hash,hash 值变化的时刻,效劳会去从新取资本
  2. (CDN)是一个经战略性布置的团体系统,包含分布式存储、负载平衡、收集要求的重定向和内容管理4个要件
  3. CDN_百度百科

闭包的写法,闭包的作用,闭包的瑕玷

  1. 运用闭包的目的——隐蔽变量,间接接见一个变量,在定义函数的词法作用域外,挪用函数
  2. 闭包的内存走漏,是IE的一个 bug,闭包运用完成以后,收回不了闭包的援用,致使内存走漏
  3. 「逐日一题」JS 中的闭包是什么?
  4. 闭包形成内存走漏的试验

跨域问题,谁限定的跨域,怎样处理

  1. 浏览器的同源战略致使了跨域
  2. 用于断绝潜伏歹意文件的主要平安机制
  3. [jsonp ,许可 script 加载第三方资本]https://segmentfault.com/a/11…
  4. nginx 反向代办(nginx 效劳内部设置 Access-Control-Allow-Origin *)
  5. cors 前后端合作设置要求头部,Access-Control-Allow-Origin 等头部信息
  6. iframe 嵌套通信,postmessage

javascript 中罕见的内存走漏圈套

  1. 内存走漏会致使一系列问题,比方:运转迟缓,崩溃,高耽误
  2. 内存走漏是指你用不到(接见不到)的变量,依旧占居着内存空间,不能被再次应用起来
  3. 不测的全局变量,这些都是不会被接纳的变量(除非设置 null 或许被从新赋值),特别是那些用来暂时存储大批信息的变量
  4. 周期函数一向在运转,处置惩罚函数并不会被接纳,jq 在移除节点前都邑,将事宜监听移除
  5. js 代码中有对 DOM 节点的援用,dom 节点被移除的时刻,援用还坚持
  6. JavaScript 中 4 种罕见的内存走漏圈套

babel把ES6转成ES5或许ES3之类的道理是什么

  1. 它就是个编译器,输入言语是ES6+,编译目的言语是ES5
  2. babel 官方事情道理
  3. 剖析:将代码字符串剖析成笼统语法树
  4. 变更:对笼统语法树举行变更操纵
  5. 再建:依据变更后的笼统语法树再天生代码字符串

Promise 模仿停止

  1. 当新对象坚持“pending”状况时,原Promise链将会中止实行。
  2. return new Promise(()=>{}); // 返回“pending”状况的Promise对象
  3. 从怎样停掉 Promise 链提及(promise内存走漏问题)

promise 放在try catch内里有什么效果

  1. Promise 对象的毛病具有冒泡性子,会一向向后通报,直到被捕捉为止,也等于说,毛病总会被下一个catch语句捕捉
  2. 当Promise链中抛出一个毛病时,毛病信息沿着链路向后通报,直至被捕捉

网站机能优化

  1. http 要求方面,削减要求数目,要求体积,对应的做法是,对项目资本举行紧缩,掌握项目资本的 dns 剖析在2到4个域名,提取通告的款式,大众的组件,雪碧图,缓存资本,
  2. 紧缩资本,提取大众资本紧缩,提取 css ,js 大众要领
  3. 不要缩放图片,运用雪碧图,运用字体图表(阿里矢量图库)
  4. 运用 CDN,抛开无用的 cookie
  5. 削减重绘重排,CSS属性读写星散,最好不要用js 修正款式,dom 离线更新,衬着前指定图片的大小
  6. js 代码层面的优化,削减对字符串的盘算,合理运用闭包,首屏的js 资本加载放在最底部

js 自定义事宜完成

  1. 原生供应了3个要领完成自定义事宜
  2. createEvent,设置事宜范例,是 html 事宜照样 鼠标事宜
  3. initEvent 初始化事宜,事宜称号,是不是许可冒泡,是不是阻挠自定义事宜
  4. dispatchEvent 触发事宜

angular 双向数据绑定与vue数据的双向数据绑定

  1. 两者都是 MVVM 形式开辟的典范代表
  2. angular 是经由过程脏检测完成,angular 会将 UI 事宜,要求事宜,settimeout 这类耽误,的对象放入到事宜监测的脏行列,当数据变化的时刻,触发 $diget 要领举行数据的更新,视图的衬着
  3. vue 经由过程数据属性的数据挟制和宣布定阅的形式完成,大抵能够明白成由3个模块构成,observer 完成对数据的挟制,compile 完成对模板片断的衬着,watcher 作为桥梁衔接两者,定阅数据变化及更新视图

get与post 通信的区分

  1. Get 要求能缓存,Post 不能
  2. Post 相对 Get 平安一点点,由于Get 要求都包含在 URL 里,且会被浏览器保留历史纪录,Post 不会,然则在抓包的情况下都是一样的。
  3. Post 能够经由过程 request body来传输比 Get 更多的数据,Get 没有这个手艺
  4. URL有长度限定,会影响 Get 要求,然则这个长度限定是浏览器划定的,不是 RFC 划定的
  5. Post 支撑更多的编码范例且不对数据范例限定

有无去研讨webpack的一些道理和机制,怎样完成的

  1. 剖析webpack设置参数,合并从shell传入和webpack.config.js文件里设置的参数,临盆末了的设置效果。
  2. 注册一切设置的插件,好让插件监听webpack构建生命周期的事宜节点,以做出对应的回响反映。
  3. 从设置的entry进口文件最先剖析文件构建AST语法树,找出每一个文件所依靠的文件,递归下去。
  4. 在剖析文件递归的历程当中依据文件范例和loader设置找出适宜的loader用来对文件举行转换。
  5. 递归完后获得每一个文件的终究效果,依据entry设置天生代码块chunk。
  6. 输出一切chunk到文件体系。

ES6模块与CommonJS模块的差别

  1. CommonJs 模块输出的是一个值的拷贝,ES6模块输出的是一个值的援用
  2. CommonJS 模块是运转时加载,ES6模块是编译时输出接口
  3. ES6输入的模块变量,只是一个标记链接,所以这个变量是只读的,对它举行从新赋值就会报错

模块加载AMD,CMD,CommonJS Modules/2.0 范例

  1. 这些范例的目的都是为了 JavaScript 的模块化开辟,特别是在浏览器端的
  2. 关于依靠的模块,AMD 是提早实行,CMD 是耽误实行
  3. CMD 推重依靠就近,AMD 推重依靠前置

Node 事宜轮回,js 事宜轮回差别

  1. Node.js 的事宜轮回分为6个阶段
  2. 浏览器和Node 环境下,microtask 使命行列的实行机遇差别

    • Node.js中,microtask 在事宜轮回的各个阶段之间实行
    • 浏览器端,microtask 在事宜轮回的 macrotask 实行完以后实行
  3. 递归的挪用process.nextTick()会致使I/O starving,官方引荐运用setImmediate()

浅拷贝和深拷贝的问题

  1. 深拷贝和浅拷贝是只针对Object和Array如许的庞杂范例的
  2. 也就是说a和b指向了统一块内存,所以修正个中恣意的值,另一个值都邑随之变化,这就是浅拷贝
  3. 浅拷贝, ”Object.assign() 要领用于将一切可罗列的属性的值从一个或多个源对象复制到目的对象。它将返回目的对象
  4. 深拷贝,JSON.parse()和JSON.stringify()给了我们一个基础的处理办法。然则函数不能被准确处置惩罚

开放性问题

开放性问题重假如考核候选人营业积聚,是不是有本身的思索,思索问题的体式格局,没有标准答案。不过有些问题挺刁的,哈哈哈哈,比方:” 你见过的最好的代码是什么? “总之提早准备下没错。

  1. 先毛遂自荐一下,说一下项目的手艺栈,以及项目中碰到的一些问题
  2. 从团体中,看你对项目的熟悉,框架的熟悉和本身思索
  3. 项目中有无碰到什么难点,怎样处理
  4. 假如你在创业公司你怎样从0最先做(挑选什么框架,挑选什么构建东西)
  5. 说一下你项目中用到的手艺栈,以及以为自满和精彩的点,以及让你头疼的点,怎样处理的
  6. 一个营业场景,面临产物不停迭代,以及需求的更改该怎样应对,详细手艺计划完成
  7. 你的进修泉源是什么
  8. 你以为哪一个框架比较好,幸亏那里
  9. 你以为最难过手艺难点是什么
  10. 你见过的最好的代码是什么

😊往期的读书笔记

为了体系的串连前端学问,我日常平凡喜好用头脑导图来纪录读书笔记,我在
github 建了堆栈放这些头脑导图的原件,和读书笔记。假如你也喜好用头脑导图的体式格局来纪录读书笔记,也迎接和我一同保护这个堆栈,迎接留言或则微信(646321933)与我交换

精读《你不知道的 javascript(上卷)》

精读《你不知道的javascript》中卷

精读《深入浅出Node.js》

javascript 渣滓接纳算法

精读《图解HTTP》

头脑导图下载地点

    原文作者:白霸天
    原文地址: https://segmentfault.com/a/1190000015916686
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞