Java中级面试

项目面试题

1.什么是tomcat
tomcat是Apache 软件基金会的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
Tomcat 是Web应用服务器,是一个Servlet/JSP容器。 Tomcat 作为 Servlet 容器,负责处理客户请求,把请求传送给 Servlet,并将 Servlet 的响应传送回给客户
2.什么是servlet
Servlet 是 Server 与 Applet 的缩写,是服务端小程序的意思。Servlet 主要运行在服务器端,并由服务器调用执行, 是一种按照Servlet 标准来开发的类。 是 SUN 公司提供的一门用于开发动态Web 资源的技术。
servlet是java编写的服务器端的程序,运行在web服务器中有三个作用
1接收用户端发来的请求
2调用其他java程序来处理请求
3将处理结果,返回到服务器中
3.servlet的工作流程
1通过请求头获知浏览器访问的是哪个主机
2再通过请求行获取访问的是哪一个web应用
3再通过请求行中的请求路径获知访问的是哪个资源
4通过获取的资源路径在配置中匹配到真实的路径,
5服务器会创建servlet对象,(如果是第一次访问时,创建servlet实例,并调用init方法进行初始化操作)
6调用service(request, response)方法来处理请求和响应的操作
7调用service完毕后返回服务器 由服务器将response缓冲区的数据取出,以http响应的格式发送给浏览器
4.servlet的生命周期
1.实例和初始化时机
当请求到达容器时,容器查找该 servlet 对象是否存在,如果不存在,则会创建实例并进行初始化。
2.就绪/调用/服务阶段
有请求到达容器,容器调用 servlet 对象的 service()方法,处理请求的方法在整个生命周期中可以被多次调用
3.销毁时机
当容器关闭时(应用程序停止时),会将程序中的 Servlet 实例进行销毁。

5.谈一谈request和response对象
request是代表HTTP请求信息的对象,response是代表HTTP响应信息的对象。
当浏览器发请求访问服务器中的某一个Servlet时,服务器将会调用Servlet中的service方法来处理请求。在调用service方法之前会创建出request和response对象。其中request对象中封装了浏览器发送给服务器的请求信息(请求行、请求头、请求实体等),response对象中将会封装服务器要发送给浏览器的响应信息(状态行、响应头、响应实体),在service方法执行完后,服务器再将response中的数据取出,按照HTTP协议的格式发送给浏览器。每次浏览器访问服务器,服务器在调用service方法处理请求之前都会创建request和response对象。在请求处理完,响应结束时,服务器会销毁request和response对象。
6请求转发与重定向的区别
请求转发(Forward):发生在服务端程序内部,当服务器端收到一个客户端的请求之后,会先将请求,转发给目标地址,再将目标地址返回的结果转发给客户端。
重定向(Redirect):重定向指的是服务器端接收到客户端的请求之后,会给客户端返回一个临时响应头,这个临时响应头中记录了客户端需要再次发送请求(重定向)的 URL 地址,客户端在收到了地址之后,会将请求发送到新的地址上。
请求转发特点:1.服务端行为 2.地址栏不发生改变 3.从始至终只有一个请求 4. request作用域数据可以共享
重定向特点:1.服务端指导,客户端行为 2. 地址栏会发生改变3.存在两次请求 4.request作用域数据不可共享
7.什么是cookie?
cookie是浏览器提供的一种技术,cookie是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器。
8.什么是session?
服务器会给每一个用户(浏览器)创建一个session对象一个session独占一个浏览器,只要浏览器不关闭,这个session就一直存在session称为会话控制,存储用户会话所需的属性和配置信息,这样,用户在应用程序的web页面跳转时,存储在session对象中的用户信息不会丢掷,而是在整个用户会话中一直保持下去。
9.cookie和session的区别
1.存储的位置不同:cookie数据保存在客户端,session数据保存在服务器端。
2.存储的数据类型不同:两者都是key-value结构,但针对value的类型是有差异的。cookie:value只能是字符串类型,session:value是object类型。
3.存储的数据大小限制不同:cookie大小受浏览器的限制,很多是4k的大小,session理论受内存的限制
4.有效期不同,cookie 可设置为长时间保持,session 一般失效时间较短,客户端关闭或者Session 超时都会失效。
5.安全性:cookie 存储在客户端,比较容易遭到不法获取,Session 存储在服务端,安全性相对 Cookie 要好一些。

10.Cooking与Session如何关联

 

 

 


1.用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建创建对应的 Session ,请求返回时将此 Session 的唯一标识信息 SessionID 返回给浏览器,浏览器接收到服务器返回的 SessionID 信息后,会将此信息存入到 Cookie 中,同时 Cookie 记录此 SessionID 属于哪个域名。
2.当用户第二次访问服务器的时候,请求会自动判断此域名下是否存在 Cookie 信息,如果存在自动将 Cookie 信息也发送给服务端,服务端会从 Cookie 中获取 SessionID,再根据 SessionID 查找对应的 Session 信息,如果没有找到说明用户没有登录或者登录失效,如果找到 Session 证明用户已经登录可执行后面操作。
3.根据以上流程可知,SessionID 是连接 Cookie 和 Session 的一道桥梁,大部分系统也是根据此原理来验证用户登录状态。
11.get请求和post请求的区别
1.请求数据存放的位置:
GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码。 POST请求:POST请求会把请求的数据放置在HTTP请求体中。
2.传输数据的大小:
使用GET请求时,传输数据会受到URL长度的限制。
POST不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。
3.get请求可以被缓存,post请求不会被缓存。
4.安全性:POST的安全性比GET的高,GET请求提交的数据是透明度的还可能会造成csrf(跨站请求伪造)攻击
12.过滤器
Filter 过滤器是 JavaWeb 的三大组件之一。主要用与对用户的请求(HttpServletRequest)进行预处理,也可以对服务器响应的数据(HttpServletRequest)进行后处理。
13.谈一谈对maven的理解
Maven翻译为"专家","内行"。 作为Apache组织中的一个颇为成功的开源项目,Maven主要服务于基于java平台的项目构建,依赖管理和项目信息管理。
依赖管理系统:Maven为Java世界引入了一个新的依赖管理系统jar包管理 jar 升级时修改配置文件即可。在Java世界中,可以用groupId、artifactId、version组成的Coordination(坐标)唯一标识一个依赖。
14.什么是http协议,http协议特点
HTTP协议,就是浏览器和服务器之间进行“沟通"的一种规范
HTTP协议是基于TCP/IP的应用层协议
HTTP协议,即 超文本传输协议(Hypertext transfer protocol) 。是一种详细规定了浏览器和万维网(WWW =World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。

HTTP协议主要特点如下:

1.支持客户/服务器模式。

2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type(Content-Type是HTTP包中用来表示内容类型的标识)加以标记。

4.无连接:每次请求一次,释放一次连接。所以无连接表示每次连接只能处理一个请求。优点就是节省传输时间,实现简单。我们有时称这种无连接为短连接。对应的就有了长链接,长连接专门解决效率问题。当建立好了一个连接之后,可以多次请求。但是缺点就是容易造成占用资源不释放的问题。当HTTP协议头部中字段Connection:keep-alive表示支持长链接。

5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。为了解决HTTP协议无状态,于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。

15.JSP四大作用域

JSP(JavaServer Pages)定义了四个作用域来存储数据,这四个作用域分别是:

    1. 页面作用域(page scope):页面作用域存储在当前页面中的数据,只能在当前页面中访问。它们在页面被加载时创建,当页面被销毁时也随之销毁。
    2. 请求作用域(request scope):请求作用域存储在 HTTP 请求中的数据,只能在同一个请求中的所有页面和动作中访问。它们在请求开始时创建,在请求结束时销毁。
    3. 会话作用域(session scope):会话作用域存储在用户会话中的数据,可以在整个会话期间的所有请求和页面中访问。它们在用户第一次访问站点时创建,在用户关闭浏览器或会话超时时销毁。
    4. 应用程序作用域(application scope):应用程序作用域存储在整个应用程序中的数据,可以在所有用户会话中的所有请求和页面中访问。它们在应用程序启动时创建,在应用程序关闭时销毁。

16.web四大作用域

JavaWeb的四大作用域为:PageContextServletRequestSessionServletContext

PageContext域:作用范围是整个JSP页面,是四大作用域中最小的一个;生命周期是当对JSP的请求时开始,当响应结束时销毁。

ServletRequest域:作用范围是整个请求链(请求转发也存在);生命周期是在service方法调用前由服务器创建,传入service方法。整个请求结束,request生命结束。

Session域:作用范围是一次会话。生命周期是在第一次调用request.getSession()方法时,服务器会检查是否已经有对应的session,如果没有就在内存中创建一个session并返回。当一段时间内session没有被使用(默认为30分钟),则服务器会销毁该session。如果服务器非正常关闭(强行关闭),没有到期的session也会跟着销毁。如果调用session提供的invalidate() ,可以立即销毁session。

注意:服务器正常关闭,再启动,Session对象会进行钝化和活化操作。同时如果服务器钝化的时间在session 默认销毁时间之内,则活化后session还是存在的。否则Session不存在。  如果JavaBean 数据在session钝化时,没有实现Serializable 则当Session活化时,会消失。

ServletContext域:作用范围是整个Web应用。当Web应用被加载进容器时创建代表整个web应用的ServletContext对象,当服务器关闭或Web应用被移除时,ServletContext对象跟着销毁。

作用域从小到大为:PageContext(jsp页面),ServletRequest(一次请求),Session(一次会话),ServletContext(整个web应用)

17.Cookie、Session对象使用与各自特点

在Web开发中,Cookie和Session是两个非常重要的概念。Cookie是一小段文本信息,由服务器发送给客户端保存在客户端,当下次客户端再次访问服务器时,会携带该Cookie发送给服务器。而Session则是一种服务器端的会话机制,用于在多次请求之间保持特定用户的状态信息。下面是Cookie和Session的使用和特点:

Cookie对象:

  • 使用方式:服务器通过Set-Cookie头信息将Cookie发送给客户端,客户端保存Cookie后,在后续请求中发送给服务器。
  • 特点:可以在客户端本地存储一些简单的状态信息,如用户的登录信息、浏览历史等。
  • 优点:可以持久化存储客户端状态信息,无需在每次请求时重新发送。
  • 缺点:Cookie保存在客户端,可能被其他网站或黑客利用,存在一定的安全风险。此外,每次请求都会携带Cookie,会增加网络带宽的负担。

Session对象:

  • 使用方式:当用户第一次访问服务器时,服务器会为该用户创建一个唯一的Session ID,并将该ID保存在Cookie中,每次用户访问服务器时,服务器会根据Session ID获取对应的Session对象,从而获取用户状态信息。
  • 特点:保存在服务器端的用户状态信息,比Cookie更安全。Session对象可以存储较大的复杂数据。
  • 优点:数据存储在服务器端,更加安全,无需考虑被其他网站或黑客利用的风险。同时,Session对象存储的数据更加灵活,可以存储任何类型的数据。
  • 缺点:Session对象保存在服务器内存中,当并发量大时,会占用服务器内存资源,可能会影响服务器性能。

总的来说,Cookie适用于保存简单的状态信息,而Session适用于保存复杂的用户状态信息。当安全性要求较高时,应优先考虑使用Session。

 18.Servlet 三大作用域

  1. 请求作用域(Request Scope):请求作用域是指当客户端发起一个 HTTP 请求时,Servlet 会为该请求创建一个请求对象(HttpServletRequest),在请求对象中存储的数据只在该请求处理过程中有效,请求处理结束后,请求对象和其中的数据将被销毁。
  2. 会话作用域(Session Scope):会话作用域是指客户端与服务器之间建立的会话中,Servlet 可以为该会话创建一个会话对象(HttpSession),在会话对象中存储的数据在整个会话期间都有效,直到会话结束或者会话超时。
  3. 上下文作用域(Application Scope):上下文作用域是指 Servlet 容器中的上下文环境,Servlet 可以为该上下文环境创建一个上下文对象(ServletContext),在上下文对象中存储的数据在整个 Web 应用中都有效,直到 Web 应用被卸载

 

19Servlet 文件上传与下载

  1. 文件上传通常需要使用 multipart/form-data 数据格式,通过 HttpServletRequest 对象中的 getPart() 方法来获取上传的文件。代码示例如下:
javaCopy code
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {     
  // 获取文件上传的组件     
  Part filePart = request.getPart("file");          
  // 获取文件名     
  String fileName = filePart.getSubmittedFileName();         
  // 获取文件输入流     
  InputStream fileContent = filePart.getInputStream();         
  // 将文件保存到指定目录    
  Files.copy(fileContent, Paths.get("path/to/save/directory/" + fileName)); }

Servlet 文件下载:

文件下载通常需要设置响应头,告诉浏览器文件的类型和文件名,然后通过 HttpServletResponse 对象的 OutputStream 将文件内容写入到响应中。代码示例如下:

javaCopy code
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {     
  // 设置响应头     
  response.setContentType("application/octet-stream");     
  response.setHeader("Content-Disposition", "attachment; filename=\"file.txt\"");          
  // 获取文件输入流     
  InputStream fileContent = new FileInputStream("path/to/file.txt");          
  // 获取响应输出流     
  OutputStream responseContent = response.getOutputStream();          
  // 将文件内容写入到响应中     
  byte[] buffer = new byte[4096];     
  int bytesRead = -1;     
  while ((bytesRead = fileContent.read(buffer)) != -1) {        
    responseContent.write(buffer, 0, bytesRead);     }          
  // 关闭输入输出流     
  responseContent.close();     
  fileContent.close(); }

以上代码仅为示例代码,实际使用时需要根据实际情况进行修改。

session底层依赖cookie?

在Web开发中,Session机制是一种常用的跟踪用户状态的方式,可以在服务器端保存和管理用户的会话数据。而Session机制的实现通常依赖于Cookie技术。

当用户第一次访问某个网站时,服务器会生成一个唯一的Session ID,并将这个ID存储在一个Cookie中,然后将这个Cookie发送给客户端。客户端浏览器收到这个Cookie后,将其保存在本地,当用户发送下一个请求时,客户端浏览器会将这个Cookie带上,发送给服务器。

服务器通过这个Cookie中的Session ID,可以在服务器端找到对应的Session数据,并将客户端请求中的数据与Session数据进行关联。这样,服务器就可以在多次请求中跟踪用户的状态,而无需每次都要求客户端提供身份验证信息。

因此,可以说Session机制的实现确实依赖于Cookie技术。当然,也可以使用其他技术来实现Session机制,例如将Session ID通过URL参数传递,但这种方式会带来一些安全性和隐私性问题,因此Cookie技术仍然是Session机制的主要实现方式。

 

Servlet 过滤器

ervlet 过滤器(Servlet Filter)是一种Java Web应用程序中的组件,用于在请求到达Servlet之前或响应返回给客户端之前拦截并修改请求或响应。Servlet 过滤器可以用来实现一些常见的功能,例如请求日志记录、访问控制、字符编码转换、数据压缩等。

Servlet 过滤器可以被多个Servlet共享,这使得它们成为Web应用程序中非常有用的重用组件。过滤器可以被配置成只对特定URL模式进行拦截,从而使它们的应用范围更加精确。

Servlet 过滤器的工作方式是通过实现javax.servlet.Filter接口,并在Web应用程序的部署描述符文件(web.xml)中配置它们来实现的。在过滤器的doFilter()方法中,可以对请求或响应进行处理,并将请求或响应传递给下一个过滤器或Servlet。

Servlet 过滤器可以与Java Servlet规范中的其他组件一起使用,例如Servlet、JSP页面和Web事件侦听器,以实现灵活、可扩展的Web应用程序。

posted @ 2023-04-05 14:57  踢足球的程序猿康康  阅读(108)  评论(0)    收藏  举报