前端面试题集合

241 阅读3分钟

前言

工欲善其事,必先利其器。一场优秀的面试需要坚实的基础,充分的技术沉淀。今天开始给大家分享一些面试题目,也自己不断沉淀,不断进步,希望对大家监督一块儿学习。

1、object、map和weakMap的区别

  • object有默认的一些键,键只能是string。

  • map的键则可以是各种类型包括引用类型,map提供了很多api对map中的键值对进行操作比如get,set,delete,has,clear,相比较object更方便,针对频繁删改键值的操作,性能更好,

  • weakmap则类似map,但weakmap是弱引用,不增加引用计数器的值,只要其他地方没有再引用weakmap中的引用类型值,那么垃圾回收就会回收掉那个空间。

2、async的原理

async 是generator的语法糖,aync封装了generator 让yeild执行变为手动执行,async会将函数返回值为promise.

3、sort底层原理

  • V8 引擎 sort 函数只给出了两种排序分别是:根据传入的数组大小判断使用 数组长度小于等于 10 的用插入排序,比10大的数组则使用快速排序
  • 如果还要按引擎区分的话 v8就是上面说的这个,ff用的归并排序,webkit用的C++库的排序

4、前端路由模式及原理

路由是为了需要路径被改变而页面不会重新请求刷新,路由模式有hash和history还有repleaceState,hash就是利用hashchange不会重新请求这个原理,window.addEventListener('hashchange',function() {//改变视图}),history同理,只不过history模式下路径不会有

  • push是往history去添加一条记录
  • repleaceState是替换路径
  • replace直接替换,不会添加新的;push和replace区别就是push能返回上一页replace不能

5、栈与堆

(一)这些数据可以分为原始数据类型和引用数据类型:

栈:原始数据类型(UndefinedNullBooleanNumberString)
堆:引用数据类型(对象、数组和函数)

(二)两种类型的区别在于存储位置的不同:

  • 原始数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储;栈存的是基本类型和引用类型的指针,存在栈中存的数据会被频繁操作提高性能;栈是由操作系统自动分配释放的,存档函数的参数值和局部变量的值等。操作方式就类似数据结构的栈。堆由人工分配释放,或者运行结束os回收,类似于链表
  • 引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定。如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。

(三)堆和栈的概念存在于数据结构和操作系统内存中,在数据结构中:

  • 在数据结构中,栈中数据的存取方式为先进后出。堆是一个优先队列,是按优先级来进行排序的,优先级可以按照大小来规定。
  • 在操作系统中,内存被分为栈区和堆区:栈区内存由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。堆区内存一般由开发着分配释放,若开发者不释放,程序结束时可能由垃圾回收机制回收。