前言
工欲善其事,必先利其器。一场优秀的面试需要坚实的基础,充分的技术沉淀。今天开始给大家分享一些面试题目,也自己不断沉淀,不断进步,希望对大家监督一块儿学习。
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、栈与堆
(一)这些数据可以分为原始数据类型和引用数据类型:
栈:原始数据类型(Undefined、Null、Boolean、Number、String)
堆:引用数据类型(对象、数组和函数)
(二)两种类型的区别在于存储位置的不同:
- 原始数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储;栈存的是基本类型和引用类型的指针,存在栈中存的数据会被频繁操作提高性能;栈是由操作系统自动分配释放的,存档函数的参数值和局部变量的值等。操作方式就类似数据结构的栈。堆由人工分配释放,或者运行结束os回收,类似于链表
- 引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定。如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。
(三)堆和栈的概念存在于数据结构和操作系统内存中,在数据结构中:
- 在数据结构中,栈中数据的存取方式为先进后出。堆是一个优先队列,是按优先级来进行排序的,优先级可以按照大小来规定。
- 在操作系统中,内存被分为栈区和堆区:栈区内存由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。堆区内存一般由开发着分配释放,若开发者不释放,程序结束时可能由垃圾回收机制回收。