【面经】极光 JPush 前端社招面试题记录

969 阅读5分钟

Js 有哪些数据类型,区别是什么?分别存储在什么数据结构中?

答:Js 有两种数据类型:基本类型引用类型

  • 基本类型:String / Number / Null / Undefined / Boolean / Symbol
    基本类型存储在栈内存中,它们的值都有固定的内存大小,通过按值访问,并由系统自动分配和自动释放,这样带来的好处就是,内存可以及时得到回收,相对于堆来说,更加容易管理内存空间。

  • 引用类型:Object / Array / Function

    引用类型存储在堆内存中,值大小不固定,栈内存中存放的该对象的访问地址,指向堆内存中的对象,JavaScript 不允许直接访问堆内存中的位置,因此操作对象时,实际操作对象的引用。

两种数据类型的区别在于:

栈内存堆内存
存储基础数据类型存储引用数据类型
按值访问按引用访问
存储的值大小固定存储的值大小不定,可动态调整
由系统自动分配内存空间由代码进行指定分配
空间小,运行效率高空间大,运行效率相对较低
先进后出,后进先出无序存储,可根据引用直接获取

构造函数有哪些特点,new 一个构造函数时做了哪些事情?

答:首先什么是构造函数?在 js 中,通过关键字 new 来调用的函数,叫做构造函数。

构造函数的特点:

Js 的精度丢失问题

数组遍历方法 Foreach / Map / Reduce / Filter / Some / Every 等等的区别和用法

答: 这里有总结过~👉 【前端基础】数组方法

一个对象数组如何根据 对象里的 id 属性去重,如何用 reduce 实现

答:首先我们来回顾一下 reduce 函数的用法:

我们知道 reduce 函数允许结构一个 initValue 的参数,由于我们的问题是对一个对象数组去重,并返回一个新数组,那么我们的 initValue 就可以设置为一个空数组,然后用 reduce 进行遍历,符合条件的 return,作为下一次循环的新参数,这样最后返回的数组就是我们预期内的结果了。

实现如下:

let objArr = [
	{id: 1,	name: 'Echo'},
    {id: 2,	name: 'sss'},
    {id: 1,	name: 'owa'}
];
let hash = {};
objArr = objArr.reduce((item, next) =>{
	if(!hash[next.id]){
    	console.log(item);
    	hash[next.id] = 1;
        item.push(next);
    }
    return item;
}, []);

一个数组 找出里面连续的数字并返回新数组

例如:给定一个数组 [1,2,3,5,7,8,9,3,1] 中,找出 [1,2,3,7,8,9]

如何用数组的方式去遍历对象中的属性?

用面向对象来理解三大特性:封装 继承 多态

答:

  • 封装:隐藏逻辑的实现过程,只对外暴露属性和方法,使用者只需要关系如何使用,不需要关心内部的具体实现过程。目的在与简化了实现过程,做到多处复用,提升了开发效率,当需要维护的时候,业务和逻辑是分开的,减低了迭代成本。

  • 继承:建立一个对象和另一个对象的之间的父子关系,使得子对象可以拥有父对象的属性和方法。继承的目的在于实现功能的共享,通过 '借用' 父对象的特性,从而避免了些重复的代码,避免占用不必要的内存空间。

  • 多态:字面意思就是多种状态,同一操作作用于不同的对象上,可以产生不同的解释和不同的执行结果。比方说,我养了一只猫和一只狗,我对它们发出同一个指令 "叫一下",猫会喵喵喵,而狗会汪汪汪,所以让它们叫一下就是同一操作,而叫声不同则是不同的执行结果。
    但是多态最根本的作用是 通过把过程化的条件语句转化为对象的多态性,从而消除这些条件分支语句,简化代码。
    具体解释可以看这里:👉【前端基础】如何理解 JavaScript 中的多态

深拷贝是什么?有哪几种方式实现方式?

答:之前总结过 👉 浅拷贝和深拷贝

call apply bind的区别和用法

ES6 中 class 的 super 语法糖的适用场景,原理。

ES6 的 Set 数据结构和数组有什么区别?

什么是闭包?闭包可能会产生什么问题?

讲一下内存泄漏

了解垃圾回收机制以及内存管理吗

说一下 async wait 和 Promise 的原理

http1.0 和 http2.0 的区别

答:这里其实要从 3 个版本来回答,篇幅比较长,所以单独写了一篇 :

👉 【前端基础】http1.0 / http2.0 / http / https 的区别

http 状态码

说一下 TCP 的三次握手

了解哪些前端的安全问题(XSS CSRF)

答:篇幅较长,之前总结过:

👉 【前端安全】关于 XSS 和 CSRF

本地储存的类型和区别

Cookie 的 http-only 是用来干嘛的

项目的性能优化有哪些途径

首屏加载缓慢有哪些解决方式

Webpack 的配置核心

DOM 和 BOM 的区别

说一下函数的防抖和截流

路由有哪几种方式?

浏览器渲染页面做了哪些操作?

Vue 父子组件之间传值有什么方法

监听父子组件的数据改变时 除了 watch 还有ref,如何使用?

Vue 双向绑定原理

Vuex状态管理的使用核心和原理

Vue2.0 和 Vue3.0 的区别

Chrome 谷歌插件编写时核心的配置有哪些