2020Java初级面试题一Web+SringMVC

前言

  • 少年易老学难成,一寸光阴不可轻。未觉池塘春草梦,阶前梧叶已秋声 。—朱熹《劝学诗》
  • 勤奋才是改变你命运的唯一捷径。
  • 整理不易,各位看官点赞再看更舒适,养成好习惯(●´∀`●)

Web

1.1 说一说Servlet生命周期

servlet的生命周期是初始化(init)、服务(service)、销毁(destroy)
1.初始化(init):当服务器启动时进行初始化,只初始化一次
2.服务(service):方法被调用时进行服务,在项目启动期间可以进行多次服务
3.销毁(destory):当服务器关闭时进行销毁。只销毁一次

1.2 什么是jsp?jsp和Servlet有什么区别?

Servlet是服务器端的程序
JSP是服务器页面程序
JSP本质上就是一个Servlet,在访问jsp时,在服务器端会将jsp先转换成servlet,再将生产的servlet的结果响应给浏览器。
jsp是html页面中内嵌Java代码,侧重页面显示;Servlet是中书写Java代码,侧重逻辑控制;

1.3 Servlet接口中有哪些方法?

1.init(ServletConfig):初始化方法,第一次请求前执行,完成servlet初始化工作
2.service(ServletRequest,ServletResponse):执行方法,一次请求执行一次。
3.destroy():销毁方法,Servlet对象应该从服务中被移除的时候,容器会调用该方法进行销毁操作
4.getServletConfig():获得ServletConfig配置对象,包括初始化参数等。
5.getServletInfo():获得Servlet描述,一般没有用。

1.4 Servlet 3.0 中的异步处理指的是什么?

异步处理允许Servlet重新发起一条新线程去调用 耗时业务方法,这样就可以避免等待

1.5 Servlet中如何获取用户提交的查询参数或表单数据?

1、request.getParameterValues(“参数”); //获得指定参数名的一组参数值 (String[])
2、request.getParameter(“参数”); //获得指定参数名的一个参数值(String) , UserServlet?username=jack , 通过username获得值jack

1.6 什么情况下调用doGet()和doPost()?

1、doGet():地址栏url方式访问、超链接访问、以及form表单中的method属性值为get方式访问,则调用doGet()方法
2、doPost():form表单中的method属性值为post方式访问,则调用doPost()方法

1.7 什么是上下文对象?如何获得上下文对象?

ServletContext对象是上下文对象 Servlet直接调用getServletContext方法返回ServletContext对象

1.8 servlet是线程安全的吗

Servlet不是线程安全的。Servlet 默认是单例模式,如果提供成员变量,多个线程对成员变量进行操作,将发生并发问题,所以不安全。
如果不提供成员变量,或提供成员变量但不使用,可以解决并发问题

1.9 如何在基于Java的Web项目中实现文件上传和下载?

  • 文件上传
    1.使用fileupload完成上传功能,需要添加commons-fileupload相关Jar包
    2.表单提交请求编码类型必须是enctype=“multipart/form-data”,请求方式必须是post
    3.服务器如果是Servlet需要使用fileupload的提供的工具类ServletFileUpload完成文件上传。
    4.服务器如果是Spring mvc,通过MultipartFile类型接收上传数据,从而完成文件上传。
  • 文件下载
    1.提供一个超链接,可以下载浏览器不能解析的资源
    2.响应头 + 响应流:如果下载资源浏览器可以解析,需要自定义实现类,添加一个下载使用的响应头content-disposition确定下载时浏览器显示的文件名,然后以流的方式将资源响应给浏览器即可

1.10 get请求和post请求有何区别

  1. 表现形式:get在url中拼凑请求参数。Post请求参数在请求体中;
  2. 安全性:get请求参数追加在路径上,可见不安全,post请求参数在请求体中,一般人不可见,较安全。
  3. 数据大小:get提交数据有限,post无限。

1.11 forward和redirect的区别

1.地址栏是否改变:forward浏览器端网址不会发生变化,redirect浏览器端地址会变成;
2.是否可共享请求参数:forward是转发,属于同一个请求,数据可以传递;redirect是两次请求,数据不能传递;
3.是否可站外跳转:forward一般用于网站内部跳转,redirect可在站内跳转,也可跳转到其它网站。

1.12 JSP九大内置对象

request:请求对象
response:响应对象
session:回话对象
pageContext:页面上下文对象
application:类型是ServletContext,表示servlet上下文对象,可以在整个web项目中共享资源。
out 输出对象
page JSP网页本身
config Servlet的配置对象
exception 异常对象

1.13 列举page指令中至少三种常用属性,并说明其含义

session属性:表示当前页面是否支持session,如果为false,则在JSP页面中不能使用session对象。属性的默认值为true。
info属性:设置JSP页面的相关信息。
contentType属性:设置JSP的MIME类型和字符编码。

1.14 讲解JSP中的四种作用域

application:在当前web项目中有效
session:在当前会话中有效
request:在当前请求中有效
page:在当前页面有效

1.15 如何实现JSP或Servlet的单线程模式?

通过page指令设置<%@ page isThreadSafe=“false”%>,默认Servlet支持多线程模式

1.16 JSP中的<% %>和<% =%>有什么区别?

<% %> 用于编写Java代码,语法与方法体一致。
<%= %>将结果输出到浏览器,语法与方法的实际参数一致。

1.17 jsp中解决乱码的几种方式

1.JSP页面显示中文乱码:JSP页面设置为项目对应编码:contentType=“text/html; charset=UTF-8”
2.URL传递参数中文乱码:修改Tomcat的conf目录下的server.xml配置文件, 元素中添加 URIEncoding=“UTF-8” 属性解决;
3.表单提交中文乱码:采用过滤器Filter统一解决乱码问题

1.18 说说你对过滤器Filter理解,以过滤器常见应用场景

  1. 过滤器Filter是对访问资源拦截的一种技术。
  2. 默认在请求前拦截,在访问请求资源前完成需要的操作后,放行即可访问资源,资源访问后,再回到过滤器进行后续的处理,最后请求结束。
    3.filter可以通过dispatcher来修饰拦截时机。
    REQUEST:请求前拦截,默认值
    FORWARD:请求转发前拦截
    INCLUDE:请求包含前拦截
    ERROR:显示错误页面前拦截
  3. 应用场景:统一编码、统一用户认证、屏蔽非法文字,进行响应数据压缩,等等

1.19 说说监听器的概念和常见使用场景

  1. 什么是WEB监听器:所谓的WEB监听器是指对WEB环境中Request、Session和ServletContext等的监听,当被监视的对象的创建、销毁或者属性发生变化时,便调用相应的方法进行处理。
  2. 使用场景:网站在线人数统计、监听用户的行为(管理员踢人),等等
  3. 监听器的底层原理采用的观察者模式。

1.20 cookie是什么?session是什么?,以及它们之间的区别

cookie是浏览器技术, 是服务器发送过来的, 保存在浏览器
session是服务器技术, 数据保持在服务器,通过cookie与浏览器建立联系, 保证用户在切换页面时保持会话
区别:
1, cookie只能存储英文字符串, session可以存储任意数据
2. cookie只能存储少量数,session可以存储大量数据
3, cookie默认生命周期是当前会话, 关闭浏览器自动销毁, session默认生命周期是30分钟

1.21 session设置超时时间

session.setMaxInactiveInterval(设置时间/秒)

1.22 客户的信息存储在哪里?如果浏览器限制了cookie存储怎么办

cookie信息存储在浏览器端,不同浏览器存储在硬盘的具体位置会不同。
如果限制cookie的使用
1.提示用户不要禁用cookie;
2.使用URL重写技术解决cookie被禁用,session不能使用的问题:
3.使用html5的localStorage替代cookie
参考:https://blog.csdn.net/m0_38039437/article/details/76718541

1.23 什么是URL重写?能解决什么问题?

url重写是修改响应给用户的访问地址,在url中拼接session id,。
Url重写解决是浏览器端cookie禁用,session无法使用的问题。

1.24 Http常见状态码

1xx(请求进行中):用于表示临时响应并需要请求者执行操作才能继续的状态代码;
2xx(请求成功):用于表示服务器已成功处理了请求的状态代码;
3xx(请求被重定向):通常这些状态代码是用于重定向的;
4xx(客户端错误):用于指出客户端的错误;
5xx(服务器错误):这些状态代码表示,服务器在尝试处理请求时发生内部错误

  • 常见状态码:
    200,服务器已成功处理了请求。
    302,请求重定向
    400,请求路径语法错误
    404,请求资源不存在
    405,请求方式不正确,如:一个资源只支持GET方法,但是客户端使用PUT方法访问。
    500,服务器遇到错误,无法完成请求。

1.25 token和session的区别

token是服务器写到浏览器的用户标识, 一般是使用32位的UUID,为自定义数据。
session是浏览器与服务器的一次会话,是web服务器创建的对象。
session可以用于单机web服务,记录用户登录。
token可以用于集群web服务,完成单点登录。

1.26 什么是localStorage

localStorage 用于在浏览器本地存储服务器响应的数据。
localStorage 是 HTML5 的新特性。
用于解析cookie存储空间不足的问题。
localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同。

1.27 讲一讲你对Ajax的理解

1.是什么:Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术
2.使用ajax的好处有:
①通过异步模式,提升了用户体验;
②优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用;
③Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载
3.如何使用
①jQuery中发送ajax请求:
$.ajax({
type: “POST”,url: “”,data: “name=John”,success: function(msg){}
});
②Vue发送ajax请求:
get请求:axios.get(url[,options]);
post请求:axios.post(url,data,[options]);

1.28 比较json和xml

  1. 是什么:
    json一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。
    xml是扩展标记语言 ,使用标签描述数据结构。
  2. 对比:
    xml的内容是结构+数据,可读性高,数量大,语法格式统一。
    Json的内容是数据,可读性低,数量小,格式自定义。
  3. 适用场景:
    json更适合项目间数据的传递;
    xml更适合结构的说明,例如:maven项目的pom.xml文件;

1.29 说明json对象和json数组的定义格式

JSON 语法规则:
1.数据在名称/值对中
2.数据由逗号分隔
3.花括号保存对象
4.方括号保存数组
JSON对象:{“key”:“value”,“key”:“value”,…}
JSON数组:[ obj , obj , obj , …]

1.30 http协议底层是什么?

基于TCP的应用层协议,它不关心数据传输的细节,主要是用来规定客户端和服务端的数据传输格式,最初是用来向客户端传输HTML页面的内容

1.31 http和https的区别(详细)

HTTP:超文本传输协议,基于TCP/IP通信协议来传递数据网络协议,数据不安全,没有加密。默认端口号80
HTTPS:超文本传输安全协议,是HTTP协议 + SSL证书协议,证书需要到ca申请,传输过程中数据需要加密。默认端口号443
参考:https://www.cnblogs.com/wudaoyongchang/p/6253451.html

1.32 https是什么?怎么加密的?什么加密算法? 常见的加密算法(非MD5这种不可解密的)

  • HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版。
  • 对称加密+非对称加密结合
    用非对称加密的方式去传输对称加密的密钥,这样可以保证对称加密的密钥可以安全的交付给对方。
    1、客户端先把非对称加密的公钥,明文传输给服务器;
    2、服务端在接到密钥之后,会生成一把用于对称加密的密钥;
    3、服务器用之前接到的公钥对刚刚生成的密钥进行加密,然后传输给客户端;
    4、客户端通过自己的密钥对服务器传过来的被公钥加密过的密钥进行解密;)
  • 加密算法:对称加密+非对称加密
  • 常见的加密:RC5、RC4、SHA(信息摘要算法,同MD5一样属于不可逆算法)

1.33 http长连接和短连接?啥时候使用?为什么?

短链接:客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。
长连接:用以保持连接特性。 长连接多用于操作频繁,点对点的通讯,而且连接数不能太多。因为用短连接频繁的通信会造成socket错误 WEB网站的http服务一般都用短链接。因为长连接对于服务端来说会耗费一定的资源

SringMVC

2.1 讲一下MVC

MVC设计模式: Model-View-Controller简写。
MVC是软件工程中的一种软件架构模式,它是一种分离业务逻辑与显示界面的设计方法。它把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。

  • 控制器Controller:对请求进行处理,负责选择视图;
  • 视图View:用户与程序交互的界面;
  • 模型Model:用于业务处理

2.2 springmvc的执行流程

SpringMVC是一个MVC框架,springmvc的工作流程:

  1. 发送请求:在浏览器输入请求路径,发送请求,前端控制器连接所有的请求。
  2. 获得处理器:核心控制器(DispatcherServlet)接收到请求,通过处理器映射器(handlerMapping)获得对应的处理器(Handler)
  3. 执行处理器:通过处理器适配器(HandlerAdapter)执行处理器(Handler),并返回视图模型对象(ModelAndView)
  4. 解析视图:通过视图解析器(ViewResolver)解析ModelAndView中的视图,将逻辑视图解析成真正的视图。
  5. 渲染视图:将Model中的数据渲染到视图(View)中
  6. 响应结果

2.3 什么是Spring MVC框架的控制器?

Spring框架的核心控制器(前端控制器)是DispatherServlet
他的核心功能就是分发请求,请求会被分发给对应处理的类handler。

2.4 SpringMVC跳转一个页面,怎么返回一个json数据

使用@ResponseBody注解,将返回json数据。
1.如果在方法使用该注解,当前方法返回json数据。
2.如果在类上使用该注解,当前类中所有的方法,都将返回json数据。
springmvc默认用jackson对json数据进行转换,但需要添加jackson的包
扩展阅读:
消息转换器原理解析:https://blog.csdn.net/shadabing/article/details/84664402
SpringBoot配置Fastjson:https://blog.csdn.net/cjq2013/article/details/76421101
SpringMVC配置Fastjson:https://blog.csdn.net/do_bset_yourself/article/details/51324186

2.5 分层设计的优缺点

优点:
1、开发人员可以只关注整个结构中的其中某一层;
2、可以很容易的用新的实现来替换原有层次的实现;
3、可以降低层与层之间的依赖;
4、有利于标准化;
5、利于各层逻辑的复用
缺点:
1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。

2.6 SpringMVC和Spring的常用注解

1.Spring相关注解

1.1)声明bean的注解
@Component 通用注解,用于声明bean。可以配置任意组件。
@Repository 派生注解,与@Component等效,Dao实现类推荐使用的注解,不仅可以声明bean,而且提高可读性。
@Service 派生注解,与@Component等效,Service实现类推荐使用的注解,不仅可以声明bean,而且提高可读性。
@Controller 派生注解,与@Component等效,Controller实现类推荐使用的注解,不仅可以声明bean,而且提高可读性。

1.2)bean注入的相关注解
@Autowired:按类型注入,
@Resource(name=""):按名称注入
@Resource():先按名称注入,如果没有再按照类型。

1.3)配置类相关注解
@Bean 注解在方法上,声明当前方法的返回值为一个bean。
@Configuration 声明当前类为配置类,内部常使用@Bean进行详细配置。取代了xml文件配置。
@ComponentScan 用于对Component进行扫描,可以配置扫描的包路径

1.4)@Value注解:为属性注入简单值

2.SpringMVC相关注解

@RequestMapping 修饰方法,将请求路径映射到Controller对应的处理方法上。
修饰类,给请求路径添加访问前缀(二级路径)
@ResponseBody 将返回值转换成json数据,并响应给浏览器。
@RequestBody 将json格式的请求参数,封装到指定的JavaBean中。
@PathVariable 用于接收路径参数,比如@RequestMapping(“/hello/{name}”)申明的路径,参数前使用注解@PathVariable(“name”),就可以获取name对应的值。
@RestController 该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都响应JSON格式数据。

2.7 从页面传数据到后台的几种方式,以及后台如何接收

1.地址栏参数或普通表单请求,如:age=18&gender=man,SpringMVC方法参数需要使用@RequestParam(“参数名”)获得参数值。
2.提交json类型数据,SpringMVC 方法参数需要使用@RequestBody 将数据封装到java对象中。
3.路径占位符:如 http://localhost:8080/user/findById/1,使用@RequestMapping(“findById/{id}”)匹配路径,使用@PathVariable(“id”)获得对应的参数值。
4.文件上传,修改表单请求为"multipart/form-data"方式,SpringMVC采用MultipartFile参数类型接收数据

2.8. @Controller 注解的作用

@Controller 是@Component的派生注解,功能就是将被修饰的类添加到spring容器。
字面意思,用于修饰Controller层的组件,提高可读性。

2.9 @RequestMapping 注解的作用

修饰方法,将请求路径映射到Controller对应的处理方法上。
修饰类,给请求路径添加访问前缀(二级路径)

2.10 注解开发怎么返回集合数据

使用 @ResponseBody 注解将Java集合转换json数组,并将结果响应给浏览器。

你可能感兴趣的:(java,web,springmvc,java,web,spring)