栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > Java面试题

j2ee程序员面试题

Java面试题 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

j2ee程序员面试题

1、几种服务器的区别及何时应用?为什么?(如weblogic,Tomat等等)
Joss、tomcat、weblogic、websphere
Web服务器:tomcat主要作用发布web应用程序
企业服务器:主要发布企业级应用程序,打包程jar、ear、war
2、使用Jms、socket的好处及它的用法?
Jms:
异步通信
Socket:
基于TCP、UDP的即时通信

3:谈谈你所了解的设计模式,说出去作用;
a、创建型模式
Singleton: 它是一种创建型的设计模式。解决的是实例化对象个数的问题,比如抽象工厂中的工厂、对象池等,其他创建型模式解决的都是new所带来的耦合关系。
Factory Method: 需要一个额外的工厂类来负责实例化“一边对象”。
Abstract factory: 创建一系列相互依赖的对象,并能在运行时改变系列。
b、结构型模式
Facade:注重简化接口,屏蔽各子系统的复杂性,提供更高层接口供客户访问。
Proxy:注重假借接口,通过增加间接代理,实现更多控制,屏蔽复杂性。
c、行为型模式
Observer:注重封装对象通知,支持通信对象的变化,实现对象状态改变,通知依赖它的对象并更新。
4、:tomcat5和tomcat6的区别。一个项目中,我们为什么要使用tomcat5或是tomcat6.
区别:
a、首先是目录的不同:Tomcat6.x在目录上最大的区别就是将 lib 包直接置于 HOME/lib 下,而tomcat 5.x 系列版本是分HOME/common,HOME/share,HOME/server 三个包存放的.
common目录中:存放Tomcat服务器和所有Web应用都能访问的JAR
share目录中: 存放所有web应用都能访问的,但tomcat不能访问的。
server目录中:存放Tomcat 服务器需要的但Web应用不能访问的JAR,另外该目录下webapps存放Tomcat 自带的APP-admin和manager两个应用。
b、bin文件夹下的启动文件不同了。
c、tomcat5.x基于Tomcat3.x,Tomcat4.x,遵循新的Servlet2.4,jsp2.0规范。他最大的特点是就是支持JDK5.0。tomcat5.x是个总结,改进版本,因为有了3.x,4.x作基础,加上使用JDK5.0使tomcat在性能上有了突飞猛进的发展,备受大家欢迎。
tomcat6.x是目前最新的版本。遵循新的Servlet2.5,jsp2.1规范。该版本增加了很多新特性。主要有:高级的IO功能:采用APR或NIO HTTP连接进行异步IO操作; 组件功能:可以使用ant-fextras.xml的方式为tomcat添加新的组件。

5:tomcat、weblogic的调优
a、禁用DNS查询
当web应用程序要记录客户端的信息时,它也会记录客户端的IP地址或者通过域名服务器查找机器名转换为IP地址。
DNS查询需要占用网络,并且包括可能从很远的服务器或者不起作用的服务器上获取对应IP的过程,这样会耗费一定的时间。为了消除DNS对性能的影响我们可以关闭DNS查询,方式是修改server.xml文件中的enableLoopups参数值为”false”;
b、调整线程数
通过修改应用程序的连接器(connector)中的处理请求的线程数。Tomcat使用线程池加速响应速度来处理请求。
6:你对java中的socket编程了解多少?
Socket是网络上运行的两个程序间双向通讯的一端,他既可以使接收请求,也可以是发送请求,利用它可以较方便地编写网络上数据的传递。
在java中,利用Socket方法,可以实现两台计算机之间的通讯。Socket可理解为客户端或服务器端的一个非凡的对象,这个对象有两个重要的方法,一个是getInputStream方法,另一个是getOutputStream方法。getInputStream方法可以得到一个输入流,客户端的Socket对象上的getInputStream方法得到的输入流实际上是从服务器端发出的数据流。getOutputStream方法得到一个输出流,客户端Socket对象上的getOutputStream方法返回的输出流就是将要发送到服务器端的数据流。(其实是一个缓冲区,暂时存储将要发送到服务器的数据)。

7:socket的连接方式,进行简单的说明
Socket client = new Socket(“服务器Ip”,服务器监听端口); 向服务器发送连接请求。
Socket(InetAddress address, int port): 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
Socket(String host, int port): 创建一个流套接字并将其连接到指定主机名上的指定端口号。
// Socket的实际工作由SocketImpl抽象类的实例执行。而具体实现是在SocketImpl抽象类的子类PlainSocketImpl的connect()中;

8:xml的解析方式?各有什么特点?项目中xml的数据怎么导入数据库中?
xml的解析方式:DOM,SAX,STAX等
DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树型结构造成的,这种结构占用的内存较多,这是因为DOM必须在解析文件之前把整个文档都加载到内存中,适合对XML的随机访问。
SAX:不象DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文件结束,或者标签开头,标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件。
STAX:Streaming API for XML(这个不了解)

可以适用xml的解析方式解析xml数据成Object,再插入数据库中。
9:Sql2000和sql2005有什么区别?
a、 最直观的一点就是两者的界面有很明显的不同。sql2005的操作风格更接近于vs2005。
b、 sql2005比sql2000存储的数据量要大很多,sql2005支持数据库逻辑分区;
c、 sql2000与sql20005 jdbc连接不同:
sql2000 jdbc连接:url地址:jdbc:microsoft:sqlserver://:<1433>;
driver :com.microsoft.jdbc.sqlserver.SQLServerDriver;
sql2005 jdbc连接:url地址:jdbc:sqlserver://:[;databaseName=];
driver :com.microsoft.sqlserver.jdbc.SQLServerDriver;
d、 安全性能的提高:sql Server 2005包括了一些在安全性能上的改进,例如将用户和对象分开、数据库加密、设置安全默认值、增强密码政策、缜密的许可控制、以及一个增强型的安全模式。
e、 sql2005还提供了一些新的特性,比如文件流支持(向第三代数据库迈出了可喜的一步)、T-Sql的改进(处理错误、递归查询功能、关系运算符PIVOT, APPLY, ROW_NUMBER和其他数据列排行功能,等等)、数据库镜像、透 明的客户端重定向、新的基于架构的安全模型、内建的Http服务器等…。
10:struts1.2和struts2.0的区别?如何控制两种框架中的单例模式?
struts1.2和struts2.0的对比
a、Action类:
struts1.2要求Action类继承一个基类。struts2.0 Action要求继承ActionSupport基类
b、线程模式
struts1.2 Action是单例模式的并且必须是线程安全的,因为仅有一个Action的实例来处理所有的请求。
单例策略限制了Struts1.2 Action能做的事情,并且开发时特别小心。Action资源必须是线程安全的或同步的。
struts2.0 Action为每一个请求产生一个实例,因此每有线程安全问题。
c、Servlet依赖
struts1.2 Action依赖于Servlet API,因为当一个Action被调用时HttpServletRequest和HttpServletResponse被传递给execut方法。
struts2.0 Action不依赖于容器,允许Action脱离容器单独测试。如果需要,Struts2 Action仍然可以访问初始的Request和Response。
但是,其他的元素减少或者消除了直接访问HttpServletRequest和HttpServletResponse的必要性。
d、可测性 测试struts1.2 Action的一个主要问题是execute方法暴露了Servlet API(这使得测试要依赖于容器)。一个第三方扩展:struts TestCase
提供了一套struts1.2的模拟对象来进行测试。
Struts2.0 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”也使得测试更容易。
11:项目中用到了那些测试方法?进行简单的描述?你是怎么测试的?项目中用了什么bug管理工具?在项目中如何去使用?
a、单元测试
单元测试用于测试软件中的各个组件。它是属于白盒测试的。用的最多的是使用Junit工具来进行单元测试。类只需继承TestCase类即可。
b、集成测试
把几个相关的单元集成在一起,通过检查集成单元或模块以发现缺陷的过程就称为集成测试。我们通常在项目中是将每个人的模块整合到一起进行统一测试。
c、系统测试
系统测试是一系列的测试,其主要目的是在模拟环境中完整、准确的运行软件系统。
我们通常的处理方法是:
1. 负载测试:使系统处理超过其能力的任务来测试系统的过程。
2. 压力测试:也叫做强度测试,获取系统正确运行的极限。
3. 性能测试:其目的不是为了发现任何错误或缺陷,而是消除瓶颈。
4. 可用性测试: 这个主要是体现在给用户的体验上。
d、用户验收测试
开发阶段之后的测试阶段确保开发的软件是完整且没有缺陷的。
项目中用到的bug管理工具很少,基本上没用。

12:项目中如何规范编码?
制定一份编码规范文档:
1、类名以大写开头、有意义的单词的组成,组合单词的每一个单词都要大写。
2、接口以I开头,实现类在类名后加Impl如:接口为IUserDAO,实现类为UserDAOImpl。
3、系统中涉及的常量字符串,不能采用硬编码,需从properties文件中读取。
4、编码需要多加注释
5、Jsp页面命名以小写字母开头、有意义的单词的组成,组合单词除第一个单词首字母小写,其他单词的首字母大写,其余小写。
6、包名全部小写
7、数据库中表字段:同5

13:java中的基本数据类型?各占多少位?多少字节?取值范围?
数据类型占位 字节 取值范围
Int324-2,147,483,648 ~ 2,147,483,647
Short162 -32768 ~ 32678
long648-9,223,372,036,854,775,808~+9,223,372,036,854,775,807
float 324-3,40292347E+38 ~ +3,40292347E+38
double648-1.79769313486231576E+308 ~ 1.79769313486231576E+308
char162 ‘u0000’ ~ ‘uFFFF’
boolean10.125 true/false
byte8 1 -128 ~ 127

14:项目中经常出现的异常?是什么原因产生的?又是如何解决的?
1、NullPointerException
出错原因:尝试访问null对象成员
解决方法:找到null对象成员,获得需要的业务对象实例。

2、ClassNotFoundException
出错原因:不能加载所需的类
解决方法:可能缺少对应的包,加入对应的包,或设置classpath路径

3、ClassCastException
出错原因:类转换错误出现的异常
解决方法:转换成相应的类,或对象。

Hibernate和spring中常出现的几个异常
4、org.springframework.beans.factory.BeanCreationException:
Error creating bean with name ‘sessionFactory’ defined in ServletContext resource [/WEB-INF/applicationContext.xml]:
Initialization of bean failed; nested exception is org.hibernate.MappingException: Repeated column in mapping for entity: com.xindeco.myregister.pojo.MyRegisterInfo column:
password (should be mapped with insert=”false” update=”false”)
出错原因:password 和repassword同时对应数据库表中的password一列,同时update和insert都设为true。xml文件如下:


解决方法:将repassword的insert和update设为false。

5、org.springframework.beans.factory.BeanCreationException:
Error creating bean with name ‘sessionFactory’ defined in ServletContext resource [/WEB-INF/applicationContext.xml]:
Initialization of bean failed;nested exception is org.hibernate.PropertyNotFoundException: Could not find a getter for ID in class
错误原因:hibernate的映射文件中ID是大写的,而pojo的类中id是小写的
解决方法:要么将pojo类中的id改称大写,要么把hibernate的映射文件中的ID改称小写。

15:jsp中怎样设置cookie?
以下scriptlet在客户端设置了一个cookie “mycookie”:
<% cookie mycookie = new cookie("aName","aValue"); response.addcookie(mycookie); %>
通常,cookies在JSP页的开始处进行设置,因为它们作为HTTP headers的一部分被送出。
如果你想在关闭浏览器后在cookie中保存数据,你还需要设置expiration date,例如,
cookie_name.setMaxAge( time_in_milisecs );

16:存储过程的作用?
存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是 SQL 语句和可选控制流语句的预编译集合,
以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,
而且允许用户声明变量、有条件执行以及其它强大的编程功能。
存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。
可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点:
可以在单个存储过程中执行一系列 SQL 语句。
可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。
存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句快。

17:如何考虑一个项目的安全性?从哪些方面去体现?
项目的安全性并不是指一个系统的功能,而是属性。
要考虑的方面:
a、防止有人恶意破坏,如:sql注入。
b、编码、权限的严密控制,也能很好的控制项目的安全性。如页面尽量少用客户端验证,而使用服务器验证,
减少有人修改客户端代码而破环项目的安全性。
c、硬件设备等的支持,如:防火墙能够防止有人攻击Ip, 从端口访问服务器。
d、平台稳定性如何,如:考虑linux,window平台下项目是否能够很好的运行。

18:如何单独屏蔽一个ip地址
方法一:使用tomcat来屏蔽一个ip
tomcat提供了两个参数供你配置:RemoteHostValve 和RemoteAddrValve。



方法二:到系统文件Hosts中添加配置:例如:192.168.1.28 : www.baidu.com

19:Hibernate与jdbc的联系
hibernate是jdbc的轻量级封装,包括jdbc的与数据库的连接(用hibernate.property的配置文件实现当然本质是封装了jdbc的forname),
和查询,删除等代码,都用面向对象的思想用代码联系起来,hibernate通过hbm 配置文件把po类的字段和数据库的字段关联起来比如数据库的id,在po类中就是pravite Long id; public Long getId() ;public setId(Long id);
然后hql语句也是面向对象的,它的查询语句不是查询数据库而是查询类的,这些实现的魔法就是xml文件,其实hibernate=封装的jdbc+xml文件

20:Hibernate与spring的联系
hibernate中的一些对象可以给Spring来管理,让Spring容器来创建hibernate中一些对象实例化。例如:SessionFactory,HibernateTemplate等。
Hibernate本来是对数据库的一些操作,放在DAO层,而Spring给业务层的方法定义了事务,业务层调用DAO层的方法,很好的将Hibernate的操作也加入到事务中来了。

21:一次运行javac的时候,是否可以运行多个java语句?
首先是java编译器把java源码编译成java字节码;再由java解析器解析java字节码,一次只能解析一个java语句。

36:概要设计和详细设计各有哪些文档?
概要设计:编码规范文档,需求分析文档概要设计,总计划文档
详细设计:系统详细设计文档

22:sqlserver和oracle数据库的性能优化
1).选用适合的ORACLE优化器
ORACLE的优化器共有3种:
   a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性)
在缺省情况下,ORACLE采用CHOOSE 优化器, 为了避免那些不必要的全表扫描(full table scan) ,
你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器.
访问Table的方式
2).ORACLE 采用两种访问表中记录的方式:
a. 全表扫描
全表扫描就是顺序地访问表中每条记录. ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描.
b. 通过ROWID访问表
你可以采用基于ROWID的访问方式情况,提高访问表的效率,RowId包含了表中记录的物理位置信息.ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(RowId)之间的联系。 通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高.
3). 选择最有效率的表名顺序(只在基于规则的优化器中有效)
4). WHERe子句中的连接顺序.
ORACLE采用自下而上的顺序解析WHERe子句,根据这个原理,表之间的连接必须写在其他WHERe条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERe子句的末尾.
5). SELECT子句中避免使用 ‘ * ‘
当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*’ 是一个方便的方法.不幸的是,这是一个非常
低效的方法. 实际上,ORACLE在解析的过程中, 会将’*’ 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这
意味着将耗费更多的时间.
6). 减少访问数据库的次数
当执行每条SQL语句时, ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等等. 由此可见, 减少访问数据库的次数 , 就能实际上减少 ORACLE的工作量.
7). 整合简单,无关联的数据库访问
如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系)
8). 使用表的别名(Alias)
当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误.
9). 对经常要查询的字段可以建立一个视图
10). 在表中的某个字段上建立索引,可以提高检索速度。

23:spring中可以用注入获得属性值,还有其他的方式吗?
读取配置文件
24:javac编译后会产生几个文件
每个java文件在编译后对应一个.class文件。

25:js的命名规范、注释有哪几种?java的命名规范
命名规范:
1. 变量名必须以字母或下划线(“_”)开头。
2. 变量名可以包含数字、从A到Z的大写字母和从a到z的小写字母
3. 由于javascript区分大小写,所以说,变量myVar、myVAR和myvar是三个不同的变量
注释: 1.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/264694.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号