最近的笔试和面试

笔试:

美丽联合:

1、console.log(["a",,"b",,].length)//4    注意这里未填写元素的位置的值为undefined。所以这里的length为4.但是最后一个,后面不会再补值。["a",,"b",,]=>["a", undefined, "b", undefined]

面试:

1、事件处理函数中的e.target和e.currentTarget有什么区别(饿了么,shopee):

e.target:一个触发事件的对象的引用。当前触发事件的元素对象的引用。

e.currentTarget:当事件遍历DOM时,标识事件的当前目标。注册事件处理函数的元素对象。相当于未改变指向的this。

2、es6中的forEach和for...of遍历了解吗?

forEach:是es6中为数组新增的方法,可以遍历数组,接收两个参数,一个为回调函数,一个为函数内部this指向的对象。回调函数接收三个参数,分别表示:item,index,arr;

for...of:调用对象中的iterator接口产生的遍历器,获得对象的键值;可以配合entries(),values(),keys()返回的对象遍历得到键值对儿,键值,和键名;只能访问到数组中数字下标的键值。(for....in遍历的对象不需要有iterator接口,但对象的属性的configurable设置为true才能被访问到。获得对象的键名)

3、 window.onload、DOMcontentLoaded、onreadystatechange、readystate(招银网络科技)

window.onload:等待HTML页面完全加载完成后触发,包括样式表、图像和子帧。

DOMcontentLoaded:等到初始的HTML文档加载解析完成之后被触发,而不需要等到样式表、图像或者子帧被加载完成;但是注意:DOMContentLoaded 事件必须等待其所属script之前的样式表加载解析完成才会触发。(HTML5新事件)

document.addEventListener("DOMcontentLoaded",function(){})

onreadystatechange:文档加载的状态改变触发的事件,配合document.readystate判断当前文档加载的状态,文档加载的状态有:loading、interactive、complete。分别可以在不同的状态下执行不同的函数

 4、进程和线程的区别(招银网络科技)

进程是操作系统资源分配的基本单元,操作系统可以有多个进程,进程有独立的内存空间。线程是任务调度和执行的基本单位,一个进程可以有一个或多个线程,线程由CPU进行调度,进程中的线程是同时执行的,但微观角度看每个线程是按照时间片轮流执行的。

5、session和cookie的区别(高频,很多都有问)

  1. cookie数据存放在客户端上,session数据存放在服务器上 
  2. cookie会随着http请求进行发送-------请求报文中请求头中包含cookie:name=value;------- 响应报文的响应头部中包含:set-cookie:name=value;[expires=data(GMT格式);domain=访问哪些域名需要携带cookie;path=访问域名下的哪些路径需要携带cookie;secure(设置安全字段的话只有使用https协议才携带cookie)];session不会随着请求进行发送
  3. cookie大小受到限制只能有5kb左右,session能储存的数据能有5mb大小
  4. cookie因为是存放在用户浏览器上,容易被窃取不安全(document.cookie即可设置也可获取cookie);session较为安全,但是若设置较多的session会加重服务器的负担,因为session会在有一段时间内保存在服务器上导致服务器的性能下降。
  5. cookie分为session Cookie:临时cookie,只在浏览器回话保持期间保存;third-party Cookie:本地cookie,会保留在本地一段时间。session storage里面的数据在页面会话结束时会被清除。页面会话在浏览器打开期间一直保持,并且重新加载或恢复页面仍会保持原来的页面会话。在新标签或窗口打开一个页面时会在顶级浏览上下文中初始化一个新的会话

 6、箭头函数与普通函数的区别

1、this的区别:箭头函数的this指向定义时所在的对象,而不是执行时的对象,箭头函数本来就没有自身的this而是使用外层代码块儿的this,因此箭头函数也不能使用bind()、call()、apply()改变this的指向。普通函数的this只有在函数运行时才能知道this的指向,指向调用函数的上下文对象,(.前的对象、window、call,apply,bind内指定的对象)

2、箭头函数没有arguments对象,如需使用可以用rest参数代替

3、不能通过 new来调用函数。即不能实例化箭头函数

4、不可以使用yield命令,因此箭头函数不能用作 Generator 函数。 

7、setTimeout与promise的区别

 js是单线程执行的,就是说同一时间只做一件事,两段js代码不能同时执行,但是js代码也存在异步的情况:setTimeout、setInterval、promise等。浏览器解决异步的具体方案就是event-loop:

Event Loop怎么处理macrotask(宏任务)和microtask(微任务)

任务队列分为microtasks和macrotasks

microtasks: promise,Object.observe...

macrotasks:  setTimeout,setInterval,I/O,UI渲染

执行与原理:同步代码直接执行,异步函数先放在异步队列中,这里的异步队列分为microtask queue和macrotask queue,待同步代码执行完毕后,轮询执行异步队列中的函数,注意这里的microtask queue的优先级高于macrotask queue,所以会先执行promise中的异步函数,再执行setTimeout和setInterval中的函数,同一优先级的情况下先放进队列中的函数先执行。

你可能感兴趣的:(笔试面试积累)