前后端分离项目面试总结

一:是否登录状态

服务端登录的时候,给分配一个session用于存储数据,同时将sessionID返回给浏览器,浏览器通过cookie把sessionID存储起来,下次访问时携带上,服务端就可以通过sessionID来确定用户是否登录。

当用户请求页面,一般需要先登录,用户第一次输入用户名和密码之后,前台发送post请求,后台获取用户信息,通过查询数据库来验证用户信息是否正确,如果验证通过,则会开辟一块session空间来储存用户数据,并且同时生成一个cookie字符串,由后台返回给前台,前台接收后,会把这个cookie字符串储存到浏览器的cookie空间中,这个cookie就相当于一把钥匙,可以打开后台存储对应用户信息的锁,当用户下一次请求的时候,客户端便会自动携带这个cookie去请求服务器,服务器识别后,就会读取session中的用户信息,这样用户就可以直接访问,就不需要再输入用户名密码来验证身份了。

缺点:需要服务端存储,用户量多的情况下就需要占大量内存,成本高,因此出现了token技术...

二:session和cookie的区别

保存位置

cookie保存在浏览器端,session保存在服务端。

使用方式

cookie如果在浏览器端对cookie进行设置对应的时间,则cookie保存在本地硬盘中,此时如果没有过期,则就可以使用,如果过期则就删除。如果没有对cookie设置时间,则默认关闭浏览器,则cookie就会删除。

session:我们在请求中,如果发送的请求中存在sessionId,则就会找到对应的session对象,如果不存在sessionId,则在服务器端就会创建一个session对象,并且将sessionId返回给浏览器,可以将其放到cookie中,进行传输,如果浏览器不支持cookie,则应该将其通过encodeURL(sessionID)进行调用,然后放到url中。

存储内容

cookie只能存储字符串,而session存储结构类似于hashtable的结构,可以存放任何类型。

存储大小:

cookie最多可以存放4k大小的内容,session则没有限制

应用场景

cookie可以用来保存用户的登陆信息,如果删除cookie则下一次用户仍需要重新登录,session就类似于我们拿到钥匙去开锁,拿到的就是我们个人的信息,一般我们可以在session中存放个人的信息或者购物车的信息。

弊端

cookie的大小受限制,cookie不安全,如果用户禁用cookie则无法使用cookie。如果过多的依赖session,当很多用户同时登陆的时候,此时服务器压力过大。sessionId存放在cookie中,此时如果对于一些浏览器不支持cookie,此时还需要改写代码,将sessionID放到url中,也是不安全。

三:Servlet的生命周期

定义:Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,是运行在 Web 服务器或应用服务器上的程序。

作用:它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。主要功能在于收集来自网页表单的用户输入,交互式地浏览和生成数据,还可以生成动态Web内容。

生命周期

实例化 :Servlet 容器创建 Servlet 的实例

初始化 :该容器调用init() 方法

请求处理 :如果请求Servlet,则容器调用 service()方法

服务终止 :销毁实例之前调用destroy() 方法

四:为什么要重写doget

在Servlet中我们尽量重写doGet和doPost方法,而不直接重写Service方法(简言之就是Service里面实现了一些其他好的方法,重写后就得不到这种好处了),这样第一次加载完成之后,接下来再访问能提高加载的速度,特别是静态资源多的一些网站。

五:数据库连接怎么传给前端

前端使用AJAX或者表单提交的方式将请求发送给后端,后端根据前端发过来的请求重写doGet()或者doPost()请求去执行相应的业务逻辑,首先使用request,getparameter()方式接收前端传过来的参数,然后进行设置相应类型和编码,把数据存在PrintWriter(),在调用respons.getWriter()获取printWriter对象,传给前端。

六:重定向有什么特点

当地址栏发生变化时,可以跳转到重定向的网页。

重定向是2次请求,不能使用request对象共享数据

七:final特点和static特点

final:

被修饰的类不能被继承

被修饰的方法不能被重写

被修饰的常量不能被改变

static:

全局唯一,不可被二次赋值,必须由初始值

静态方法只能调用静态属性

不可修饰构造方法

修饰的方法不能被重写

八:get和post的区别

  1. get因为参数会放在url中,所以隐私性,安全性较差,请求的数据长度是有限制的,不同的浏览器和服务器不同,一般限制在 2~8K 之间,更加常见的是 1k 以内;

post请求是没有的长度限制,请求数据是放在body中;

  1. get请求可以被缓存,post请求不会被缓存。

  2. get请求只能进行url编码(appliacation-x-www-form-urlencoded),post请求支持多种(multipart/form-data等)。

  3. get请求刷新服务器或者回退没有影响,post请求回退时会重新提交数据请求。

底层:

GET 和 POST都是http请求方式,底层都是 TCP/IP协议;通常GET 产生一个 TCP 数据包;POST 产生两个 TCP 数据包(但firefox是发送一个数据包),

对于 GET 方式的请求,浏览器会把 http header 和 data 一并发送出去,服务器响应 200(返回数据)表示成功;而对于 POST,浏览器先发送 header,服务器响应 100, 浏览器再继续发送 data,服务器响应 200 (返回数据)。

九:v-if和v-show的区别

1.v-if 和 v-show 都是用来控制元素渲染, v-if 是根据后面数据的真假来进行渲染来判断

2.DOM的添加删除等操作 v-show只是在修改元素的css样式(display属性值)

3.v-show不管初始条件是否为真,都会被渲染

  1. v-if 有更高的切换消耗,不适合做频繁的切换,v-show 有更高的出事渲染消耗,适合做频繁的切换
相关推荐
isolusion1 分钟前
Springboot的创建方式
java·spring boot·后端
web1508509664127 分钟前
在uniapp Vue3版本中如何解决webH5网页浏览器跨域的问题
前端·uni-app
Yvemil729 分钟前
《开启微服务之旅:Spring Boot Web开发举例》(一)
前端·spring boot·微服务
zjw_rp29 分钟前
Spring-AOP
java·后端·spring·spring-aop
木子Linux32 分钟前
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
linux·运维·服务器·centos·云计算
Oneforlove_twoforjob42 分钟前
【Java基础面试题033】Java泛型的作用是什么?
java·开发语言
不惑_1 小时前
小白入门 · 腾讯云轻量服务器部署 Hadoop 3.3.6
服务器·hadoop·腾讯云
TodoCoder1 小时前
【编程思想】CopyOnWrite是如何解决高并发场景中的读写瓶颈?
java·后端·面试
天涯学馆1 小时前
解锁WebAssembly与JavaScript交互的无限可能
前端·webassembly
向宇it1 小时前
【从零开始入门unity游戏开发之——C#篇24】C#面向对象继承——万物之父(object)、装箱和拆箱、sealed 密封类
java·开发语言·unity·c#·游戏引擎