Java面试题2

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

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 进程
 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值