• web开发简答题


    简答题:

    1.简述Http的POST和GET的区别。
    2.简述cookie和session、localstroage的区别。
    3、简述Servlet请求分派与重定向的区别?
    4.什么是前后端分离,它有哪些好处?
    5、什么是消息服务,消息服务有哪些优点?
    6、什么是SQL注入攻击?mybatis防止注入攻击有哪些措施?
    7、什么是跨域,如何解决跨域访问?
    8、设计一个基于redis的图形验证码(captacha),前端和后端有哪些需要注意的技术要点?
    9、设有一个List,请用java语言写出两种遍历方法,在屏幕打印输出每个元素的值的代码
    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目录下

    文件下载

  • 相关阅读:
    java基础——DecimalFormat
    剑指——重建二叉树
    error error: illegal character: 'u3000'
    Android: Unhandled exception java.net.malformedurlexception 异常笔记
    Android获取系统时间
    java基础——hashCode笔记
    golang 红黑树
    golang 实现跳表skiplist
    快排
    堆排序
  • 原文地址:https://www.cnblogs.com/lavard/p/15240730.html
Copyright © 2020-2023  润新知