虾皮3

本文详细探讨了JavaScript事件机制、防止冒泡的方法,以及跨域解决方案。深入解析了闭包原理和常见的HTTP状态码/请求头。同时介绍了Cookie和Session的区别,以及如何优化DOM操作以减少回流重绘。
摘要由CSDN通过智能技术生成

一面(大概3-40分钟)

 js事件机制,如何阻止事件冒泡,事件委托原理
 跨域方案
 闭包原理应用
 列举http 状态码/请求头(这里聊了挺多,基本上把我知道的都挖出来了,捂脸.jpg)

常见的HTTP请求头

请求头说明
Accept-Charset用于指定客户端接受的字符集
Accept-Encoding用于指定可接受的内容编码,如Accept-Encoding:gzip.deflate
Accept-Language用于指定一种天然语言,如Accept-Language:zh-cn
Host用于指定被请求资源的Internet主机和端口号,如Host:www.taobao.com
User-Agent客户端将他的操做系统、浏览器和其余属性告诉服务器
Connection当前链接是否保持,如Connection:Keep-Alive

常见的HTTP响应头

响应头说明
Server使用的服务器名称,如Server:Apache/1.3.6(Unix)
Content-Type用来指明发送给接收者的实体正文的媒体类型,如Content-Type:text/html;charset=GBK
Content-Encoding与请求报头Accept-Encoding对应,告诉浏览器服务端采用的是什么压缩编码
Content-Language描述了资源使用的天然语言,与Accept-Language对应
Content-Length指明实体正文的长度,用以字节方式存储的十进制数字来表示
Keep-Alive保持链接的时间,如Keep-Alive:timerout=5,max=120

常见的HTTP状态码

状态码说明
200客户端请求成功
302临时跳转,跳转的地址经过Location指定
400客户端请求有语法错误,不能被服务器识别
403服务器受到请求,可是拒绝提供服务
404请求的资源不存在
500服务器发生不可预期的错误


 cookie 的一些字段属性

一个域名下面可能存在着很多个cookie对象。

name  字段为一个cookie的名称。

value  字段为一个cookie的值。

domain  字段为可以访问此cookie的域名。

非顶级域名,如二级域名或者三级域名,设置的cookie的domain只能为顶级域名或者二级域名或者三级域名本身,不能设置其他二级域名的cookie,否则cookie无法生成。

顶级域名只能设置domain为顶级域名,不能设置为二级域名或者三级域名,否则cookie无法生成。

二级域名能读取设置了domain为顶级域名或者自身的cookie,不能读取其他二级域名domain的cookie。所以要想cookie在多个二级域名中共享,需要设置domain为顶级域名,这样就可以在所有二级域名里面或者到这个cookie的值了。
顶级域名只能获取到domain设置为顶级域名的cookie,其他domain设置为二级域名的无法获取。

path  字段为可以访问此cookie的页面路径。 比如domain是abc.com,path是/test,那么只有/test路径下的页面可以读取此cookie。

expires/Max-Age   字段为此cookie超时时间。若设置其值为一个时间,那么当到达此时间后,此cookie失效。不设置的话默认值是Session,意思是cookie会和session一起失效。当浏览器关闭(不是浏览器标签页,而是整个浏览器) 后,此cookie失效。

Size  字段 此cookie大小。

http  字段  cookie的httponly属性。若此属性为true,则只有在http请求头中会带有此cookie的信息,而不能通过document.cookie来访问此cookie。

secure   字段 设置是否只能通过https来传递此条cookie


 cookie,session的区别

Cookie和Session的区别


 强缓存协商缓存具体过程
 如何隐藏一个元素
 padding,margin百分比

对元素的margin设置百分数时,百分数是相对于父元素的width计算,不管是margin-top/margin-bottom还是margin-left/margin-right。当然,padding的原理也是一样的。


 链表的优缺点

  优点:
              (1)插入和删除速度快,保留原有的物理顺序,在插入或者删除一个元素的时候,只需要改变指针指向即可。 
              (2)没有空间限制,存储元素无上限,只与内存空间大小有关. 
              (3)动态分配内存空间,不用事先开辟内存
              (4)是内存的利用率变高

               
    缺点:
              (1)占用额外的空间以存储指针,比较浪费空间,不连续存储,malloc函数开辟空间碎片比较多) 
              (2)查找速度比较慢,因为在查找时,需要循环链表。 
    时间复杂度 :查找操作为O(n) ,插入和删除操作为O(1)。


二面 (大概40分钟)

 讲一下实习经历和项目经历
 js 作用域链
文件上传进度展示和大文件断点续传 
(这个其实没什么经验,说了下HTML5 File API和相关的思路就过了)

实现一个大文件上传和断点续传


 回流和重绘,什么情况触发

大多数浏览器都会通过队列化修改并批量执行来优化重排过程,浏览器会将修改操作放入队列里,直到过了一段时间或者操作达到了一个阈值,才清空队列。
但是,当获取布局信息的操作 时,会强制队列刷新!

offsetTop offsetLeft offsetWidth offsetHeight
scrollTop scrollLeft scrollWidth scrollHeight
clientTop clientLeft clientWidth clientHeight
getComputedStyle()
getBoundingClientRect
 

如何减少回流和重绘
(1) 合并多次对DOM和样式的修改,依次处理,可以使用
cssText : el.style.cssText += '...'
修改CSS的class : el.className += 'active'
(2) 批量修改DOM
当需要对DOM进行一系列修改时,如何减少回流重绘次数:

使元素脱离文档流
对其进行多次修改
将元素带回文档中
如何让DOM元素脱离文档流?

隐藏元素,应用修改,重新显示(会在展示和隐藏节点的时候,产生两次重绘)
使用文档片段在当前DOM之外构建一个子树,再把它拷贝回文档
将原始元素拷贝到一个脱离文档的节点中,修改节点后,再替换原始的元素
(3)避免触发同步布局事件
利用一个变量来保存属性值,例如:const width = box.offsetWidth

(4)对于复杂的动画效果,使用绝对定位让其脱离文档流
(5)CSS3硬件加速(GPU加速)
常见的触发硬件加速的css属性:

transform
opacity
filters
Will-change
使用css3硬件加速,可以让上述这些动画不会引起回流重绘,但是对于动画的其他属性,比如background-color,还是会引起回流重绘的


 vue 和 react 的区别
 做了一道笔试的变形题,找出字符串中第一个连续三个递增的数字并返回
(这里想吐槽一下,我理解递增不就是+1吗,面试官说是大于)

HR面

实习经历,校园经历,在校成绩,奖励情况
专业不匹配为什么做前端
家乡,工作城市偏好
希望公司有什么价值观
offer 情况,期望薪资
如果发了offer觉得什么时候入职比较合适(没想到问这个,以为听错了)
3-12 

offer call

顺便不要脸地推荐一下平时练习前端和算法的一些代码(里面也有两道shopee笔试题):

https://github.com/rosie597/practice

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值