1. 对前端的理解
前端在用户和后端之间起到了一个承上启下的作用,一方面要处理好html、css、js,保证页面美观、交互性好,有一个良好的用户体验;一方面要与后端进行数据交互,处理好浏览器的兼容问题,也要不断的优化代码,尽可能快速高效的处理好后端数据并渲染到用户界面上。
2. 一个url从输入到网址栏到渲染出整个页面发生了什么(对url进行解析,分别解析css、js,对页面进行渲染。。。)
浏览器向DNS服务器发起请求,找到url对应的IP地址,然后将IP地址返回给浏览器,浏览器将IP地址和需要请求的参数一并发送给对应的服务器,服务器发送TCP请求(TCP三次握手、http请求响应信息、关闭TCP)
3. 对盒模型的理解
盒模型分为标准盒模型和ie盒模型,两种盒模型对width的计算方式不同。
当两个块级元素垂直放置在同一个BFC(Block Formatting Context 块级格式上下文)中时,两个元素在垂直方向上发生重叠,重叠的大小为第一个元素margin-bottom与第二个元素margin-top的最大值。具有BFC特性的元素像是一个大容器,容器内部的元素不会影响到容器外部的元素。
BFC只有块级元素才参与,能够解决margin塌陷的问题
创建BFC的方法有:①float不为none ②position为absolute或fixed ③display为inline-block或table-cells或flex ④overflow为auto、hidden、scroll
4. cookie、localstorage、sessionstorage的区别,cookie与localstorage的区别
(1)localStorage将数据存储在浏览器本地,数据需要用户手动清除才会消失,同一个浏览器中共享localStorage中的数据。
(2)sessionStorage将数据存储在浏览器中,在当前页面会话结束后数据被清除。在当前页面未被关闭,通过这个页面打开同源窗口时数据不会被清除,只有当页面关闭后数据才会清除。同一个浏览器打开同一个链接的不同窗口生成的sessionStorage不同。
(3)cookie数据存储在浏览器本地,可以设置失效时间,默认的失效时间是浏览器关闭的时间。cookie在浏览器和服务器之间来回传递,
5. 登录注册,如何判断当前页面是处于登录状态
当用户登录系统之后进行内部其他页面跳转,其他页面访问时保证当前用户处于登录状态的方法有:
(1)用户输入用户名和密码发送给后端进行验证,验证成功后后端返回给前端一个cookie,通过cookie的有误来判断用户是否处于登录状态,用户退出登录后删除cookie
(2)用户输入用户名和密码发送给后端进行验证,前端设置cookie(如:isLogin),当后端验证成功则isLogin=true,根据isLogin去判断用户登录是否成功,用户退出登录后删除cookie或者直接设置isLogin=false
(3)用户输入用户名和密码,前端向后端发送请求,后端验证成功后返回一个token,前端将这个token存储在本地,往后每次向后端发送请求都携带上这个token,token具有一定的有效期,前端向后端发送的token没有过期时可以进行数据交互,如果过期,就向前端发送一个状态码告诉前端登录已过期,然后前端删除存储在本地的token。另外,在用户操作过程中,如果token过期,可以再设置refresh token,后端将过期状态发送给前端后,前端使用refresh token再重新申请一个新的token进行数据访问。
6. http的理解
http基于TCP/IP协议进行数据传输,http协议只能由客户端发起请求,服务器端响应。早期的http0.9和1.0版本使用非连续连接,每次只能处理一次连接请求,请求结束后直接断开连接。http1.1开始使用连续连接客户端与服务器端用于传输http数据的停车票链接不会被关闭,一个连接可以多次访问服务器,节省了传输时间。http是无状态协议,对于事务处理没有记忆,如果后续的事务需要上一次的事务结果,则无法获取到数据,必须进行重传,这也导致每一次的数据传输量都会逐渐变大。
7. get和post的区别
(1)get通过url传递数据,会限制数据长度;post通过request body传递数据
(2)get会被浏览器缓存,因为使用的是url请求,但post请求不能缓存,因为请求体无法缓存
(3)get的url有长度限制,因此常用于取回数据,post用于提交数据
(4)post比get更安全,因为post是请求体,不会在url上被劫持
(5)get产生一个TCP数据包,使用get请求时浏览器将http header和data一并发送出去,服务器响应200;post产生两个TCP数据包,浏览器先发送header,服务器响应100continue,然后浏览器再发送data,服务器响应200
8. 状态码(3开头的。。)
9. 闭包。。。
闭包是指能够访问其他函数内部变量的函数,在闭包中使用的其他函数的内部变量不会被js的垃圾回收机制删除,可以始终保存在内存中,避免了全局变量被污染,允许私有变量的存在。但闭包使函数内部变量长期存在内存中,会导致内存占用过大,而且使用不当会导致内存泄漏,可以在使用结束后将不再使用的变量删除。。
10. 跨域
(1)使用jsonp。直接用script标签的src属性进行跨域访问
(2)CORS跨域。修改请求头Access-Control-Allow-Origin的值为*,允许访问跨域网址
(3)document.domain在主域名相同,子域名不同时使用,在两个恶页面中设置相同的document.domain
(4)ngix反向代理。前端serve访问ngix属于同源访问,而ngix对服务器端的转发请求不会触发浏览器同源策略