别人的面经 一

阿里字节前端面试 https://www.nowcoder.com/discuss/412947?type=post&order=time&pos=&page=0&channel=

JavaScript 数据类型以及 typeof 返回值

typeof x   undefined
typeof undefined  undefined
typeof true   boolean
function A() {}
typeof A function
 
const arr = [] 
const obj = {}
typeof arr object
typeof obj object

如何区分 arr 和 obj

Array.isArray() || instanceof || constructor

Object.prototype.toString.call(obj) ===Object.prototype.toString.call([])

注意:instanceof在判断数组是,即会把数组当做Array类型,又会把数组当做Object类型,都会返回true

前端性能优化

减少请求数:合并资源(精灵图),减少http请求数。

加快请求速度:预解析DNS,减少域名数,CDN分支。

缓存:http请求协议缓存,离线缓存,离线数据缓存(localStorage)。

渲染:js/css优化,服务器渲染,加快顺序。

JPG和PNG的区别

1.JPG是有损压缩格式,PNG是无损压缩格式

2.JPG图片没有透明背景,PNG有透明背景

树和图的遍历方式

数的遍历方式

前中后序遍历 递归||非递归 非递归用栈

层次遍历(层次遍历可以设一个队列,把元素放在队列里,每次输出队头元素。)

图的遍历方式

DFS BFS

数组和链表的区别

数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问任何元素

链表恰好相反,链表中的元素在内存中不是顺序存储的,而是通过元素中的指针联系到一起。

数组 遍历方便 插入删除麻烦 链表恰好相反

ios七层模型

物理层 数据链路层 网络层 传输层 会话层 表示层 应用层
比特 IP TCP/UDP http/web Socket

TCP 和 UDP 的区别。

TCP UDP
面向连接 面向无连接
提供可靠的服务 提供不可靠的服务
面向字节流 面向报文(没有阻塞控制 应用场景:IP电话 实时视频会议)
首部开销20字节 首部开销8字节
点对点 一对多 多对多
TCP的逻辑信道信号是全双工的可靠通信 UDP则是不可靠的信道

HTTP 2.0 新增

二进制协议,多路复用(共享连接),数据流,信息头压缩,客户端推送。

HTTP状态码

200 请求成功

301 永久重定向

302 临时重定向

304 not Modified 未修改

400 客户端错误

401 当前身份验证

403 服务器已经得到请求,但是拒绝执行

500 客户端在执行时发生错误,无法完成请求。

localStorage和Cookie

localStorage和Cookie都可以在同源窗口中访问

localStorage存储大小为5M,Cookie的存储大小为4k

localStorage只要存放到本地只要不删除就一直存在,Cookie有过期时间expries

Cookie 可能存在的问题,简单介绍 XSS 和 CSRF。

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

1) JSONP原理

利用 标签没有跨域限制的漏洞,网页可以得到从其他来源动态产生的 JSON 数据。JSONP请求一定需要对方的服务器做支持才可以。

2) JSONP和AJAX对比

JSONP和AJAX相同,都是客户端向服务器端发送请求,从服务器端获取数据的方式。但AJAX属于同源策略,JSONP属于非同源策略(跨域请求)

3) JSONP优缺点

JSONP优点是简单兼容性好,可用于解决主流浏览器的跨域数据访问的问题。缺点是仅支持get方法具有局限性,不安全可能会遭受XSS攻击。

4) JSONP的实现流程

  • 声明一个回调函数,其函数名(如show)当做参数值,要传递给跨域请求数据的服务器,函数形参为要获取目标数据(服务器返回的data)。

  • 创建一个

    
                        
                        

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