Java面试题2

这篇博客主要涵盖了Java面试中的常见问题,包括HashMap与Hashtable的区别、List和Map的基本特性、以及List、Set、Map与Collection接口的关系。此外,还讨论了Servlet接口中的方法、会话跟踪技术如Cookie和Session的差异。在数据库方面,文章介绍了事务的四大特性、索引的优缺点和B+树的概念,以及关系型和非关系型数据库的区别。这些内容对于理解Java基础和数据库操作具有重要价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.JavaSE基础(32) 遍历数组的3种方式?

第一种:for循环

第二种:增强for循环foreach

第三种:利用jdk自带的方法  --> java.util.Arrays.toString()

2.JAVA中循环遍历list有三种方式?

JAVA中循环遍历list有三种方式for循环、增强for循环(也就是常说的foreach循环)、iterator遍历。

3.面向对象特征有哪些方面?

1. 封装,隐藏内部实现,只暴露公共行为

2. 继承,提高代码的重用性

3. 多态,体现现实生活中相似对象的差异性

4. 抽象,抽取现实世界中相似对象的共同点

4.Java实现多态机制是什么?

通过继承父类或实现接口。不同子类或实现类对同一父类方法有不同的实现。根据对象调用相应的实现方法。另外对于相似的方法,可以使用重载。

5、HashMap和Hashtable的区别

1. 线程同步,Hashtable线程安全,HashMap线程不安全

2. 效率问题,Hashtable效率低,HashMap效率高

3. HashMap可以使用null作为key,Hashtable不可以使用null为key

4. HashMap使用的是新实现,继承AbstractMap,而Hashtable是继承Dictionary类,实现比较老

5. Hash算不同,HashMap的hash算法比Hashtable的hash算法效率高

6. HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey。因为contains方法容易让人引起误解。

7. 取值不同,HashMap用的是Iterator接口,而Hashtable中还有使用Enumeration接口

6、List和 Map区别?

一个是存储单列数据的集合,另一个是存储键和值的双列数据的集合,List中存储的数据是有顺序,并且允许重复;Map中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的。

  1. List有重复值,Map没有重复key,但可以有重复值
  2. List有序,Map不一定有序
  3. List只能存单列值,Map可以存双列值

7、List, Set, Map是否继承自Collection接口?

   List,Set是,Map不是

8、List、Map、Set三个接口,存取元素时,各有什么特点?

List使用get(index)取值,也可以使用Iterator、toArray取值

Set只能通过Iterator、toArray取值

Map取值使用get(key)取值,也可以使用keySet取键值集合,也可使用values取值集合,entrySet取全部映射。

9.谈谈tomcat的优化经验?

加大tomcat使用的jvm的内存。

解决JRE内存泄漏
更新到最新版本的Tomcat来获得较好性能和可扩展。

线程池设置。

利用缓存和压缩,采用了Nginx作为缓存服务器,将图片、css、js文件都进行了缓存。

采用集群:采用了Nginx来作为请求分流的服务器,后端多个tomcat共享session来协同工作。

去掉对web.xml的监视;

将jsp提前编辑成servlet,在服务器下运行时,把jsp都打开一遍

10、什么是Servlet?

可以从两个方面去看Servlet:

a、API:有一个接口servlet,它是servlet规范中定义的用来处理客户端请求的程序需要实现的顶级接口。

b、组件:服务器端用来处理客户端请求的组件,需要在web.xml文件中进行配置。

11、Servlet的生命周期?

servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。

12、Servlet接口中有哪些方法?

Servlet接口定义了5个方法:

  1. void init(ServletConfig config) throws ServletException

  2. void service(ServletRequest req, ServletResponse resp) throws ServletException, java.io.IOException

  3. void destory()

  4. java.lang.String getServletInfo()

  5. ServletConfig getServletConfig()

 

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

默认情况是调用doGet()方法,JSP页面中的Form表单的method属性设置为post的时候,调用的为doPost()方法;为get的时候,调用deGet()方法。

14、转发(Forward)和重定向(Redirect)的区别?

转发是服务器行为,重定向是客户端行为。

从效率来说

forward:高.
redirect:低.

15.自动刷新(Refresh)?

Response.setHeader()

16.Servlet与线程安全

 Servlet不是线程安全的,多线程并发的读写会导致数据不同步的问题。 解决的办法是尽量不要定义name属性,而是要把name变量分别定义在doGet()和doPost()方法内。虽然使用synchronized(name){}语句块可以解决问题,但是会造成线程的等待,不是很科学的办法。

17、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?

JSP是Servlet的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类Servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是java和HTML可以组合成一个扩展名为.jsp的文件。JSP偏重于视图,Servlet偏重于业务逻辑。

18、JSP工作原理?

JSP是一种Servlet,但是与HttpServlet的工作方式不太一样。HttpServlet是先由源代码编译为class文件后部署到服务器下,为先编译后部署。而JSP则是先部署后编译。JSP会在客户端第一次请求JSP文件时被编译为HttpJspPage类(接口Servlet的一个子类)。该类会被服务器临时存放在服务器工作目录里面。

19、Request对象的主要方法有哪些?

  • setAttribute(String name,Object):设置名字为name的request 的参数值

  • getAttribute(String name):返回由name指定的属性值

  • getAttributeNames():返回request 对象所有属性的名字集合,结果是一个枚举的实例

  • getCookies():返回客户端的所有 Cookie 对象,结果是一个Cookie 数组

  • getCharacterEncoding() :返回请求中的字符编码方式 = getContentLength() :返回请求的 Body的长度

  • getHeader(String name) :获得HTTP协议定义的文件头信息

  • getHeaders(String name) :返回指定名字的request Header 的所有值,结果是一个枚举的实例

  • getHeaderNames() :返回所以request Header 的名字,结果是一个枚举的实例

  • getInputStream() :返回请求的输入流,用于获得请求中的数据

  • getMethod() :获得客户端向服务器端传送数据的方法

  • getParameter(String name) :获得客户端传送给服务器端的有 name指定的参数值

  • getParameterNames() :获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例

  • getParameterValues(String name):获得有name指定的参数的所有值

  • getProtocol():获取客户端向服务器端传送数据所依据的协议名称

  • getQueryString() :获得查询字符串

  • getRequestURI() :获取发出请求字符串的客户端地址

  • getRemoteAddr():获取客户端的 IP 地址

  • getRemoteHost() :获取客户端的名字

  • getSession([Boolean create]) :返回和请求相关 Session

  • getServerName() :获取服务器的名字

  • getServletPath():获取客户端所请求的脚本文件的路径

  • getServerPort():获取服务器的端口号

  • removeAttribute(String name):删除请求中的一个属性

12、request.getAttribute()和 request.getParameter()有何区别?

request.getParameter()获取的类型是String;request.getAttribute()获取的类型是Object

request.getPrameter()获取的是POST/GET传递的参数值和URL中的参数;request.getAttribute()获取的是对象容器中的数据值/对象。

13、JSP有哪些内置对象?作用分别是什么?

JSP一共有9个内置对象:

  1. request:负责得到客户端请求的信息,对应类型:javax.servlet.http.HttpServletRequest

  2. response:负责向客户端发出响应,对应类型:javax.servlet.http.HttpServletResponse

  3. session:负责保存同一客户端一次会话过程中的一些信息,对应类型:javax.servlet.http.httpsession

  4. out:负责管理对客户端的输出,对应类型:javax.serlvet.jsp.jspwriter

  5. application:表示整个应用环境的信息,对应类型:javax.servlet.servletcontext

  6. config:表示ServletConfig,对应类型:javax.servlet.servletconfig

  7. exception:表示页面中发生的异常,可以通过它获得页面异常信息,对应类型:java.lang.exception

  8. pagecontext:表示这个JSP页面上下文,对应类型:javax.servlet.jsp.pagecontext

  9. page:表示当前JSP页面本身。

14、JSP有哪些动作?作用分别是什么?

JSP一共有以下6中基本动作:

  1. JSP:include       (当页面被请求的时候引入一个文件)

  2. JSP:forward      (将请求转到另一个页面)

  3. JSP:useBean     (获得JavaBean的一个实例)

  4. JSP:setProperty (设置JavaBean的属性)

  5. JSP:getProperty (获得JavaBean的属性)

  6. JSP:plugin         (根据浏览器类型为Java插件生成object或者embed两种标记)

15、JSP常用指令有哪些?

page、include、taglib

16、讲解JSP中的四种作用域

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

a、page是代表一个页面相关的对象和属性。一个页面由一个编译好的java servlet类(可以带有include指令,但不可以带有include动作)表示。这既包括servlet又包括编译成servlet的jsp页面。

b、request是代表与web客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个web组件(由于forware指令和include动作的关系)

c、session是代表与用于某个web客户机的一个用户体验相关的对象和属性。一个web回话也可以经常跨域多个客户机请求

d、application是代表与整个web应用程序相关的对象和属性。这实质上是跨域整个web应用程序,包括多个页面、请求和回话的一个全局作用域。

19、JSP乱码如何解决?

a、JSP页面乱码:<%@page contentType="text/html;charset=utf-8" %>

b、表单提交时出现乱码:request.setCharacterEncoding("utf-8");

c、数据库出现乱码:jdbc:mysql://localhost:3306:/user?useSSL=false&useUnicode=true&characterEncoding=utf-8;

其实我一般的处理的方法就是配置一个过滤器对每个JSP页面进行字符集处理。

20、实现会话跟踪的技术有哪些?

1. 使用Cookie

优点: 数据可以持久保存,不需要服务器资源,简单,基于文本的Key-Value

缺点: 大小受到限制,用户可以禁用Cookie功能,由于保存在本地,有一定的安全风险。

2. URL 重写

在URL中添加用户会话的信息作为请求的参数,或者将唯一的会话ID添加到URL结尾以标识一个会话。

优点: 在Cookie被禁用的时候依然可以使用

缺点: 必须对网站的URL进行编码,所有页面必须动态生成,不能用预先记录下来的URL进行访问。

3. 隐藏的表单域

<input type="hidden" name ="session" value="..."/>

优点: Cookie被禁时可以使用

缺点: 所有页面必须是表单提交之后的结果。

4. HttpSession

在所有会话跟踪技术中,HttpSession对象是最强大也是功能最多的。

21、Cookie和Session的的区别?

1.由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景。

2.思考一下服务端如何识别特定的客户?这个时候Cookie就登场了。每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用 Cookie 来实现Session跟踪的。

3.Cookie其实还可以用在一些方便用户的场景下,设想你某次登陆过一个网站,下次登录的时候不想再次输入账号了,怎么办?这个信息可以写到Cookie里面,访问网站的时候,网站页面的脚本可以读取这个信息,就自动帮你把用户名给填了,能够方便一下用户。

22、什么是Tomcat?

Tomcat是一种web服务器,java编写的web项目可以部署在上面,用户在客户端请求时,都是将请求发到Tomcat上,Tomcat在将请求发到对应的项目上。

23、 详细描述MVC

基于java的web应用系统采用MVC设计模型,即用Model(模型)、View(视图)和Controller(控制)分离设计,这是目前web应用服务系统的主流设置方向。

Model:处理业务逻辑的模块。

View:负责页面显示,显示Model的处理结果给用户,主要实现数据到页面的转换过程。

Controller:负责每个请求的分发,把Form数据传递给Model进行处理,处理完成后,把处理结果返回给相应的View显示给用户。

数据库常见面试题:

1.事务四大特性?

 原子性,要么执行,要么不执行
  
隔离性,所有操作全部执行完以前其它会话不能看到过程

一致性,事务前后,数据总额一致

持久性,一旦事务提交,对数据的改变就是永久的。

2.索引有B+索引和hash索引

索引区别
Hashhash索引,等值查询效率高,不能排序,不能进行范围查询
B+数据有序,范围查询

 

3.索引的优缺点,什么时候使用索引,什么时候不能使用索引?

索引最大的好处是提高查询速度,
缺点是更新数据时效率低,因为要同时更新索引
对数据进行频繁查询进建立索引,如果要频繁更改数据不建议使用索引。
4.索引的底层实现(B+树,为何不采用红黑树,B树)重点

区别
红黑树增加,删除,红黑树会进行频繁的调整,来保证红黑树的性质,浪费时间
B树也就是B-树B树,查询性能不稳定,查询结果高度不致,每个结点保存指向真实数据的指针,相比B+树每一层每屋存储的元素更多,显得更高一点。
B+树B+树相比较于另外两种树,显得更矮更宽,查询层次更浅

5.B+树的实现

一个m阶的B+树具有如下几个特征:
1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。
2.所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
3.所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素

6.为什么使用B+Tree?

索引查找过程中就要产生磁盘I/O消耗,主要看IO次数,和磁盘存取原理有关。
根据B-Tree的定义,可知检索一次最多需要访问h个节点。数据库系统的设计者巧妙利用了磁盘预读原理,
将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入局部性原理与磁盘预读

7.索引分类,索引失效条件

 

8.varchar和char的使用场景

类型使用场景
varchar字符长度经常变的
char用字符长度固定的

 

9.数据库连接池的作用?

维护一定数量的连接,减少创建连接的时间、更快的响应时间、统一的管理
10.数据库三范式

级别概念
1NF属性不可分
2NF非主键属性,完全依赖于主键属性
3NF非主键属性无传递依赖

10.关系型数据库和非关系型数据库区别

关系型数据库:

优点

1、容易理解:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状、层次等其他模型来说更容易理解;

2、使用方便:通用的SQL语言使得操作关系型数据库非常方便;
3、易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率;
4、支持SQL,可用于复杂的查询。
5.支持事务

缺点
1、为了维护一致性所付出的巨大代价就是其读写性能比较差;
2、固定的表结构;
3、不支持高并发读写需求;
4、不支持海量数据的高效率读写


非关系型数据库:

1、使用键值对存储数据;
2、分布式;
优点
无需经过sql层的解析,读写性能很高
基于键值对,数据没有耦合性,容易扩展
存储数据的格式:nosql的存储格式是key,value形式
缺点
不提供sql支持
11.有哪些锁,select时怎么加排它锁?

概念
乐观锁自己实现,通过版本号
悲观锁共享锁,多个事务,只能读不能写,加 lock in share mode
排它锁一个事务,只能写,for update
行锁作用于数据行
表锁作于用表

12.死锁怎么解决

找到进程号,kill 进程
 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值