2019年3月-4月前端面试题汇总(暂停更新了...)

搜罗了最近看机会的小伙伴遇到的面试问题(3月-4月),不排序不归类,贵在真实

1. [1,2,3].map(parseInt)输出结果

image.png

parseInt() 函数可解析一个字符串,并返回一个整数。
parseInt(string, radix)这里面有两个参数,这里重点讲一下第二个

  • 可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。
  • 如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。
  • 如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。

map(function(currentValue, index, arr){}) map里面的函数有三个参数,分别是当前值,当前值的索引值以及当前数组对象

于是上面的表达式就变成了这样

parseInt(1, 0), parseInt(2, 1), parseInt(3, 2) // 1, NaN, NaN

2. 手写一个完整的继承

这个不用多说了,基本是必问的东西,这里会顺延很多东西,原型,原型链,构造函数,以及相应之间的关系,很多很多,反正说越多越好,可以看出知识广度

to继承
new的原理

3. eventLoop事件循环和事件队列

JS的异步机制由事件循环和任务队列构成。JS本身是单线程语言,所谓异步依赖于浏览器或者操作系统等完成。JavaScript主线程拥有一个执行栈以及一个任务队列,主线程会依次执行代码,当遇到函数时,会先将函数入栈,函数运行完毕后再将该函数出栈,直到所有代码执行完毕。

遇到异步操作(例如:setTimeout, AJAX)时,异步操作会由浏览器(OS)执行,浏览器会在这些任务完成后,将事先定义的回调函数推入主线程的任务队列(task queue)中,当主线程的执行栈清空之后会读取task queue中的回调函数,当task queue被读取完毕之后,主线程接着执行,从而进入一个无限的循环,这就是事件循环.

Microtask 与 Macrotask
一个浏览器环境只能拥有一个事件循环(event loop),而一个事件循环可以多个任务队列(Task queue),每个任务都有一个任务源(Task source)。任务队列是一个先进先出的队列.

macrotask(macro-task: script(整体代码), setTimeout, setInterval, setImmediate, I/O, UI rendering) 和 microtask(micro-task: process.nextTick, Promises(这里指浏览器实现的原生 Promise), Object.observe, MutationObserver) 是异步任务的两种分类。在挂起任务时,JS 引擎会将所有任务按照类别分到这两个队列中,首先在 macrotask 的队列(这个队列也被叫做 task queue)中取出第一个任务,执行完毕后取出 microtask 队列中的所有任务顺序执行;之后再取 macrotask 任务,周而复始,直至两个队列的任务都取完。

全部代码(script)是一个macrotask,js先执行一个macrotask,执行过程中遇到(setTimeout, setInterval, setImmediate等)异步操作则创建一个macrotask,遇到(process.nextTick, Promises等)创建一个microtask,这两个queue分别被挂起.执行栈为空时开始处理macrotask,完成后处理microtask,直到该microtask全部执行完,然后继续主线程调用栈.

每一次事件循环(one cycle of the event loop),只处理一个 (macro)task。待该 macrotask 完成后,所有的 microtask 会在同一次循环中处理。处理这些 microtask 时,还可以将更多的 microtask 入队,它们会一一执行,直到整个 microtask 队列处理完。

<script type="text/javascript">
  console.log(1)
  setTimeout(function(){
   console.log(2);
   let promise = new Promise(function(resolve, reject) {
      console.log(6);
      resolve()
   }).then(function(){
    console.log(7)
   });
  },0);
  let promise = new Promise(function(resolve, reject) {
     console.log(3);
     resolve()
  }).then(function(){
   console.log(4)
  }).then(function(){
   console.log(8)
  });
  console.log(5)
 </script>

以上代码的打印顺序 1>3>5>4>8>2>6>7

4. 常见的HTTP状态码都有哪些302,301,304都是什么

简单说301永久重定向,302是临时重定向,304如果客户端发送了一个带条件的 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码

这里可能会被追问HTTP的缓存机制
状态码
关于缓存

5. https的原理,http 1.1 和 2.0的区别,页面输入url之后做了什么

https的原理,http 1.1 和 2.0的区别
输入url做了什么

6. 网络安全方面,xss攻击是什么,怎么防御,csrf攻击是什么怎么防御

网络安全

7. 数组去重

写越多种方法越好吧
还有一个问题是使用最小的空间和时间复杂度去重

8. ...运算符的原理

对象中的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中
扩展运算符

9. 一个无限大的有序数组如何找到两个值相加等于9的所有下标

简单写了一下,利用对象的方法,对象的key存储原数组的值,对象的value存储原数组的index

let arr = [1,12,3,14,5,6,7,18,9,0]
function find(arr) {
    let _obj = {}
    let _index = []
    arr.forEach((element, index) => {
        _obj[element] = index
    });
    for (let ele in _obj) {
        if (_obj[9 - parseInt(ele)]) {
            _index.push(_obj[9 - parseInt(ele)])
        }
    }
    return _index
}
console.log(find(arr))
image.png

如果考虑到数组内有重复元素的话,以上方法就不适用了,感谢评论大哥的提醒

10. 关于排序,快速排序,冒泡排序,堆排序等等

这里简单写一个快排

let qsort = (list) => { 
    if( list.length === 0 ){
      return []
    } 
    
    let [x, ...xs] = list
    return [...qsort(xs.filter(u => u <= x)), x, ...qsort(xs.filter(u => u > x))]
}

剩下的百度好了....

11. 跨域

跨域也是经常问的内容比方说jsonp,为什么jsonp要设置随机函数名,优缺点,CROS服务端怎么配置,iframe怎么做到数据互通...说的越多越好吧
跨域

12. this的指向问题

简单讲解一下this的使用场景
这里最后会延伸到call,apply,bind,再向上会让你手动封装一个call或者bind
this
封装一个call
封装一个bind

13. 关于es6的东西

关于es6有很多比方说会问到箭头函数和普通函数的区别,val,let和const的区别,Map,Set的使用,proxy的使用方法,Generator 函数等等,基本常看到的,都看看吧
es6

14. 函数防抖、函数节流

百度一下吧...

15. TCP和UDP的区别

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的

UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)

4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

16. 关于vue

vue的双向绑定原理,老生常谈的一个问题
vue-router的原理
vuex的原理
vue的生命周期

基本偏原理向,要求看过源码

17. 关于react

这个不是我的专长,被问到最多的就是和vue的区别,还有项目上当时为什么选型vue,这个仁者见仁智者见智,大家自己想一下怎么回答就好

18. promise

关于promise的问题也很常见,最烦的应该是手写实现一个promise,还有可能面试官会随机出一些场景,让你利用promise解决,再或者会套用到eventloop中,让你判断输出

19. 闭包

最经典的问题,到现在也经常被问到

function a() {
    for(var i = 0 ; i< 10 ; i++) {
        setTimeout(function() {
            console.log(i)
        }, 0)
    }
}

用闭包解决这个问题
闭包

20. 关于二叉树

基本都是使用递归的方法,但是根据问题不一样,解法都不一样,建议没事多刷刷领扣

21. 关于布局的问题

关于布局的问题挺多的,比方说
实现一个品字结构
常见的居中问题
两栏自适应布局
左半边宽度固定右半边撑开的问题

总之就是尽量的多几种,大概使用浮动定位表格flexgrid什么的都可以实现吧...

21. img为什么能设置宽高

img是可替换元素
替换元素就是浏览器根据元素的标签和属性,来决定元素的具体显示内容。
img input select textarea button label 等都是可替换元素

他们区别一般inline元素是:这些元素拥有内在尺寸 内置宽高 他们可以设置width/height属性。他们的性质同设置了display:inline-block的元素一致。

22. git的问题

git add和git commit,分别做了什么,代码都存放在哪里
怎么从git commit 回退到git add的步骤

23 比较有难度的问题

用react 或者 VUE 实现一个简单的 table组件,不要求任何样式。要求在不使用翻页组件的情况下(可以使用滚动条),同时加载 1w 条数据且不会造成前端卡顿。

理论上是在加载之后的数据时,删除掉已经加载过的节点,这是一道机试题,需要完成功能,各位可以想一下具体怎么实现...

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