Java的面试汇总,有这些还担心不通过?

面试官提问的内容通常会由易到难,如果前面容易的内容都答不上来,往往就被刷了,如果是前面提问的都答上来了,他会问一些有深度的问题,这时候就算你回答不上来也不要慌张,他只是看看你的薪资水平而已

接下来我就说一下java面试通常会问到的一些知识点

如果你的简历上面没有写框架的东西,只写了web的一些技术,比如servlet和jsp,他一般会问java基础,但是如果写了框架,一般就不问java基础了,当然,servlet和jsp是要问的

一我这里就先开始说servlet

1:servlet的生命周期

void init(ServletConfig):出生之后(1次)

void service(ServletRequest request,ServletResponse response):每次处理请求时都会被调用

void destroy():临死之前(1次);

这样说也够了,但是为了显示自己很厉害,还可以说明他们分别是什么时候使用,是干啥的

第一次创建servlet对象之后,服务器会调用init(ServletConfig),他是是用来初始化servlet,参数ServletConfig就是servlet的配置信息;每次接收请求,都会调用service(),他是用来处理请求;服务器关闭时会调用destroy(),destroy可以用来释放资源

2:servlet是干什么的

Servlet是JavaWeb的三大组件之一,它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:(1) 接收请求数据;(2) 处理请求;(3)完成响应。

3:servlet是怎么得到的

有三种:(1)实现servlet接口(2)继承GenericServlet抽象类(3)继承HttpServlet抽象类

这样答基本上就可以了,但是我们还可以解释一下

GenericServlet抽象类实现servlet接口,而HttpServlet抽象类是是GenericServlet抽象类的子类,通常用的都是继承HttpServlet抽象类,因为他是跟Http协议相关的,专门用来处理Http协议的请求

4:有哪些域对象

(1)域对象就是用来在多个Servlet中传递数据,底层是一个map,用来存数据和取数据

(2)ServletRequest;作用范围是一个请求

(3)HttpSession;l 一个会话创建一个HttpSession对象,同一会话中的多个请求中可以共享session中的数据;

(4)ServletContext;服务器会为每一个项目创建一个ServletContext对象!作用范围是整个项目 ServletContext对象的作用是在整个项目的动态资源之间共享数据!

5:重定向和请求转发和请求包含

(1)l请求转发是一个请求,而重定向是两个请求;

(2)请求转发的目标只能是本应用中的资源,重定向的目标可以是其他应用

请求转发和请求包含都是一次请求,而且请求转发是留头不留体,也就是的前一个servlet的响应头是可以设置的,但是响应体是不允许输出,而只能使用后一个servlet的

请求包含是留头又留体,响应体和响应头都允许输出

所以请求包含大多都是在jsp页面中,用来完成多页面的合并,请求转发大多都是在servlet中。转发目标大多是jsp页面

6关于servlet

Servlet是线程不安全的,而且是单实例对象,当多个请求向一个Servlet发出时,有可能会存在一个线程对其进行读操作。另一个对其进行写操作,

有三种解决方法

不要在Servlet中创建成员!创建局部变量即可!

可以创建无状态成员!(也就是没有get()、set()方法)

可以创建有状态的成员,但状态必须为只读的!(也就是没有set()方法)

二jsp

1:jsp是干什么的

JSP(Java Server Pages)是JavaWeb服务器端的动态资源。他是用来显示数据和获取数据。

JSP是一种特殊的Servlet,当JSP页面首次被访问时,容器(Tomcat)会先把JSP编译成Servlet,然后再去执行Servlet。所以JSP其实就是一个Servlet!

2:会话跟踪技术

(1)HTTP协议中可以使用Cookie来完成会话跟踪!在JavaWeb中,使用session来完成会话跟踪,session底层依赖Cookie技术

(2)cookie

不同浏览器之间是不共享Cookie的

如果服务器端发送重复的Cookie那么会覆盖原有的Cookie

当客户端向服务器发出请求时会把所有这个服务器Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了!

cookie的生命,默认情况下是保存在浏览器内存中,一旦浏览器关闭cookie就消失了

但是可以通过设置时间来让他保存在磁盘中,这样在浏览器关闭之后也会存在,存在时间就是设置的时间

请求路径如果包含了Cookie路径,那么会在请求中包含这个Cookie,否则不会请求中不会包含这个Cookie。

这里要注意,cookie的路径要比请求的路径要大,应该这么想,一个cookie可以被多个请求带上

(3)session

HttpSession也是一个域对象

当首次使用session时,服务器端要创建session,session是保存在服务器端,而给客户端的session的id(一个cookie中保存了sessionId)。客户端带走的是sessionId,而数据是保存在session中。

当客户端再次访问服务器时,在请求中会带上sessionId,而服务器会通过sessionId找到对应的session,而无需再创建新的session。

session保存在服务器,而sessionId通过Cookie发送给客户端,但这个Cookie的生命不-1,即只在浏览器内存中存在,也就是说如果用户关闭了浏览器,那么这个Cookie就丢失了。

当用户再次打开浏览器访问服务器时,就不会有sessionId发送给服务器,那么服务器会认为你没有session,所以服务器会创建一个session,并在响应中把sessionId中到Cookie中发送给客户端。

这里有一个很重要的问题,就是页面的路径的范围小于等于Cookie的路径的范围

Cookie中不能存在中文

如果是在浏览器内存中就会出现当开两个相同的浏览器时是没有关联的,是属于两个用户

如果是在计算机硬盘中,说明就是有关联的,是属于一个用户

4三大指令:

page指令(定义整个页面的一些属性和值)、include指令(静态包含,先合并,再编译,如果是动态包含,就是先编译再合并)、taglib指令(导入标签库)

5九大内置对象:

out --> jsp的输出流,用来向客户端响应

page --> 当前jsp对象! 它的引用类型是Object,即真身中有如下代码:Object page = this;

config --> 它对应真身(就是转译成的Java文件,它其实是一个Servlet)中的ServletConfig对象!

pageContext --> 一个顶9个!(以下那些都和Servlet里的匹配起来,他们的使用方法是一样的)

request --> HttpServletEequest

response --> HttpServletResponse

exception --> Throwable

session --> HttpSession

application --> ServletContext(一个jsp页面!这个域是在当前jsp页面和当前jsp页面中使用的标签之间共享数据!)

代理其他域:pageContext.setAttribute("xxx", "XXX", PageContext.SESSION_SCOPE);

> 全域查找:pageContext.findAttribute("xxx");从小到大,依赖查找!

> 获取其他8个内置对象:

多个用户请求一个JSP页面时,要为每一个用户开辟一个线程

6.一般问到的是打开一个IE浏览器打开一个网站,之后再打开这个浏览器,也打开这个网站,总共有几个session对象创建

这个这样答比较详细:可能一个,也可能两个,因为session本身是存在于服务器端的,session的识别是通过cookie中的JSessionID,session的底层是依赖于cookie的,而如果cookie设置的时间是默认的(-1),说明cookie是存在于浏览器内存中,这样cookie是相对于浏览器存在的,一个浏览器一个对象;而如果设置的时间大于0,那么cookie就会存在于磁盘中,只要是相同的浏览器开启之后都会是一个session对象,而且虽然cookie存在于磁盘中,不同的浏览器也不会有相同的session对象,肯定是不一样的,不同的浏览器是不共享cookie的

7.还可能会问session是依赖于什么存在的

先回答是cookie,因为session对象本身是存在于服务器端的,而把JSessionID是存放在cookie中,当再次进行请求时,cookie中会带上JSessionID,这样就可以得到服务器端的session了

但是如果这个请求时没有cookie的,如果我们还想使用session,我们也可以通过URL重写的方式,这需要在每个URL后面都加上sessionId!这样用户的请求中就包含了sessionId,服务器就可以通过sessionId找到对应的session对象了。

所以session是依赖于cookie或者URL重写

三:过滤器

1过滤器是怎么执行的

当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如果Filter“放行”,那么会继承执行用户请求的Servlet;如果Filter不“放行”,那么就不会执行用户请求的Servlet。

doFilter()方法的参数中有一个类型为FilterChain的参数,它只有一个方法:doFilter(ServletRequest,ServletResponse)。执行这个方法就会放行

2有哪几种拦截方式

拦截方式:REQUEST、FORWARD、INCLUDE、ERROR,默认是REQUEST方式。

l REQUEST:拦截直接请求方式;

l FORWARD:拦截请求转发方式;

l INCLUDE:拦截请求包含方式;

l ERROR:拦截错误转发方式。

<filter-mapping>的配置顺序决定了过滤器的执行顺序!

四:Struts2

1拦截器的作用?拦截器与过滤器的区别?

1)一组拦截器构成了过滤器来实现,而过滤器和action是Struts2的核心组件,同时可以减轻代码冗余,提高重用率。

2) 过滤器是拦截用户请求的,范围明显比拦截器大的多。

2如何在 Struts2 中使用 Ajax 功能

3Struts2 如何访问 HttpServletRequest、HttpSession、ServletContext 三个域对象 (访问servlet的API)

(1)通过ActionContext来访问,这种方式可以访问这servlet的API对象,但是无法直接获得对象

(2)实现接口,ServletRequestAware,都是API+Aware,实现这些接口,并且写上相应的与对象的变量和set方法就可以了

(3)ServletActionContext的静态方法可以获取

4.为什么要使用 Struts2 & Struts2 的优点(Struts2和Struts1和webWork的关系)

5.Struts2的前端控制器是什么

StrutsPrepareAndExecuteFilter,他其实就是一个过滤器,他有两个功能,一个是预处理,一个是执行,预处理是通过他的生命周期方法init加载action配置文件,过滤器由一组拦截器组成,这些拦截器就是进行拦截

6action中是怎么编写的呢

a:只写个普通类,不实现任何接口,不继承任何类

b:实现action接口

c:继承actionSupport类(这个类就已经实现了action接口,还实现了很多其他的接口)

7Struts2的配置文件的加载顺序

struts.xml->struts.properties->web.xml

8:Struts2中的数据封装有哪几种方法

可以这么说,有两种,一个是属性封装,一个是模型驱动封装,属性封装有包括set方法和表达式封装

也可以说有三种,一个是属性封装,一个是模型驱动封装,一个是表达式封装

属性封装:设置属性的set方法

模型驱动封装:通过实现ModelDriver接口来接收请求参数;里面的泛型是要封装的类,之后手动构建对象;重写getModel()方法返回的就是Action所使用的数据模型对象

表达式封装:其实他本质上也是属性封装,只是当属性很多的时候,就会写很多set方法,这样很臃肿,所以就把这些属性和setget方法封装到一个对象中,在action中直接使用这个对象

区别:表达式封装是本质上就属于属性封装,只是当属性太多时,将这些属性封装到了一个对象中,直接使用对象,所以当属性少的时候就用属性封装,当属性多的时候就用表达式封装;而表达式封装和模型驱动封装本质上是不同的,如果操作现有的pojo对象,就用模型驱动封装,而如果操作的属性很多,但是不构成现有的pojo对象,或者构成了多个pojo对象,就需要使用表达式封装

9:拦截器是怎么进行拦截的?

拦截器是动态拦截action的调用对象,可以定义在执行action之前或之后可以执行的一些功能,也可以判断是否进行拦截

他这里用到了Aop思想,面向切面思想,也就是不通过修改源代码而去扩展功能

还有就是责任链(也叫拦截器链),将拦截器按照一定的顺序组成一个链,之后当访问这个action时会按照定义好的顺序进行拦截

五:spring

1:spring的特性是什么?

(1)spring是一站式框架,在web层有springMVC,在service层有IOC,在dao层有JDBCTamplate,对于常见的dao层框架也有相应的Template,

(2)IOC思想,控制反转:对象的创建不是通过new方式来实现,而是通过spring配置创建类对象

(3)AOP思想,面向切面编程:不通过修改源代码而实现功能的扩展

2:IOC底层原理是怎么实现的?

dom4j解析xml文件,工厂设计模式,反射(最主要就要说出反射)

3:spring是怎么配置创建类对象的?

可以这么答:有两种,一个是配置文件配置,一种是注解方式

配置的方式有三种:使用类的无参构造创建

为了让学习变得轻松、高效,今天给大家免费分享一套Java入门教学资源。帮助大家在成为Java架构师的道路上披荆斩棘。需要入门的资料欢迎加入学习交流群:9285,05736

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c matlab.h,用matlab和c写程序,include的mex.h在哪里?

span namewhlm idwhlm请看这个帖子【mcc、mbuild和mex命令详解】a href"http://www.matlabsky.com/thread-544-1-1.html"http://www.matlabsky.com/thread-544-1-1.html/a(1)创建MEX文件>>mcc –x filename (注意这个命令在2008a中已经去掉了)将M文件filename.…

Java开发需要达到什么样的水平才称得上架构师?

小编就从Java架构师&#xff08;P7&#xff09;岗位说起吧&#xff0c;年薪40w&#xff0c;那我们看看什么公司&#xff0c;什么级别可以给到&#xff0c;再看看要求。阿里是Java大厂&#xff0c;所以可以参考阿里的标准&#xff0c;阿里一般是16薪水&#xff0c;所以就是税前2…

matlab源代码 语义相似度计算,如何计算两个句子之间的相似度(句法和语义)...

我应该每次取两个句子并计算它们是否相似。我的意思是&#xff0c;在语法和语义上都是这样。如何计算两个句子之间的相似度(句法和语义)INPUT1&#xff1a;奥巴马签署法律。奥巴马签署了一项新法律。INPUT2&#xff1a; 总线停在这里。 车辆停在这里。INPUT3&#xff1a;纽约的…

java八股 mysql优化

数据库篇-01-MySQL篇-课程介绍_哔哩哔哩_bilibili 1.定位慢查询 2.分析优化慢查询 3.索引概念及结构 3.1 红黑树&#xff08;一种自平衡的二叉排序树&#xff09; 节点可以自动平衡保证log2 n的查找复杂度. 但因为是二叉树&#xff0c;数据多了层数还会多。 所以找一个多叉树 3…

Java开发中快速提升编码能力的方法有哪些?

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性&#xff0c;广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网&#xff0c;同时拥有全球最大的开发者专业社群。 Java是一种简单的&…

php数组o m n mn,O(m + n)和O(mn)之间的区别?

小编典典我对发现直觉的建议是思想实验&#xff0c;如下所示&#xff1a;首先&#xff0c;认识到m和n是 输入的 两个 不同度量。它们可能是两个输入流的长度&#xff0c;矩阵边的长度&#xff0c;或同一数据结构的两个不同属性的计数&#xff0c;例如同一图形的边和节点计数&am…

Java虚拟机知识汇总,有这些还怕面试被问到?

首先我们来看一下Java运行时的数据区域&#xff0c;Java虚拟机在执行Java程序的过程中&#xff0c;会把它所管理的内存&#xff0c;划分成若干个不同的数据区域&#xff0c;这些区域都有各自的用途&#xff0c;各自的创建和销毁的时间。 有的区域&#xff0c;随着虚拟机进程的…

Java的多线程以及内存模型的知识点梳理,有想到过这些吗?

JMM大致描述&#xff1a; JMM描述了线程如何与内存进行交互。Java虚拟机规范视图定义一种Java内存模型&#xff0c;来屏蔽掉各种操作系统内存访问的差异&#xff0c;以实现Java程序在各种平台下都能达到一致的访问效果。 JMM描述了JVM如何与计算机的内存进行交互 JMM都是围绕…

Java性能优化方面的程序优化知识点归纳,希望对你有所帮助

常用的程序设计优化技巧&#xff1a; 1、字符串优化处理 &#xff08;1&#xff09;String 类的特点&#xff1a;不变性、针对常量池的优化&#xff08; String.intern() 方法的意义&#xff09; &#xff08;2&#xff09;subString 方法的内存泄漏 : &#xff08;3&#…

java工具栏的工具提示,动态菜单项、状态条提示、工具条提示问题

问题的提出&#xff1a;一个应用程序想要动态改变菜单项。使用CCmdUI::SetText("Menu Text")可以改变菜单文本&#xff0c;但是如何动态改变工具条和状态条的文本呢&#xff1f;有几种策略&#xff0c;避免&#xff0c;欺骗&#xff0c;面对......首先&#xff0c;避…

python excel操作库,可能是全网最完整的 Python 操作 Excel库总结!

openpyxlxlrd/xlwtxlwingsxlsxwriter了解各个库的异同&#xff0c;从而在不同场景下可以灵活使用首先让我们来整体把握下不同库的特点“xlrdxlwtxlutils.xlsxlwt.xlsxlrd.xlsxlutilsxlrdxlwt.xlsxlrdxlwtxlutilsxlwingsXlsxWriter.xlsxopenpyxl.xlsxpandas”如果你懒得看详细的…

Java编程中程序员会遇到的一些感性烦恼,你有遇到吗?

如果作为兴趣来学编程&#xff0c;什么人都适合。毕竟&#xff0c;现在小学生都开始学习编程了。如果要作为职业来说&#xff0c;你到底适合不适合确实是个问题。我教过的学员里面从初中生到博士生、甚至50多岁的企业高管都有&#xff0c;怀着不同的目的来学习JAVA。 我记得教过…

php入门和常用类的使用,php入门教程之常用数据类型和基本语法

php中数据类型有整型、小数型(浮动数)、布尔类型、字符及数组&#xff0c;变量&#xff0c;常量等下面我们一起来看看吧。一 PHP常用数据类型1.基本数据类型1.1整型1.2小数型(浮动数) 包含单精度和双精度1.3布尔类型 (表示真&#xff0c;和 假)1.4字符串2.复合数据类型2.1数组(…

java开发中spring常用的工具类

内置的resouce类型 UrlResourceClassPathResourceFileSystemResourceServletContextResourceInputStreamResourceByteArrayResourceEncodedResource 也就是Resource加上encoding, 可以认为是有编码的资源VfsResource(在jboss里经常用到, 相应还有 工具类 VfsUtils)org.springf…

python波士顿房价是什么数据,Python数据分析 | 波士顿房价回归分析

分析目标&#xff1a;将波士顿房价的数据集进行描述性数据分析、预测性数据分析(主要用了回归分析)&#xff0c;可用于预测房价。数据集介绍&#xff1a;卡内基梅隆大学收集&#xff0c;StatLib库&#xff0c;1978年&#xff0c;涵盖了麻省波士顿的506个不同郊区的房屋数据。一…

Java开发的Spring Boot的核心模块

Spring Boot 的核心模块 下面我们大概来了解一下 Spring Boot 的核心模块。 1、spring-boot 这是 Spring Boot 的主模块&#xff0c;也是支持其他模块的核心模块&#xff0c;主要包含以下几点&#xff1a; 提供了一个启动 Spring 应用的主类&#xff0c;并提供了一个相当方便…

python的open函数百度百科,open函数

open函数可以打开一个文件。超级简单吧&#xff1f;大多数时候&#xff0c;我们看到它这样被使用&#xff1a;f open(photo.jpg, r)jpgdata f.read()f.close()我现在写这篇文章的原因&#xff0c;是大部分时间我看到open被这样使用。有三个错误存在于上面的代码中。你能把它们…

java开发中对于程序员的几点建议,你们有想到吗?

建议一&#xff1a;只有真正喜欢才能写好程序 喜欢写程序&#xff0c;做程序员就是上天堂&#xff1b; 不喜欢写程序&#xff0c;做程序员就是下地狱&#xff1b; 程序员需要整天趴在电脑前&#xff0c;经常没日没夜的&#xff0c;非常辛苦&#xff0c;而且工作来不得半点虚…

物化视图mysql,ClickHouse的物化视图及MySQL表引擎

-- . 在MySQL中创建表定义和加入数据&#xff1a;mysql> selectversion();-----------| version() |-----------| 8.0. |-----------row in set (0.01sec)mysql>show create table t_org\G*************************** . row ***************************Table: t_orgCre…

Java面向对象和面向过程有什么区别?网友:傻傻分不清楚……

面向对象&#xff0c;Obeject Oriented&#xff0c;是一种编程术语。面向对象是当今软件开发方法的主流方法之一&#xff0c;他是把数据以及对数据的操作放在一起&#xff0c;作为一个相互依存的整体&#xff0c;就是我们所说的对象。对同类对象抽象出其共性&#xff0c;就是类…