简答题:
1.简述Http的POST和GET的区别。
2.简述cookie和session、localstroage的区别。
3、简述Servlet请求分派与重定向的区别?
4.什么是前后端分离,它有哪些好处?
5、什么是消息服务,消息服务有哪些优点?
6、什么是SQL注入攻击?mybatis防止注入攻击有哪些措施?
7、什么是跨域,如何解决跨域访问?
8、设计一个基于redis的图形验证码(captacha),前端和后端有哪些需要注意的技术要点?
9、设有一个List
10、设有一个HashMap<String,String>,请写出两种遍历方法,在屏幕打印输出key和value的代码。
11、用SpringBoot实现一个文件上传和下载系统,需要注意哪些问题?
1.简述Http的POST和GET的区别。
GET请求能够被缓存。
GET请求会保存在浏览器的浏览记录中。
以GET请求的URL能够保存为浏览器书签
GET请求方式将请求信息放在URL后面,请求信息和URL之间以?隔开,URL本身是有长度限制的,Get数据长度是有限制的
而POST方式都不具备上述功能。POST请求方式将请求信息放置在报文体中
(一)从HTTP报文来看
GET请求方式将请求信息放在URL后面,请求信息和URL之间以?隔开,请求信息的格式为键值对,例如 https://baike.baidu.com/item/Python/407313?fr=aladdin,这种请求方式将请求信息直接暴露在URL中,安全性较低。另外从报文结构上来看,由于请求信息放置在URL中,因此请求报文中不需要报文体。
POST请求方式将请求信息放置在报文体中,相获得请求信息必须解析报文,因此安全性较GET方式要高一些(事实上要获得报文体中的请求信息也是很容易的,因此安全性上两者并没有太多的区别,具体解决传输过程中的安全性问题还要靠HTTPS),此外在请求报文中含有报文体。
由于GET中的请求信息放置在URL中,因此是有长度限制的,因为URL本身是有长度限制的。POST中的请求信息是放置在报文体中,因此对数据长度是没有限制的。
2.简述cookie和session、localstroage的区别。
介绍
cookie是网站为了标示用户身份而储存在用户本地终端上的数据;cookie数据始终在同源的http请求中携带(即使不需要),也会在浏览器和服务器间来回传递。
sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存;
存储大小:
cookie数据大小不能超过4k sessionStorage和localStorage虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。
有效时间:
localStorage存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;
sessionStorage数据在当前浏览器窗口关闭后自动删除;
cookie设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭
3.简述Servlet请求分派与重定向的区别?
sendRedirect() 重定向。forward()请求分派。
1.forward只能将请求转发给同一个web应用中的其它组件。sendRedirect()不仅可以访问当前应用程序的其他资源,还可以重定向到其他站点的资源上。请求指派只能指派到内部地址,而重定向既可以指派的内部地址又可以指派到外部地址。
2.重定向的访问过程结束后,浏览器地址中的url会发生改变,由原来的变成重定向的目标URL。而请求转发过程结束后,浏览器地址栏保持不变。请求指派指派过程中url不变,用户无法感知,重定向url会改变
3.请求分派的发起者和被调用者共享相同的request实例和response实例,它们属于同一个“请求/响应”过程。而重定向的发起者和被调用者使用各自的request和response实例,它们各自属于独立的“请求/响应”过程
4.什么是前后端分离,它有哪些好处?
开发阶段,前后端工程师约定好数据交互接口,实现并行开发和测试;在运行阶段前后端分离模式需要对web应用进行分离部署,前后端之前使用HTTP或者其他协议进行交互请求。
好处在于
在前后端分离的应用模式中,后端仅返回前端所需的数据,不再渲染HTML页面,不再控制前端的效果。至于前端用户看到什么效果,从后端请求的数据如何加载到前端中,都由前端自己决定,网页有网页的处理方式,App有App的处理方式,但无论哪种前端,所需的数据基本相同,后端仅需开发一套逻辑对外提供数据即可。
在前后端分离的应用模式中 ,前端与后端的耦合度相对较低。
在前后端分离的应用模式中,我们通常将后端开发的每个视图都称为一个接口,或者API,前端通过访问接口来对数据进行增删改查。
5.什么是消息服务,消息服务有哪些优点?
消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建、发送、读取消息等
好处在于
1、高内聚低耦合,使用消息服务的客户机不需要实现通用接口,不需要了解对方。消息服务提供了标准接口。
2、不直接通信。客户机不直接对话,而通过中间媒介,消息服务扮演 缓冲区,并提供 安全控制。
3、保证消息传递。 JMS的提供者保持消息持久,直到客户机接受为止。
4、异步通信。客户端获取消息的时候,不需要主动发送请求,消息会自动发送给可用的客户端
5、一对多、多对多和多对一通信。
6.什么是SQL注入攻击?mybatis防止注入攻击有哪些措施?
写Java代码时,当采用MyBatis执行sql语句时,存在模糊查询的方法。
存在表达式${} 和 #{}。当使用美元符号$容易存在sql注入攻击方式
sql注入是指攻击者利用SQL漏洞,绕过系统约束,越权获取数据的攻击方式
防护一:sql语句不在使用${}表达式,改为#{}
防护二:采用阿里的druid数据连接池
防护三:使用预编译语句PreparedStatement进行预处理
7.什么是跨域,如何解决跨域访问?
跨域指的是浏览器不能执行其它网站的脚本,
A页面访问B页面的资源,如果A,B页面的域名、端口、协议、IP其中一个不同,这种行为都叫跨域;
它是由浏览器的同源策略造成的,是浏览器对JavaScript 施加的安全限制。
什么是同源?
就是协议、IP、域名、端口都相同
(1)服务器代理
浏览器有跨域限制,但是服务器不存在跨域问题,所以可以由服务器请求所要域的资源再返回给客户端
(2)前端通过jsonp实现跨域
基本原理就是通过动态创建script标签,然后利用src属性进行跨域
不过只能发送get请求
(3)跨域资源共享
后端通过cors,cross-origin resource sharing即跨资源共享来解决跨域问题
(4)使用postMessage、location.hash跨域
8.设计一个基于redis的图形验证码(captacha),前端和后端有哪些需要注意的技术要点?
redis数据一致性问题
前端:
图片验证一次性,uuid图片唯一性
数据指定类型,支持4位验证码,字符以英文和数字组成
支持简单干扰
后端:
处理好数据的转换
配置一个redis数据库,用于存放图像验证码
验证前端提交的验证码和后台验证码是否一致,超时未验证失效
9.设有一个List,请用java语言写出两种遍历方法,在屏幕打印输出每个元素的值的代码
1.使用for循环。其代码表示如下:
for(int i = 0;i<list.size();i++){
System.out.println(list.get(i));
}
2.使用foreach循环(JDK5.0以上版本可支持)。其代码如下:
for(String string:list){
System.out.println(string);
}
10.设有一个HashMap<String,String>,请写出两种遍历方法,在屏幕打印输出key和value的代码。
1、keySet的用法
Map<String,String> map = new HashMap<>();
for (String key : map.keySet()) {
System.out.println("Key = " + key);
System.out.println("val = " + map.get(key));
}
2、entrySet的用法
Map<String,String> map = new HashMap<>();
for (Map.Entry<String,String> entry : map.entrySet()) {
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
11.用SpringBoot实现一个文件上传和下载系统,需要注意哪些问题?
1、文件的上传
1数据的获取 2.数据的提交 3.数据的解析和处理
可能会遇到的问题
1、上传文件太大问题
上传的文件超过1m的时候需要修改配置文件
2、文件临时目录问题
3、上传资源后就能立马访问的问题
4、文件重名的问题(导致旧文件被覆盖)
可以使用UUID(唯一识别的通用码),保证文件名唯一;
5.文件上传后内容是否会乱码,尤其是中文,编码设为utf-8
6.如何存储文件信息入数据库:上传文件成功将路径保存到数据库中
7.文件格式是否符合要求(文件名称是否有特殊符号,比如+,空格等,在上传的时候最好过滤掉)
8.为保证服务器安全,上传文件应该放在外界无法直接访问的目录下,比如放于WEB-INF目录下
文件下载