阿里字节前端面试 https://www.nowcoder.com/discuss/412947?type=post&order=time&pos=&page=0&channel=
typeof x undefined
typeof undefined undefined
typeof true boolean
function A() {}
typeof A function
const arr = []
const obj = {}
typeof arr object
typeof obj object
Array.isArray() || instanceof || constructor
Object.prototype.toString.call(obj) ===Object.prototype.toString.call([])
注意:instanceof在判断数组是,即会把数组当做Array类型,又会把数组当做Object类型,都会返回true
减少请求数:合并资源(精灵图),减少http请求数。
加快请求速度:预解析DNS,减少域名数,CDN分支。
缓存:http请求协议缓存,离线缓存,离线数据缓存(localStorage)。
渲染:js/css优化,服务器渲染,加快顺序。
1.JPG是有损压缩格式,PNG是无损压缩格式
2.JPG图片没有透明背景,PNG有透明背景
数的遍历方式
前中后序遍历 递归||非递归 非递归用栈
层次遍历(层次遍历可以设一个队列,把元素放在队列里,每次输出队头元素。)
图的遍历方式
DFS BFS
数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问任何元素
链表恰好相反,链表中的元素在内存中不是顺序存储的,而是通过元素中的指针联系到一起。
数组 遍历方便 插入删除麻烦 链表恰好相反
物理层 | 数据链路层 | 网络层 | 传输层 | 会话层 | 表示层 | 应用层 |
---|---|---|---|---|---|---|
比特 | 帧 | IP | TCP/UDP | http/web Socket |
TCP | UDP |
---|---|
面向连接 | 面向无连接 |
提供可靠的服务 | 提供不可靠的服务 |
面向字节流 | 面向报文(没有阻塞控制 应用场景:IP电话 实时视频会议) |
首部开销20字节 | 首部开销8字节 |
点对点 | 一对多 多对多 |
TCP的逻辑信道信号是全双工的可靠通信 | UDP则是不可靠的信道 |
二进制协议,多路复用(共享连接),数据流,信息头压缩,客户端推送。
200 请求成功
301 永久重定向
302 临时重定向
304 not Modified 未修改
400 客户端错误
401 当前身份验证
403 服务器已经得到请求,但是拒绝执行
500 客户端在执行时发生错误,无法完成请求。
localStorage和Cookie都可以在同源窗口中访问
localStorage存储大小为5M,Cookie的存储大小为4k
localStorage只要存放到本地只要不删除就一直存在,Cookie有过期时间expries
XSS:指的是跨站脚本攻击,是一种代码注入攻击。攻击者通过网站中注入恶意脚本,使之在浏览器上运行,从而盗取用户的信息入Cookie等。
xss的本质是因为恶意网站没有进行过滤,与正常的代码混合在一起了,浏览器没办法辨别哪些脚本是可信的,从而导致恶意代码的执行。
XSS一般分为存储型,反射型和DOM型。
存储型:指的是恶意代码提交到数据库中,当用户请求数据的时,服务器就将其拼接为HTML后返回给用户,从而导致代码的执行。
反射型:指的是攻击者先将含有攻击的代码发送给目标用户,用户打开后,会访问链接对应的服务器,服务器收到链接请求时,会将带有的XSS代码的数据再次发送给用户,此时用户浏览器就会默认执行带有XSS代码的脚本,此时会触发XSS漏洞。
DOM型:指的是xss代码并不需要服务器的参与,触发xss靠的是浏览器的DOM解析,完全是客户端的事情
防范XSS:输入过滤,输出编码,通过设置set-cookie httponly禁止脚本执行cookie。也可以设置只有在https协议下可以发送cookie。
CSRF:指的是跨站请求伪造攻击,攻击者诱惑用户进入一个第三方网站,然后该网站向攻击网站发送跨站请求。如果用户在被攻击网站保留了登录状态,那么攻击者就可以利用这个登录状态,绕过后台的用户验证,冒充用户向服务器执行一些操作。
CSRF攻击的本质是利用了cookie会在同源请求中携带发送给服务器的特点,以此来实现用户的冒充。
一般的CSRF攻击类型由三种:
1.GET类型的CRSF攻击,比如一个网站中的一个img标签里面构建一个请求,当用户打开这个页面时就会自动发送提交。
2.POST类型的CRSF攻击,比如说创建一个表单,然后隐藏它,自动提交这个表单。
3.链接类型的CSRF攻击,比如说创建一个表单,然后隐藏它,自动提交这个表单。
CSRF可以用以下几种方法来防护:
1.同源检测的方法,服务器根据http请求头中的origin或者referer信息来判断请求是否为允许访问的站点。
2.使用CSRF Token来进行验证,服务器向用户返回一个随机数Token,当网站再次发送请求的时候,在请求参数中加入服务器端返回的token,然后服务器对这个token进行验证。这种方法解决了使用cookie单一验证的方法,可能会被冒用的问题,但是这种方法存在一个缺点就是,我们需要给网站中所有的请求都添加上这个token,操作比较繁琐。还有一个问题是一般不会只有一台网站服务器,如果我们的请求经过平衡负载转移到其他的服务器,但是这个服务器的session中没有保存这个token的话,就没有办法验证了。这种情况我们可以通过token构建的方式来解决。
3.使用双重Cookie验证的方式,服务器在用户访问页面时,向请求域名注入一个Cookie,内容为随机字符串,然后当用户向服务器发送请求的时候,cookie取出这个字符串,添加到URL参数中,然后服务器通过对cookie中的数据进行比较,来进行验证。
4.在设置cookie的时候设置Samesite,限制cookie不能作为第三方使用,从而避免被攻击者利用。Samesite一共有两种模式,一种是严格模式,在严格模式下cookie在任何情况下ia都不能作为第三方Cookie使用,在宽松模式下,cookie可以被请求时GET请求,且会发送页面跳转的请求所使用。
1) JSONP原理
利用 标签没有跨域限制的漏洞,网页可以得到从其他来源动态产生的 JSON 数据。JSONP请求一定需要对方的服务器做支持才可以。
2) JSONP和AJAX对比
JSONP和AJAX相同,都是客户端向服务器端发送请求,从服务器端获取数据的方式。但AJAX属于同源策略,JSONP属于非同源策略(跨域请求)
3) JSONP优缺点
JSONP优点是简单兼容性好,可用于解决主流浏览器的跨域数据访问的问题。缺点是仅支持get方法具有局限性,不安全可能会遭受XSS攻击。
4) JSONP的实现流程
声明一个回调函数,其函数名(如show)当做参数值,要传递给跨域请求数据的服务器,函数形参为要获取目标数据(服务器返回的data)。
创建一个