1.一网站如果有大量的人登陆访问。那么会产生很多的session,如果你是程序员你该怎么办?
session默认保存在内存中,内存资源宝贵,session数据量大导致内存利用率高,以下方案解决session内存存储问题:
1) 可以设置session超时时间,达到超时时间session自动清空
<session-config>
<session-timeout>20</session-timeout>
</session-config>
2) 将session中的数据序列化到硬盘中
3) s不使用session,使用cookie(此方法存在安全性问题)
2.Jsp有哪些内置对象?作用分别是什么?
Page,pageContext,request,response,session,application,out,config,exception
Page指的是JSP被翻译成Servlet的对象的引用.
pageContext对象可以用来获得其他8个内置对象,还可以作为JSP的域范围对象使用.pageContext中存的值是当前的页面的作用范围》
request代表的是请求对象,可以用于获得客户机的信息,也可以作为域对象来使用,使用request保存的数据在一次请求范围内有效。
Session代表的是一次会话,可以用于保存用户的私有的信息,也可以作为域对象使用,使用session保存的数据在一次会话范围有效
Application:代表整个应用范围,使用这个对象保存的数据在整个web应用中都有效。
Response是响应对象,代表的是从服务器向浏览器响应数据.
Out:JSPWriter是用于向页面输出内容的对象
Config:指的是ServletConfig用于JSP翻译成Servlet后 获得Servlet的配置的对象.
Exception:在页面中设置isErrorPage=”true”,即可使用,是Throwable的引用.用来获得页面的错误信息
3.String 是最基本的数据类型吗?
答:不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type),
剩下的都是引用类型(reference type),Java 5以后引入的枚举类型也算是一种比较特殊的引用类型。
4.&和&&的区别?
答:&运算符有两种用法:(1)按位与;(2)逻辑与。&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左
右两端的布尔值都是true整个表达式的值才是true。&&之所以称为短路运算是因为,如果&&左边的表达式的值是false,
右边的表达式会被直接短路掉,不会进行运算。很多时候我们可能都需要用&&而不是&,例如在验证用户登录时判定用户名不是null而且不是空
字符串,应当写为:username != null &&!username.equals(""),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本
不能进行字符串的equals比较,否则会产生NullPointerException异常。注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。
5.Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
答:Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后进行下取整。
6.用最有效率的方法计算2乘以8?
答: 2 << 3(左移3位相当于乘以2的3次方,右移3位相当于除以2的3次方)。
(1 10 11 100 101 110 111 1000)
(1 2 3 4 5 6 7 8)
7.如何实现字符串的反转及替换?
答:方法很多,可以自己写实现也可以使用String或StringBuffer/StringBuilder中的方法。有一道很常见的面试题是用递归实现字符串反转,代码如下所示:
public static String reverse(String originStr) {
if(originStr == null || originStr.length() <= 1)
return originStr;
return reverse(originStr.substring(1)) + originStr.charAt(0);
}
8.try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?
答:会执行,在方法返回调用者前执行。
9.转发(forward)和重定向(redirect)的区别?
答:forward是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL 的响应内容读取过来,然后把这些内容再发
给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。redirect就是服务器端根据逻辑,发送一个状
态码,告诉浏览器重新去请求那个地址,因此从浏览器的地址栏中可以看到跳转后的链接地址,很明显redirect无法访问到服务器保护起来资源,
但是可以从一个网站redirect到其他网站。forward更加高效,所以在满足需要时尽量使用forward(通过调用RequestDispatcher对象的forward()
方法,该对象可以通过ServletRequest对象的getRequestDispatcher()方法获得),并且这样也有助于隐藏实际的链接;在有些情况下,比如需要
访问一个其它服务器上的资源,则必须使用重定向(通过HttpServletResponse对象调用其sendRedirect()方法实现)。
10.什么是Web Service(Web服务)?
答:从表面上看,Web Service就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法透明的调用这个应用程序,
不需要了解它的任何细节,跟你使用的编程语言也没有关系。例如可以创建一个提供天气预报的Web Service,那么无论你用哪种编程语言开发的应用都可
以通过调用它的API并传入城市信息来获得该城市的天气预报。之所以称之为Web Service,是因为它基于HTTP协议传输数据,这使得运行在不同机器上的
不同应用无须借助附加的、专门的第三方软件或硬件,就可相互交换数据或集成。
<br>
11、JSP 的四种数据共享范围
pageContext 是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Servlet 类(可以带有任何的 include 指令,没有 include 动作)表示。这既包括 Servlet 又包括被编译成 Servlet 的 JSP 页面
Request 是代码 web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 web 组件(由于 forward 指令和 include 动作的关系)
Session 是代表与用于某个 web 客户机的一个用户体验相关的对象和属性。一个 web 会话可以也经常或跨越多个客户机请求
Application 是代表与整个 web 应用程序相关的对象和属性。这实质上是跨越整个 web 应用程序,包括多个页面、请求和会话的一个全局作用域
12、对 MVC 的理解,MVC 有什么优缺点,结合Struts,说明在一个 Web 应用中如何去使用
基于 Java 的 Web 应用系统采用 MVC 架构模式,即 model(模型)、view(视图)、control(控制器)分离设计;这是目前 Web 应用服务系统的主流设计方向
MVC 设计模式:应用观察者模式的框架模式
model:处理业务逻辑的模块,每一种处理一个模块(模型,操作数据的业务处理层,并独立于表现层)
view:负责页面显示,显示 model 处理结果给用户,主要实现数据到页面转换过程(视图,通过客户端数据类型显示数据,并回显模型层的执行结果)
control:负责请求分发,把 form 数据传递给 model 处理,把处理结果的数据传递给 view 显示(控制器,视图层和模型层的桥梁,控制数据的流向,接受视图发出的事件,并重绘视图)
JSP + Servlet + JavaBean,以控制器为核心,JSP 只负责显示和收集数据,Servlet,连接视图和模型,将视图层数据发送给模型层,JavaBean,分为业务类和数据实体,业务类处理业务数据,数据实体承载数据,基本上大多数的项目都是使用这种 MVC 的实现模式
13、会话跟踪技术
Cookie、URL 重写、设置表单隐藏域
14、过滤器有哪些作用
验证客户是否来自可信网络
对客户提交的数据进行重新编码
过滤掉客户的某些不应该出现的词汇
验证用户是否可以登录
验证客户的浏览器是否支持当前的应用
记录系统日志
15、web.xml 的作用
用户配置 web 应用的信息,如 listener、filter、Servlet
16、常用的 JSTL 标签
<c:if>
<c:choose>、<c:when>、<c:otherwise>
<c:forEach>
<c:set>
17、中间件
中间件就是程序中可植入的,可重用的,与业务逻辑无关的各种组件
中间件是基础软件的一大类,属于可复用软件的范畴。顾名思义,中间件处于操作系统软件与用户的应用软件的中间。中间件在操作系统、网络和数据库之上,应用软件的下层,总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效的开发和集成复杂的应用软件
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。
举例:
RMI(Remote Method Invocation)远程调用
Load Balancing 负载均衡,将访问符合分散到各个服务器中
Treasparent Fail-over 透明的故障切换
Clustering 集群,用多个小的服务器代替大型机
Back-end-Integration 后端集成,用现有的、新开发的系统如何去集成遗留的系统
Transaction 事务(全局事务:分布式事务)(局部事务:在同一数据库连接内的事务)
Dynamic Redeployment 动态重新部署,在不停止原系统的情况下,部署新的系统
System Managerment 系统管理
Threading 多线程处理
Message-oriented Middleware 面向消息的中间件(异步的调用编程)
Component Life Cycle 组件的生命周期管理
Resource pooling 资源池
Security 安全
Caching 缓存
18、如何输出某种编码的字符串
String str = new String("testABC".getBytes("iso-8859-1"), "utf-8");
19、J2EE 是技术还是平台还是框架
J2EE 本身是一个标准,一个为企业分布式应用开发提供的标准平台
J2EE 也是一个框架,包括 JDBC、JNDI、RMI、JMS、EJB、JTA 等技术
20、什么是 ORM
对象关系映射(Object-Relational Mapping)是一种为了解决面向对象与面向关系数据库存在的互不匹配的技术,简单说,ORM 是通过使用描述对象和数据库之间映射的元数据,将 Java 程序中的对象自动持久化到关系数据库中,本质上就是将数据从一种形式转换到另一种形式
21、Hibernate 的 5 个核心接口
Configuration:配置 Hibernate,根据其启动 Hibernate,创建 SessionFactory 对象
SessionFactory:初始化 Hibernate,充当数据存储源的代理,创建 session 对象,SessionFactory 是线程安全的,意味着它的同一个实例可以被应用的多个线程共享,是重量级、二级缓存
Session:负责保存、更新、删除、加载和查询对象,是线程不安全的,避免多个线程共享一个 session,是轻量级、一级缓存
Query 和 Criteria:执行数据库的查询
22、Hibernate 是如何处理事务的
Hibernate 的事务实际上是底层的 JDBC Transaction 的封装或者是 JTA Transaction 的封装,默认情况下使用 JDBC Transaction
23、Connection 类中有哪几个事务处理方法
setAutoCommit(boolean autoCommint):设置是否自动提交事务,默认为自动提交
commint():提交事务
rollback():回滚事务
24、JDBC 中访问数据库的步骤、Statement 和 PreparedStatement 的区别
Java 中访问数据库的步骤如下
1)注册驱动
2)建立连接
3)创建 Statement
4)执行 sql 语句
5)处理结果集(若 sql 语句为查询语句)
6)关闭连接
Statement、PreparedStatement 区别
1) 创建时的区别:
Statement stm = con.createStatement();
PreparedStatement pstm = con.prepareStatement(sql);
执行的时候:
stm.execute(sql);
pstm.execute();
2) PreparedStatement 一旦绑定了 SQL,此 pstm 就不能执行其它的 SQL,即只能执行一条 SQL 命令;Statement 可以执行多条 SQL 命令。
3) 对于执行同构的 SQL(只有参数值不同,其它SQL 结构都相同),用 PreparedStatement 的执行效率比较高,支持预编译,可以执行批量处理任务;对于异构的SQL 语句,Statement 的执行效率较高。
4) 代码的可读性和可维护性;(例如一个insert 的 SQL 语句,stm 在 SQL 中需要用字符形式写入传递的参数,pstm 提供方法传递参数,并且过滤掉SQL 中的特俗字符“ ’”,“-”)。
5) PreparedStatement 提高了安全性,防止了SQL 注入,但 Statement 不能实现,只能做判断和过滤。
25、Hibernate 中 Java 对象的三种状态,对象分别如何进入某种状态
1)临时状态(transient)
特征:
不处于 Session 缓存中
数据库中没有对象记录
Java 对象如果进入临时状态:
通过 new 语句创建一个对象时
当调用 session 的 delete() 方法,从 session 缓存删除一个对象时
2)持久化状态(persisted)
特征:
处于 session 缓存中
数据库中有对象记录
session 在特定时刻会保持二者同步
Java 对象如何进入持久化状态
session 的 save() 从临时状态到持久化状态
session 的 load(), get() 方法返回的对象
session 的 find() 返回的 list 集合中存放的对象
session 的 update(), saveOrUpdate() 使游离态到持久化状态
3)游离状态(detached)
特征:
不再位于 session 缓存中
游离对象由持久化状态转变而来,数据库中可能还有对应记录
Java 对象如何从持久化状态到游离状态
session 的 close() 方法
session 的 evict() 方法,从缓存中删除一个对象。 提高性能,少用。
26、JDBC 相对于 Hibernate 的优势
JDBC 效率高、直接操作数据库比较灵活
27、Hibernate 如何延时加载
当 Hibernate 在查询数据的时候,数据并没有存在内存中,当程序真正对数据进行操作时,对象才存在内存中,就实现了延时加载。节省了服务器的内存开销,从而提高了服务器的性能
28、session.load() 与 session.get() 的区别
都可以根据指定的实体类和 id 从数据库读取记录,并返回与之对应的实体对象
如果没有发现符合条件的记录,get 方法返回 null,而 load 方法会抛出一个 ObjectNotFundException
29、cookie 机制与 session 机制的区别
cookie 机制采用的是在客户端保持状态的方案,而 session 机制采用的是在服务器端保持状态的方案。由于服务器端保持状态的方案也需要在客户端保存一个标识,所有,session 机制可能需要借助于 cookie 机制来达到保存标识的目的
30. JSP 和 Servlet 有哪些相同点和不同点,它们之间的联系是什么JSP 是 Servlet 技术的扩展,本质上是 Servlet 的简易方式,更强调应用的视图表达。JSP 编译后是“Servlet 类”。Servlet 和 JSP 最主要的不同点在于,Servlet 的应用逻辑是在 Java 文件中,并且完全从表示层中的 HTML 里分离开来。而 JSP 的情况是 Java 和 HTML 可以组合成一个扩展名为 .jsp 的文件。JSP 侧重于视图,Servlet 主要用于控制逻辑