2021.Java面试题目.2(精选)

servlet生命周期并简述各生命周期的方法

servlet的生命周期

主要有三个方法:

init()初始化阶段
service()处理客户端请求阶段
destroy()终止阶段
初始化阶段:

Servlet容器加载Servlet,加载完成后,Servlet容器会创建一个Servlet实例并调用init()方法,init()方法只会调用一次
Servlet容器会在一下几种情况装载Servlet:

Servlet容器启动时自动装载某些servlet,实现这个需要在web.xml文件中添加1
在Servlet容器启动后,客户首次向Servlet发送请求
Servlet类文件被更新后,重新装载

处理客户端请求阶段:

每收到一个客户端请求,服务器就会产生一个新的线程去处理。
对于用户的Servlet请求,Servlet容器会创建一个特定于请求的ServletRequest和ServletResponse。
对于tomcat来说,它会将传递来的参数放入一个HashTable中,这是一个String–>String[]的键值映射

终止阶段:
当web应用被终止,或者Servlet容器终止运行,或者Servlet重新装载Servlet新实例时,Servlet容器会调用Servlet的destroy()方法

变量在内存中的存储位置(静态区、堆、栈)

在这里插入图片描述

HTTP请求格式、响应格式分别包含哪些部分?简述每个部分的组成

HTTP协议规定了客户端发给服务器的数据格式,包含4个部分,分别是【请求行】【请求头】【请求空行】【请求体】
 【请求行】: 描述请求方式、请求URL、以及HTTP版本
    请求方式一共有8种,这里只了解常用的只有两种GET和POST(不区分大小写)
    GET请求:请求参数拼接在请求行上,在浏览器地址栏看见。
    POST请求:请求参数会被封装在请求体中,在浏览器地址栏看不见。

【请求头】: 描述客户端浏览器告诉服务器若干配置信息     
【空行】: 用于分割请求头与请求体
【请求体】:用于封装POST请求消息的请求参数;GET请求没有请求体数据
HTTP协议规定服务器发给客户端的数据格式,包含4个部分,分别是【响应行】【响应头】【空行】【响应体】
【响应行】:由HTTP协议版本、响应状态码、状态码描述组成
【响应头】:若干个键-值对组成,是服务器用来告诉客户端浏览器一些配置信息。
【空行】:用于分隔响应头和响应体
【响应体】:其实就一个HTML页面中的内容包括标签、CSS样式、JS等等

String类是否可以被继承,为什么

不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允许改变。

Servlet的线程是否安全,为什么

因为Servlet是单例,单例对象的类成员只会随类实例化时初始化一次,之后的操作都是改变,而不会重新初始化。 在Servlet中定义了类成员之后,多个浏览器都会共享类成员的数据。每一个浏览器端发送请求,就代表是一个线程,那么多个浏览器就是多个线程,多个线程会共享Servlet类成员中的数据,其中任何一个线程修改了数据,都会影响其他线程。因此,我们可以认为Servlet它不是线程安全的。

因为servlet是单例,单例对象的类成员只会随类实例化时初始化一次,之后的操作都是改变,而不会重新初始化
在servlet中定义了类成员之后,多个浏览器都会共享类成员的数据
每一个浏览器端发送请求,就代表是一个线程,那么多个浏览器就是多个线程,多个线程会共享servlet类成员中的数据,其中任何一个线程修改了数据,都会影响其他线程

单例模式概要:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
当不同的请求都调用这一个servlet,单例模式只new ()一次,只在堆里申请了一个对象空间,即只实例化了一次。所以,不管来了多少请求,都是这一个实例在处理。如果多个请求在同一时刻出现,就会并发执行。

重定向与转发的区别

1、请求次数:重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新地址发出请求,转发是服务器收到请求后为了完成响应跳转到一个新的地址;重定向至少请求两次,转发请求一次; 
2、地址栏不同:重定向地址栏会发生变化,转发地址栏不会发生变化;
3、是否共享数据:重定向两次请求不共享数据,转发一次请求共享数据(在request级别使用信息共享,使用重定向必然出错);
4、跳转限制:重定向可以跳转到任意URL,转发只能跳转本站点资源;
5、发生行为不同:重定向是客户端行为,转发是服务器端行为;

什么是线程池?使用线程池有哪些好处?

线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,然后在需要执行新的任务时重用这些线程而不是新建一个线程。
    
使用线程池的好处:
1、线程池改进了一个应用程序的响应时间。由于线程池中的线程已经准备好且等待被分配任务,应用程序可以直接拿来使用而不用新建一个线程。
2、线程池节省了CLR 为每个短生存周期任务创建一个完整的线程的开销并可以在任务完成后回收资源。
3、线程池根据当前在系统中运行的进程来优化线程时间片。
4、线程池允许我们开启多个任务而不用为每个线程设置属性。
5、线程池允许我们为正在执行的任务的程序参数传递一个包含状态信息的对象引用。
6、线程池可以用来解决处理一个特定请求最大线程数量限制问题。

jsp 和 servlet 有什么区别?

1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)
2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制。
Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,3.HttpServletResponse对象以及HttpServlet对象得到。
4.Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。

介绍一下 jsp 的 4 种作用域?

JSP中的四种作用域包括page、request、session和application,具体来说:

page代表与一个页面相关的对象和属性。
request代表与Web客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个Web组件;需要在页面显示的临时数据可以置于此作用域。
session代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的session中。
application代表与整个Web应用程序相关的对象和属性,它实质上是跨越整个Web应用程序,包括多个页面、请求和会话的一个全局作用域。

UDP和TCP协议的区别(连接方式,效率和安全性)

1、TCP :面向连接,UDP :面向无连接
2、TCP :传输效率低,UDP :传输效率高
3、TCP:可靠,UDP :不可靠

arraylist和linkedlist的区别

1.arraylist是数据结构,linkedlist是链表结构
2.效率:linkedlist增删块,查询慢
	arraylist查询快,增删慢

Cookie和Session区别

1.Cookie是由服务端创建,由若干个键值对组成的数据,
并且随着响应以文件的形式将Cookie数据保存在客户端本地
2.Session是依赖于Cookie的,当客户端第一次请求服务端时没有Cookie,
会在内存中创建一个Session对象并把sessionid通过Cookie存起来发给客户端

String 类的常用方法都有那些?

indexOf():返回指定字符的索引。
charAt():返回指定索引处的字符。
replace():字符串替换。
trim():去除字符串两端空白。
split():分割字符串,返回一个分割后的字符串数组。
getBytes():返回字符串的 byte 类型数组。
length():返回字符串长度。
toLowerCase():将字符串转成小写字母。
toUpperCase():将字符串转成大写字符。
substring():截取字符串。
equals():字符串比较。

编写多线程程序有几种实现方式?

Java 5以前实现多线程有两种实现方法:一种是继承Thread类;另一种是实现Runnable接口。两种方式都要通过重写run()方法来定义线程的行为,推荐使用后者,因为Java中的继承是单继承,一个类有一个父类,如果继承了Thread类就无法再继承其他类了,显然使用Runnable接口更为灵活.

mysql存储过程和存储函数有什么区别,有什么优缺点

存储函数:必须有返回值。
存储过程:可以没有返回值,也可以拥有返回值。
优点:
	A.存储过程可以封装 复杂的SQL语句,简化SQL的编写
	B.存储过程可以回传递增,并接受参数
	C.存储过程无法使用select指定来运行,与查看表数据或定义函数不同
	D.存储过程可以用在数据校验,强制实行商业逻辑等。
	
缺点:
	A.存储过程,往往制定在特定的数据库中,因为支持的编程语言不同,当切换其他厂商数据库时候,需要重写原有的存储过程。
	
	B.存储过程性能调校与撰写,受限于种种数据库系统。

Collection共性方法

public boolean add(E e)  
    往集合中添加元素
public void clear()  
    清空集合中的元素
public boolean contains(Object o)  
    判断集合是否包含某一个元素
public boolean remove(Object o)  
    删除集合中指定的元素
public boolean removeIf(Predicate pre)  
    按照指定的条件来删除元素
public int size()  
    获取集合的长度

private,protected以及默认关键(default)字的访问范围

Protected可在包内及包外子类访问,default只能同一包内访问,private只能同一类

事务的四大特征

1、原子性(Atomicity)
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。

2、一致性(Consistency)
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。

3、隔离性(Isolation)
隔离性是当多个用户并发访问数据库时,比如同时操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。关于事务的隔离性数据库提供了多种隔离级别,稍后会介绍到。

4、持久性(Durability)
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

java中提供了四种访问权限,分别是哪几种?(简单概述运用范围

1public:公共的。
(2protected:受保护的
(3default:默认的
(4private:私有的
public 的权限,同一类中,同一包中,不同包子类中,不同包中无关类
protect 的权限,同一类中,同一包中,不同包子类中
default 的权限,同一类中,同一包中
private 的权限,同一类中

获取字节码的三种方式有哪些?

1)Class.forName("类的全限定名")2)类名.class3)对象名.getClass()

MySQL事务的概念,以及相关的操作

概念:在我们使用数据库的时候,通常 会围绕着一个业务功能, 展开一组操作, 这种操作中的每个小的 步骤, 要么 全部成功,要么全部失败. 那么就符合 事务的概念。
相关操作:
(1)开启事务:START TRANSACTION
(2)回滚事务:ROLLBACK;3)提交事务:COMMIT

SQL注入攻击的原理及解决方法

题目难度:简单
出题目的:复习JDBC第一天的知识点
原理:Statement对象在执行SQL语句时,将密码的一部分内容当作查询条件来执行了.
解决:使用Connection连接获取执行者对象时,选择获取预编译执行者对象,将SQL语句中的参数用"?"占位符替换,再单独为占位符赋值,最后再执行SQL语句,这样就解决了SQL注入攻击的问题.

分组查询的标准语法格式以及注意事项

题目难度:简单
出题目的:复习MySQL中的补充知识点
标准语法:SELECT 列名 FROM 表名 [WHERE 条件] GROUP BY 分组列名 [HAVING 分组后条件过滤] [ORDER BY 排序列名 排序方式];
注意事项:在SQL99语法中 , 在查询时出现在select后面的列 , 如果没有使用聚合函数 , 则必须要出现在group by关键字后面

jsp有哪些内置对象,作用是什么?(说出5-6个即可,介绍一下它们的作用)

题目难度:较难
出题目的:考察对web阶段一些概念性知识点的理解
1\request:HttpServletRequet类的Request对象,包含了用户端请求的的信息
2\response:HttpSevletResponse类的Response对象,包含服务器传回客户端的响应信息
3\session:HttpSession类的session对象,解决了http协议的无状态性 在服务器中保存了用户的会话信息
4\pageContext:PageContext类的PageContext对象,用于管理网页属性,为jsp页面包装页面的上下文,管理对属于jsp的特殊可见部分中已经命名对象的访问,它的创建和初始化都是由容器来完成的
5\application:ServletContext类的application对象,可以实现应用程序的资源共享
6\out:JspWriter类的out对象,主要用于向客户端输出数据
7\config:ServletConfig类的Config对象,用于存放jsp编译后的初始化数据(服务器的配置信息)
8\page:Object类的Page对象,是指jsp页面本身  在当前jsp有效
9\exception:处理jsp文件执行时发生的错误和异常,只有在错误页面里才使用,前提是在页面指令里要有isErrorPage=true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值