前端面试题总结

数组去重

1 双重循环对比去重

2 利用对象的属性不能相同去重

3 循环中使用indexOf或者includes判断去重

4 使用set去重

function removeRepeatArr(arr) { return Array.from(new Set(arr)); }


对象数组去重(reduce)

constnewArray =arr.reduce((item,next)=>{hash[next.key]?'':hash[next.key]=true&&item.push(next);returnitem;},[])

filter与find区别

find() 方法返回通过测试函数的第一个元素的值

filter() 方法创建一个包含所有通过测试函数的元素的新数组

如果没有值满足测试函数

find() 返回undefined, filter() 返回一个空数组

webpack的作用

webpack打包原理是根据文件间的依赖关系对其进行静态分析,将这些模块按指定规则生成静态资源,当webpack处理程序时,它会递归地构建一个依赖关系图,将所有这些模块打包成一个或多个bundle.

Entry:指定webpack开始构建的入口模块,从该模块开始构建并计算出直接或间接依赖的模块或者库Output:告诉webpack如何命名输出的文件以及输出的目录

Output:告诉webpack如何命名输出的文件以及输出的目录

Loaders:由于webpack只能处理javascript,所以我们需要对一些非js文件处理成webpack能够处理的模块,比如sass文件

Plugins:Loaders将各类型的文件处理成webpack能够处理的模块,plugins有着很强的能力。插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量。但也是最复杂的一个。比如对js文件进行压缩优化的UglifyJsPlugin插件

Chunk:coding split的产物,我们可以对一些代码打包成一个单独的chunk,比如某些公共模块,去重,更好的利用缓存。或者按需加载某些功能模块,优化加载时间。在webpack3及以前我们都利用CommonsChunkPlugin将一些公共代码分割成一个chunk,实现单独加载。在webpack4 中CommonsChunkPlugin被废弃,使用SplitChunksPlugin

http协议中的缓存控制

1.强缓存:不会向服务器发送请求,直接从缓存中读取资源,在chrome控制台的Network选项中可以看到该请求返回200的状态码,并且size显示from disk cache或from memory cache两种(灰色表示缓存)。

2.协商缓存:向服务器发送请求,服务器会根据这个请求的requestheader的一些参数来判断是否命中协商缓存,如果命中,则返回304状态码并带上新的response header通知浏览器从缓存中读取资源;

共同点:都是从客户端缓存中读取资源;

区别是强缓存不会发请求,协商缓存会发请求。

水平垂直居中

1 绝对定位

.parent{ position: relative;}

.child{ position: absolute; left: 50%; top: 50%;    transform: translate(-50%,-50%);    }

2 flex布局

.parent{       display: flex;       justify-content: center;       align-items: center;}

预加载

 1、什么是预加载

提前加载图片,当用户需要查看时可直接从本地缓存中渲染

 2、实现预加载的方法

单纯的css 实现,可通过CSS的background属性将图片预加载到屏幕外的背景上。只要这些图片的路径保持不变,当它们在Web页面的其他地方被调用时,浏览器就会在渲染过程中使用预加载(缓存)的图片。简单、高效,不需要任何JavaScript。

懒加载

当图片出现在浏览器的可视区域内时,才设置图片真正的路径,让图片显示出来,这就是图片的懒加载

页面中img元素,如果没有src属性,浏览器就不会发出请求去下载图片,只有通过js设置图片路径,浏览器才会发送请求;懒加载的原理是先在页面中把所有的图片统一使用一张占位图进行占位,把真正的路径存在元素的‘data-url’属性中,要使用的时候,在设置。

localStorage. sessionStorage、 Cookie不同点

1 存储大小的不同

localStorage的大小一般为5M;sessionStorage的大小一般为5M;cookies的大小一般为4K

2 有效期不同:

1.localStorage的有效期为永久有效,除非你进行手动删除。2.sessionStorage在当前会话下有效,关闭页面或者浏览器时会被清空。3.cookies在设置的有效之前有效,当超过有效期便会失效。

3 与服务器端的通信

1.localStorage不参与服务器端的通信。2.sessionStorage不参与服务器端的通信。3.cookies参与服务器端通信,每次都会存在http的头信息中。(如果使用cookie保存过多数据会带来性能问题)

git常用命令

git push origin 分支名 --force        // git强制提交本地分支覆盖远程分支

git reset --hard origin/master        // git强制提交远程分支覆盖本地分支

https://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html

闭包、原型和原型链问题

https://www.cnblogs.com/hejun26/p/10910590.html

一些前端文章

https://juejin.cn/user/1626932942224398/posts

setTimeOut和setInterval的区别,为什么要用setTimeOut模拟setInterval

setTimeout和setInterval都属于JS中的定时器,可以规定延迟时间再执行某个操作,不同的是setTimeout在规定时间后执行完某个操作就停止了;而setInterval则可以一直循环下去,要想停止,可用window.clearInterval( );

使用 setTimeout 实现 setInterval 的根本原因是:setTimeout 不管上次异步任务是否完成,它都会将当前异步任务推入队列(很容易理解,setTimeout本身就是一次调用一次执行),而 setInterval 则会在任务推入异步队列时判断上次异步任务是否被执行。这就导致 setInterval 在做定时轮训时,出现耗时操作,或者调用的异步操作耗时会导致异步任务不按照期待的时间间隔执行。setTimeout 保证调用的时间间隔是一致的,setInterval的设定的间隔时间包括了执行回调的时间。

Promise, Promise.all, Promise.race

Promise 异步编程的一种解决方案
    1、 对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、resolved(已成功)和rejected(已失败)

    2、一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为resolved和从pending变为rejected

    3、promise内部发生错误,不会影响到外部程序的执行。

    4、无法取消Promise。一旦新建它就会立即执行,无法中途取消。其次,如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。第三,当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)

传一个promise的数组,当所有的promise都完成(resolved),回调所有成功的结果, 如果有一个回调执行失败,then是不会执行的,则在catch回调第一个失败的结果

Promise.race(iterable) 方法返回一个 promise,一旦迭代器中的某个 promise 解决或拒绝,返回的 promise 就会解决或拒绝。


Flex布局的常用属性

https://www.ruanyifeng.com/blog/2015/07/flex-grammar.html

事件循环(宏任务,微任务)

https://blog.csdn.net/YeChan414/article/details/123960680

https://baijiahao.baidu.com/s?id=1700872230388832314&wfr=spider&for=pc

js中,微任务总是先于宏任务执行,也就是说,这三种任务的执行顺序是:同步任务>微任务>宏任务

I/O、定时器、事件绑定、ajax等都是宏任务

Promise的then、catch、finally和process的nextTick都是微任务 

注意:Promise的then等方法是微任务,而Promise中的代码是同步任务,并且,nextTick的执行顺序优先于Promise的then等方法,因为nextTick是直接告诉浏览器说要尽快执行,而不是放入队列

React native调用原生的原理

React Native 需要一个 JS 的运行环境,因为 React Native 会把应用的 JS 代码编译成一个 JS 文件(x x.bundle),React Native 框架的目标就是解释运行这个 JS 脚本文件,如果是 Native 拓展的 API,则直接通过 bridge 调用 Native 方法,最基础的比如绘制 UI 界面,映射 Virtual DOM 到真实的 UI 组件中。

JavaScriptCore 是 JavaScript 引擎,通常会被叫做虚拟机,专门设计来解释和执行 JavaScript 代码。在 React Native 里面,JavaScriptCore 负责 bundle 产出的 JS 代码的解析和执行。

https://juejin.cn/post/6916452544956858382

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容