java常见的面试题和面试技巧 谁能告诉我 谢谢

Python027

java常见的面试题和面试技巧 谁能告诉我 谢谢,第1张

如果说是一个企业急需招人,我想那就得多准备一些框架方面的知识,毕竟做项目是用的框架!下面进入主题:大概的流程是这样吧 框架——》Java基础——》数据库相关点——》页面注意技巧

一:框架——》

1,)Struts2是如何实现MVC的?M(模型):这个一般不由Struts来做V (视图):视图也不算struts的强项,但是struts提供优秀的标签来支持视图的展示,利用标签,可以将数据合理的展示给用户控制器:struts的重要功能,提供struts的过滤器,拦截用户的请求,查找struts配置文件,为其匹配一个对应的Action,这个Action负责调用模型,获得数据,然后对数据做部分处理,接着Action再将处理后的数据,为其选择一个视图进行输出。

2) Struts工作机制?为什么要使用Struts? 工作机制: Struts的工作流程: 在web应用启动时就会加载初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象当ActionServlet接收到一个客户请求时,将执行如下流程. (1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给ActionForward对象指向的JSP组件(7)ActionForward对象指向JSP组件生成动态网页,返回给客户为什么要用: JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。基于Struts开发的应用由3类组件构成:控制器组件、模型组件、视图组件 Struts的validate框架是如何验证的? 在struts配置文件中配置具体的错误提示,再在FormBean中的validate()方法具体调用。

3)spring工作机制及为什么要用? 1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。 2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller. 3.DispatcherServlet请请求提交到目标Controller 4.Controller进行业务逻辑处理后,会返回一个ModelAndView 5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象 6.视图对象负责渲染返回给客户端。为什么用: AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务 (比 如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。

IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单词 倒置 所表明的,IOC 就像反 过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),每一个对象都是用 其协作对象构造的。因此是由容器管理协作对象(collaborator)。

4)Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory为什么要用: 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。2. Hibernate是如何延迟加载? 1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)2. Hibernate3 提供了属性的延迟加载功能当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。3.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many。

5)Hibernate的一级缓存与二级缓存的区别?

一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,如果短时间内这个session(一定要同一个session)又做了同一个操作,那么hibernate直接从一级缓存中拿,而不会再去连数据库,取数据。二级缓存就是SessionFactory级别的缓存,顾名思义,就是查询的时候会把查询结果缓存到二级缓存中,如果同一个sessionFactory创建的某个session执行了相同的操作,hibernate就会从二级缓存中拿结果,而不会再去连接数据库。(这个题想简答就可以了,但是如果想深入去多问几个问什么这里提供一个连接,写得较为详细:1)

另外一个关键点是:你要知道什么信息和什么操作,该调用什么级别的缓存!

6)如何优化Hibernate?(这个问题有些触及到这个框架的弱点了,那就得想办法应付)

1.使用双向一对多关联,不使用单向一对多 2.灵活使用单向一对多关联 3.不用一对一,用多对一取代 4.配置对象缓存,不使用集合缓存 5.一对多集合使用Bag,多对多集合使用Set 6. 继承类使用显式多态 7. 表字段要少,表关联不要怕多,自己再补充一点,上面说到的都是关于数据库设计 带来的优势,从而起到优化框架的效果,但是真正在实际操作中,我们只有尽量控制不使用懒加载“lazy

=true”,如果在涉及的尽量使用Hql语句

7)struts的核心是什么?(参考了这个回答:2)

FilterDispatcher也是Struts2的核心技术。FilterDispatcher核心控制器执行以下操作:(1)读取静态数据信息(2)决定需要转发或者导航的Action配置(3)创建Action的Context(4)创建Action代理(5)内存清理和性能优化拦截器:Interceptor 拦截器本身是一个普通的Java对象,它能动态拦截Action调用,在Action执行前后执行拦截器本身提供的各种个样的Web项目需求。也可以阻止Action的执行,同时也可以提取Action中可以复用的部分。(1)在Action调用之前提供系统处理流程逻辑控制(2)和Action交互时,提供Ation执行时的一些初始信息(3)在Action结束后,一些事后的处理流程逻辑(4)修改Action中返回的Result信息(5)捕获异常栈是用ognl表达式存值的最初地方,即一个存值的栈 自己再补充一点:struts的标签库也算一个。

8)ssh 的工作流程(这个问题留作作业,它们之间的相互实现,相互调用从原理上理解就行了)

久雅科技面试题 【JAVA软件工程师】

1、基本集合类有哪些,各自的特点?

集合类型主要有3种:set(集)、list(列表)和map(映射)。

List 关心的是索引,与其他集合相比,List特有的就是和索引相关的一些方法:get(int index) 、 add(int index,Object o) 、 indexOf(Object o) 。

Set关心唯一性,它不允许重复。

Map关心的是唯一的标识符。他将唯一的键映射到某个元素。当然键和值都是对象。

2、下面代码的运行结果:(A)

public class Foo {

public static void main(String[] args) {

String s

String.out.println("s="+s)

}

}

A.由于String s没有初始化,代码不能编译通过 B.代码得到编译,输出结果为"s="

C.代码得到编译,并输出"s=null" D.代码得到编译,但捕获到NullPointException异常

3、请说明equal和==的区别。

int i=1int j=1

在一个判断条件中使用i==j是否为true?

如果i和j是integer呢?

==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。

equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。

==比较的是2个对象的地址,而equals比较的是2个对象的内容。

4、编写一个方法用于奇偶数判定。

int num=0

System.out.println("请输入一个整数:")

Scanner inputScanner=new Scanner(System.in)

num=inputScanner.nextInt()

if(num%2==0){

System.out.println(num+"为偶数")

}else{

System.out.println(num+"为奇数")

}

5、以下这段代码是否正确:

String[] name={"tom","dick","harry"}

for(i=0i<=name.lengthi++){

System.out.print(name[i]+'\n')

}

这段代码错误,会触发“ArrayIndexOutOfBoundsException”异常,这是代码在尝试访问不在数组的索引取值范围内的元素时会显示的运行时错误消息。

6、以下两个打印,分别输出什么结果:

double amount1=2.0;

double amount2=1.1;

double amount3=0.9;

System.out.println(amount1-amount2==amount3)

BigDecimal damount1=newBigDecimal("2.0")

BigDecimal damount2=newBigDecimal("1.1")

BigDecimal damount3=newBigDecimal("0.9")

System.out.println(damount1.subtract(damount2).equals(damount3))

7、jsp和servlet有何区别?

jsp在本质上就是servlet但是两者的创建方式不一样。

servlet完全是Java程序代码构成擅长于流程控制和事务处理,而通过jsp来生成动态网页;jsp由HTML代码和JSP标签构成,可以方便地编写动态网页。

因此在实际应用中采用servlet来控制业务流程,而采用JSP来生成动态网页。在struts框架中,jsp位于MVC设计模式的视图层,而servlet位于控制层。

8、以下说法错误的是?(A)

A.session存在服务器,cookie存在硬盘

B.session机制采用的是服务器端保持状态,但是在应用过程中借助于cookie机制来达到保存标识的目的,从而实现用户登录

C.cookie只与你的主机(域)有关,与select和jsp页面无关

D.cookie中不能直接存取java对象,session中可以存对象

9、下面关于forward和redirect的描述,不正确的是?(D)

A.执行forward时,浏览器不知道服务器发送的内容从何而来,地址栏还是原来的地址

B.执行forward时,服务器端告诉浏览器重新去请求地址

C.forward是内部重定向,redirect是外部重定向

D.forward是服务器将控制权转交给另一个内部服务器对象,由新的对象来全权负责响应用户的请求

10、http请求中,get和post的区别?

(1)get是从服务器上获取数据,post是向服务器传送数据。 在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交。

(2)对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

(3) GET方式提交的数据最多只能有1024字节,而POST则没有此限制。

(4)安全性问题。正如在(1)中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用 get;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用 post为好。

11、Spring和Hibernate整合过程中各对象(BO为业务模型)注入的顺序是?(C)

A.DateSource->SessionFactory->Biz->DAO B.SessionFactory->DateSource->DAO->BO

C.DateSource->SessionFactory->DAO->BO D.SessionFactory->DateSource->Biz->DAO

12、所有通过英语六级考试的学生都参加了学校的英语俱乐部,王进参加了英语俱乐部,所以他一定通过了英语六级考试。以下哪项最好的指出了上述论证的逻辑错误?(C)

A.部分通过英语六级考试的学生没有参加英语俱乐部

B.王进参加英语俱乐部是因为他符合加入俱乐部的基本条件

C.有些参加英语俱乐部的学生还没有通过英语六级考试

D.王进曾经获得过年级英语演讲比赛第一名

13、Spring实现ioc是基于何种底层java技术?

基于java的反射机制 , 在spring初始化的时候 , 初始化所有bean , 然后在应用程序需要的时候 , 通过反射机制来获取。

14、为什么有时需要连接池?列出一个连接池的实例,举例说明使用连接池的好处。

使用连接池是为了提升操作数据库的效率,使用连接池就好比一些东西已经造好等着你来用就行了,不使用连接池就像是你在用他们之前还要先造好然后再拿去用,这比不用连接池要耗费更多的时间。

package test

import java.sql.*

import java.util.*

public class DBConnpool

{

private int inUse = 0

private Vector<Connection>connections = new Vector<Connection>()

private String poolname = "dbconnpool"

private String dbid = "jdbc:mysql://localhost:3306/teasystem"

private String drivername = "com.mysql.jdbc.Driver"

private String username = "root"

private String password = "123"

private int maxconn = 5000

public DBConnpool(){}

public void setdbid(String dbid)

{this.dbid = dbid }

public void setusername(String username)

{this.username = username }

public void setpassword(String password)

{this.password = password }

public void setmaxconn(int maxconn)

{this.maxconn = maxconn }

public String getdbid()

{return dbid }

public String getusername()

{return username }

public String getpassword()

{ return password }

public int getmaxconn()

{return maxconn }

//将连接返还给连接池

public synchronized void reConnection(Connection conn)

{ Connection con = conn

connections.addElement(con)

inUse--

}

//从连接池获取一个连接

public synchronized Connection getConnection()

{

Connection con = null

if(connections.size()>0)

{

con = (Connection)connections.elementAt(0)

connections.removeElementAt(0)

try{

if(con.isClosed())

{con = getConnection()}

}catch(Exception e){

e.printStackTrace()

}

}else if(maxconn == 0||inUse<maxconn)

{ con = newConnection() }

if(con != null)

{inUse++ }

return con

}

private Connection newConnection()

{

Connection con = null

try{

Class.forName(drivername)

con = DriverManager.getConnection(dbid,username,password)

}catch(Exception e){

e.printStackTrace()

return null

}

return con

}

public synchronized void closeConn()

{

Enumeration allConnections = connections.elements()

while(allConnections.hasMoreElements())

{

Connection con = (Connection)allConnections.nextElement()

try{

con.close()

}catch(SQLException e){

e.printStackTrace()

}} } }

使用连接池,把暂时不使用的链接放入连接池,到需要使用的时候,从连接池中取出链接使用。

15、以下给定的数组,如何最简单的把每个值都打印出来?

String[] arry=new String[]{"john","Marry","Bob"}

System.out.println(Array.toString(arry))

16、java项目中引入了一个第三方库,运行到某段代码过程中抛出NoClassDefFoundError或NoSuchMethodError,这个问题如何产生的,你如何解决这个问题?

17、有一个字符串需要判断,条件如下:必须有至少1位数字,有1位字母,10位以上。你用何种技术实现这种判断?

if(/^\d+$/.test(str)) { 全为数字,执行... }当然你也可以用isNaN来判断if(isNaN(str)){ str是个数字,执行...}

18、Chrome浏览器用于调试的快捷键是什么?

F12

19、Chrome浏览器调试面板中,Elemets,Network,Resources分别是什么用途?

Elements 是页面html元素,

Network 是页面加载的时候网络资源加载情况

Resource 是网站的网页资源文件,包括css、js等

20、Eclipse中,让一个java程序看起来更易读的快捷键是什么?

Ctrl+Shift+F

21、简单说说什么是stack trace。

stack trace叫做堆栈轨迹:如果你需要打印出某个时间的调用堆栈状态,你将产生一个堆栈轨迹。

stack trace 中包括三部分,分别为:.bss .text .data

bss: 表示程序中未初始化的全局变量的一块内存区域

text: 表示程序中已初始化的全局变量的一块内存区域

data:表示存放程序执行代码的一块内存区域

J2EE是一套全然不同于传统应用开发的技术架构,包含许多组件,主要可简化且规范应用系统的开发与部署,进而提高可移植性、安全与再用价值。

J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共同的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,企业内部或外部难以互通的窘境。

J2EE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持,下面对J2EE中的13种技术规范进行简单的描述(限于篇幅,这里只能进行简单的描述):

JDBC(Java Database Connectivity)

JDBC API为访问不同的数据库提供了一种统一的途径,象ODBC一样,JDBC对开发者屏蔽了一些细节问题,另外,JDBC对数据库的访问也具有平台无关性。

JNDI(Java Name and Directory Interface)

JNDI API被用于执行名字和目录服务。它提供了一致的模型来存取和操作企业级的资源如DNS和LDAP,本地文件系统,或应用服务器中的对象。

EJB(Enterprise JavaBean)

J2EE技术之所以赢得媒体广泛重视的原因之一就是EJB。它们提供了一个框架来开发和实施分布式商务逻辑,由此很显著地简化了具有可伸缩性和高度复杂的企业级应用的开发。EJB规范定义了EJB组件在何时如何与它们的容器进行交互作用。容器负责提供公用的服务,例如目录服务、事务管理、安全性、资源缓冲池以及容错性。但这里值得注意的是,EJB并不是实现J2EE的唯一途径。正是由于J2EE的开放性,使得有的厂商能够以一种和EJB平行的方式来达到同样的目的。

RMI(Remote Method Invoke)

正如其名字所表示的那样,RMI协议调用远程对象上方法。它使用了序列化方式在客户端和服务器端传递数据。RMI是一种被EJB使用的更底层的协议。

Java IDL/CORBA

在Java IDL的支持下,开发人员可以将Java和CORBA集成在一起。他们可以创建Java对象并使之可在CORBA ORB中展开, 或者他们还可以创建Java类并作为和其它ORB一起展开的CORBA对象的客户。后一种方法提供了另外一种途径,通过它Java可以被用于将你的新的应用和旧的系统相集成。

JSP(Java Server Pages)

JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端所请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。

Java Servlet

Servlet是一种小型的Java程序,它扩展了Web服务器的功能。作为一种服务器端的应用,当被请求时开始执行,这和CGI Perl脚本很相似。Servlet提供的功能大多与JSP类似,不过实现的方式不同。JSP通常是大多数HTML代码中嵌入少量的Java代码,而servlets全部由Java写成并且生成HTML。

XML(Extensible Markup Language)

XML是一种可以用来定义其它标记语言的语言。它被用来在不同的商务过程中共享数据。

XML的发展和Java是相互独立的,但是,它和Java具有的相同目标正是平台独立性。通过将Java和XML的组合,您可以得到一个完美的具有平台独立性的解决方案。

JMS(Java Message Service)

MS是用于和面向消息的中间件相互通信的应用程序接口(API)。它既支持点对点的域,有支持发布/订阅(publish/subscribe)类型的域,并且提供对下列类型的支持:经认可的消息传递,事务型消息的传递,一致性消息和具有持久性的订阅者支持。JMS还提供了另

一种方式来对您的应用与旧的后台系统相集成。

JTA(Java Transaction Architecture)

JTA定义了一种标准的API,应用系统由此可以访问各种事务监控。

11. JTS(Java Transaction Service):

JTS是CORBA OTS事务监控的基本的实现。JTS规定了事务管理器的实现方式。该事务管理器是在高层支持Java Transaction API (JTA)规范,并且在较底层实现OMG OTS specification的Java映像。JTS事务管理器为应用服务器、资源管理器、独立的应用以及通信资源管理器提供了事务服务。

JavaMail

JavaMail是用于存取邮件服务器的API,它提供了一套邮件服务器的抽象类。不仅支持SMTP服务器,也支持IMAP服务器。

JAF(JavaBeans Activation Framework)

JavaMail利用JAF来处理MIME编码的邮件附件。MIME的字节流可以被转换成Java对象,或者转换自Java对象。大多数应用都可以不需要直接使用JAF。

参考1:http://baike.baidu.com/view/1507.htm

参考2:http://zhidao.baidu.com/link?url=wTeyiIgLeQ9pBVfF_1iOaQ5BgYQ9z155pbleXEFBmD0rBV-C3-SlmEAJXySPCjOMRCWRWnqwtKtOpTlPw7uoua