10道不得不会的JavaEE面试题
10道不得不会的 JavaEE 面试题
我是 JavaPub,专注于面试、副业,技术人的成长记录。
以下是 JavaEE 面试题,相信大家都会有种及眼熟又陌生的感觉、看过可能在短暂的面试后又马上忘记了。JavaPub在这里整理这些容易忘记的重点知识及解答,建议收藏,经常温习查阅
。
评论区见
JavaEE
本系列《最少必要面试题》
目前很多新项目很少会用到JavaEE的技术栈,但是对于部分维护老代码的工程师来说,还是尤为重要。
1. JSP 有哪些内置对象?作用分别是什么?
JSP有9个内置对象:
request:封装客户端的请求,其中包含来自GET或POST请求的参数;
response:封装服务器对客户端的响应;
pageContext:通过该对象可以获取其他对象;
session:封装用户会话的对象;
application:封装服务器运行环境的对象;
out:输出服务器响应的输出流对象;
config:web应用的配置对象;
page:jsp页面本身(相当于Java程序中的this);
exception:封装页面抛出异常的对象。
2. 介绍一下 Servlet 生命周期
Servlet是运行在服务器端,以多线程的方式处理客户端请求的小程序。是sun公司提供的一套规范(规范的实现是接口)。
servlet的生命周期就是从servlet出现到消亡(销毁)的全过程。主要分为以下几个阶段:
加载类—>实例化(为对象分配空间)—>初始化(为对象的属性赋值)—>请求响应(服务阶段)—>销毁
详细介绍:
- 加载
在下列时刻会加载Servlet(只执行一次):
- 如果已经配置自动加载选项,则在启动服务器时自动加载web.xml文件中设置的;
- 服务器启动之后,客户机首次向Servlet发出请求时会加载;
- 重新加载Servlet时会进行一次加载;
- 实例化
加载Servlet后,服务器创建一个Servlet实例。(只执行一次)
- 初始化
- 调用 Servlet 的
init()
方法。在初始化阶段,Servlet 初始化参数被传递给 Servlet 配置对象 ServletConfig。(只执行一次);
- 请求处理
对于到达服务器的客户机请求,服务器创建针对此次请求的一个"请求对象"和一个"响应对象"。
服务器调用 Servlet 的 service()
方法,该方法用于传递"请求"和"响应"对象。
service()
方法从"请求"对象获得请求信息、处理该请求并用"响应"对象的方法将响应回传给客户端。
service()
方法可以调用其他方法来处理请求,例如 doGet()、doPost()
或其他方法。
- 销毁
当服务器不需要 Servlet,或重新装入 Servlet 的新实例时,服务器会调用 Servlet 的 destroy()
方法。(只执行一次);
3. Servlet和JSP的区别和联系
区别:
JSP是在HTML代码里面写Java代码;而Servlet是在Java代码中写HTML代码,Servlet本身是个Java类;
JSP使人们将显示和逻辑分隔称为可能,这意味着两者的开发可以并行进行;而Servlet并没有将两者分开;
Servlet独立地处理静态表示逻辑与动态业务逻辑,任何文件的变动都需要对此服务程序重新编译;JSP允许使用特殊标签直接嵌入到HTML页面,HTML内容与JAVA内容也可放在单独文件中,HTML内容的任何变动会自动编译装入到服务程序;
Servlet需要在web.xml中配置;而JSP无需配置;
目前JSP主要用在视图层,负责显示;而Servlet主要用在控制层,负责调度;
联系:
都是SUN公司推出的动态网页技术;
先有Servlet,针对Servlet缺点推出JSP。JSP是Servlet的一种特殊形式,每个JSP页面就是一个Servlet实例,JSP页面由系统翻译成Servlet,Servlet再负责响应用户的请求。
4. JSP的执行过程
在JSP运行过程中,首先由客户端发出请求,Web服务器接收到请求之后,如果是第一次访问某个JSP页面,Web服务器对它进行一下三个操作:
- 翻译
由.jsp变为.java,由JSP引擎完成。
- 编译
由.java变为.class,由Java编译器实现。
- 执行
由.class变为.html,用Java虚拟机执行编译文件,然后将执行结果返回给Web服务器,并最终返回给客户端。
如果不是第一次访问某个JSP页面,则只执行第三步,所以第一次访问JSP较慢。
5. Session和Cookie的区别和联系;说明在自己项目中如何使用?
Session 和 Cookie 都是会话(Seesion)跟踪技术。Cookie 通过在客户端记录信息确定用户身份,Session 通过在服务器端记录信息确定用户身份。但是 Session 的实现依赖于 Cookie,sessionId(session的唯一标识需要存放在客户端).
cookie数据存放在客户的浏览器上,session数据放在服务器上。
cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
可以考虑将登录信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。
在程序开发过程中,我们可以在客户端每次与服务器交互时检查SessionID(Session中属性值,非HttpServlet环境开发中也可以用其它的Key值代替),用于会话管理。
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中,比如购物车
购物车最好使用cookie,但是cookie是可以在客户端禁用的,这时候我们要使用cookie+数据库的方式实现,当从cookie中不能取出数据时,就从数据库获取。
6. 转发和重定向的联系和区别?
转发:服务器端的跳转,路径不会发生改变(针对的是servlet),是服务器内部的处理,一次请求,请求对象不会变
重定向:客户端的跳转,路径会发生改变,将要请求的路径和302重定向的状态码发给客户端浏览器,客户端浏览器将再次向服务器发出请求,不是同个请求,两次请求。
7. 拦截器和过滤器的区别
Spring 的拦截器与 Servlet 的 Filter 有相似之处,比如二者都是AOP编程思想的体现,都能实现权限检查、日志记录等。不同的是:
使用范围不同: Filter 是 Servlet 规范规定的,只能用于Web程序中。而拦截器既可以用于Web程序,也可以用于 Application、Swing程序中。
规范不同: Filter 是在 Servlet 规范中定义的,是 Servlet 容器支持的。而拦截器是在 Spring 容器内的,是 Spring 框架支持的。
使用的资源不同:同其他的代码块一样,拦截器也是一个 Spring 的组件,归 Spring 管理,配置在 Spring 文件中,因此能使用 Spring 里的任何资源、对象,例如 Service 对象、数据源、事务管理等,通过 IoC 注入到拦截器即可;而Filter则不能。
深度不同: Filter 在只在 Servlet 前后起作用。而拦截器能够深入到方法前后、异常抛出前后等,因此拦截器的使用具有更大的弹性。所以在 Spring 构架的程序中,要优先使用拦截器。
一张经典的图
8. 三次握手和四次挥手
这里是字面描述
三次握手:
客户端向服务器发出连接请求等待服务器确认
服务器向客户端返回一个响应告诉客户端收到了请求
客户端向服务器再次发出确认信息,此时连接建立
四次挥手:
客户端向服务器发出取消连接请求
服务器向客户端返回一个响应,表示收到客户端取消请求
服务器向客户端发出确认取消信息(向客户端表明可以取消连接了)
客户端再次发送确认消息,此时连接取消
9. TCP和UDP的区别
TCP :面向连接,UDP :面向无连接
TCP :传输效率低,UDP :传输效率高(有大小限制,一次限定在64kb之内)
TCP:可靠,UDP :不可靠
10. 如何解决跨域问题?
跨域指的是浏览器不能执行其它网站的脚本,它是由浏览器的同源策略造成的,是浏览器对 JavaScript 施加的安全限制。
所谓同源指的是:协议、域名、端口号都相同,只要有一个不相同,那么都是非同源。
解决方案:
使用 ajax 的 jsonp。(这一点有些人是不知道的)
nginx 转发:利用 nginx 反向代理,将请求分发到部署相应项目的 tomcat 服务器,当然也不存在跨域问题。
使用 CORS:写一个配置类实现 WebMvcConfigurer 接口或者配置 FilterRegistrationBean。
CORS(Cross-Origin Resource Sharing)是一个W3C标准,全称“跨域资源共享”
11. 什么是 CSRF 攻击?如何防御CSRF 攻击
CSRF(Cross-site request forgery) 跨站请求伪造。CSRF 攻击是在受害者毫不知情的情况下,以受害者名义伪造请求发送给受攻击站点,从而在受害者并未授权的情况下执行受害者权限下的各种操作。
CSRF 攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。
目前防御 CSRF 攻击主要有三种策略:
验证 HTTP Referer 字段
在请求地址中添加 token 并验证
在 HTTP 头中自定义属性并验证
12. HTTP1.0和HTTP1.1和HTTP2.0的区别
HTTP1.0 :无状态,无连接。
HTTP1.1 :长连接,请求管道化,增加缓存处理,增加 Host 字段,支持断点传输。
HTTP2.0 :二进制分帧,多路复用(连接共享),头部压缩,服务器推送。
低谷蓄力
《最少必要面试题》
10道不得不会的JavaEE面试题的更多相关文章
- 【转载】经典10道c/c++语言经典笔试题(含全部所有参考答案)
经典10道c/c++语言经典笔试题(含全部所有参考答案) 1. 下面这段代码的输出是多少(在32位机上). char *p; char *q[20]; char *m[20][20]; int (*n ...
- 10道C++输出易错笔试题收集
下面这些题目都是我之前准备笔试面试过程中积累的,大部分都是知名公司的笔试题,C++基础薄弱的很容易栽进去.我从中选了10道简单的题,C++初学者可以进来挑战下,C++大牛也可以作为娱乐玩下(比如下面的 ...
- Java程序员的10道XML面试题
包括web开发人员的Java面试在内的各种面试中,XML面试题在各种编程工作的面试中很常见.XML是一种成熟的技术,经常作为从一个平台到其他平台传输数据的标准.XML面试问题包括用于转换XML文件的X ...
- iOS进阶面试题----经典10道
OneV‘s Den在博客里出了10道iOS面试题,用他的话是:"列出了十个应聘Leader级别的高级Cocoa/CocoaTouch开发工程师所应该掌握和理解的技术" . 在这 ...
- Java程序员的10道XML面试题 (转)
包括web开发人员的Java面试在内的各种面试中,XML面试题在各种编程工作的面试中很常见.XML是一种成熟的技术,经常作为从一个平台到其他平台传输数据的标准.XML面试问题包括用于转换XML文件的X ...
- Java:关于main方法的10道面试题
感觉假期过得好快,东西也丢得快. 假期吃喝玩乐之余也来温故一下Java知识,下面给大家整理了10道Java main方法的经典面试题,都来挑战一下自己的Java基础知识吧! 1.main方法是做什么用 ...
- 20道必须掌握的C++面试题
20道必须掌握的C++面试题 在面试C++方面的工作时,经常会遇到各种面试题,这对应聘人员的知识掌握能力要求较高.本文将为大家带来的就是20道必须掌握的C++面试题,不要错过哦! 问1:请用简单的语言 ...
- 面试必备的10道MySQL题
MySQL 事务,是我们去面试中高级开发经常会被问到的问题,很多人虽然经常使用 MySQL,SQL 语句也写得很溜,但是面试的时候,被问到这些问题,总是不知从何说起.下面我们先来了解一下什么是 MyS ...
- 几道JS代码手写面试题
几道JS代码手写面试题 (1) 高阶段函数实现AOP(面向切面编程) Function.prototype.before = function (beforefn) { let ...
随机推荐
- qt在linux下引用x11库编译错误的解决办法
首先安装x11的开发包,以debian9为例:sudo apt install xorg-dev这个解决.h头文件和.a库文件在qt的.pro文件中加入:LIBS += -lX11这个解决连接错误,注 ...
- selenium模块跳过用户名密码验证码输入,加载浏览器标签和cookie,进行翻页爬虫多页动态加载的数据(js)
能解决登陆一次后,之后不需要二次登陆的动态加载数据,网页保存的cookie和标签,加入到selenium自动化测试浏览器中 1 from selenium import webdriver 2 imp ...
- 团队Arpha5
队名:观光队 组长博客 作业博客 组员实践情况 王耀鑫 **过去两天完成了哪些任务 ** 文字/口头描述 完成服务器连接数据库部分代码 展示GitHub当日代码/文档签入记录 接下来的计划 服务器网络 ...
- 手摸手,带你实现移动端H5瀑布流布局
移动端瀑布流布局是一种比较流行的网页布局方式,视觉上来看就是一种像瀑布一样垂直落下的排版.每张图片并不是显示的正正方方的,而是有的长有的短,呈现出一种不规则的形状.但是它们的宽度通常都是相同的 因为移 ...
- bean的自动装配,使用注解开发,使用java的方式配置Spring
bean的自动装配 自动装配是Spring满足bean依赖一种方式! Spring会在上下文中自动寻找,并自动给bean装配属性! 在Spring中有三种装配的方式 在xml中显示的配置 在java中 ...
- 记录一次用宝塔部署微信小程序Node.js后端接口代码的详细过程
一直忙着写毕设,上一次写博客还是元旦,大半年过去了.... 后面会不断分享各种新项目的源码与技术.欢迎关注一起学习哈! 记录一次部署微信小程序Node.js后端接口代码的详细过程,使用宝塔来部署. 我 ...
- 2.Docker安装
CentOS Docker 安装 前提条件 目前,CentOS 仅发行版本中的内核支持 Docker.Docker 运行在CentOS 7 (64-bit)上, 要求系统为64位.Linux系统内核版 ...
- Nvidia Triton使用教程:从青铜到王者
1 相关预备知识 模型:包含了大量参数的一个网络(参数+结构),体积10MB-10GB不等 模型格式:相同的模型可以有不同的存储格式(可类比音视频文件),目前主流有torch.tf.onnx和trt, ...
- v87.01 鸿蒙内核源码分析 (内核启动篇) | 从汇编到 main () | 百篇博客分析 OpenHarmony 源码
本篇关键词:内核重定位.MMU.SVC栈.热启动.内核映射表 内核汇编相关篇为: v74.01 鸿蒙内核源码分析(编码方式) | 机器指令是如何编码的 v75.03 鸿蒙内核源码分析(汇编基础) | ...
- django框架10
内容概要 ajax结合sweetalert forms组件钩子函数 forms组件字段参数 forms组件字段类型 forms组件源码分析 cookie与session简介 django操作cooki ...