您的位置:首页 > 职场人生

JAVA面试题4

2016-04-01 03:26 399 查看
[align=center]JAVA面试题[/align]
网上找到一些JAVA面试题,不过,不管是不是面试题,有些时候在闲了下来的看一看,或许或以找到自己技术上的不足点。有一些是有答案的,有一些是没有答案自己做的。放在这里,放便自己,方便大家。
1、编写一个方法,这个方法搜索一个字符数组中是否存在某个字符,如果存在,则返回这个字符在字符数组中第一次出现的位置(序号从0开始计算),否则,返回-1。要搜索的字符数组和字符都以参数形式传递传递给该方法,如果传入的数组为null,应抛出IllegalArgumentException异常。在类的main方法中以种可能出现的情况测试验证该方法编写得是否正确,例如,字符不存在,字符存在,传入的数组为null等。
[align=left]publicclass Check {[/align]
[align=left] /**[/align]
[align=left] *@paramargs[/align]
[align=left] */[/align]
publicint check(String[]
src,String str) throws IllegalArgumentException
[align=left] {[/align]
[align=left] int location=-1;[/align]
[align=left] if(src==null)[/align]
[align=left] {[/align]
thrownew IllegalArgumentException();

[align=left] }[/align]
for(int
i=0;i<src.length;i++)
[align=left] {[/align]
[align=left] if(src[i].equals(str))[/align]
[align=left] {[/align]
[align=left] location=i;[/align]

break;
[align=left] }[/align]
[align=left] }[/align]
[align=left] return location;[/align]
[align=left] }[/align]
publicstaticvoid
main(String[] args) {
//
TODO Auto-generated method stub
[align=left] Check c=new Check();[/align]
[align=left] String[] a={"a","b","c"};[/align]
[align=left] int location;[/align]
[align=left] String str="a";[/align]
[align=left] try {[/align]
[align=left] location=c.check(a, str);[/align]
[align=left] if(location==-1)[/align]

System.out.println("查找的字母"+str+"没有在数组中");
[align=left] else[/align]

System.out.println("Location is :"+location);
[align=left] } catch (IllegalArgumentException e) {[/align]
//
TODO Auto-generated catch block

System.out.println("请不要输入null数组");
[align=left] }[/align]
[align=left] }[/align]
}
2、编写一个程序,这个程序把一个整数数组中的每个元素用逗号连接成一个字符串,例如,根据内容为[1][2][3]的数组形成内容为"1,2,3"的字符串。

[align=left]publicclass ConnectArrayWithComma {[/align]
void test(String[]
src)
{

[align=left] String str="";[/align]
for(int
i=0;i<src.length;i++)
[align=left] {[/align]
[align=left] str+=src[i];[/align]
[align=left] if(i<src.length-1)[/align]
[align=left] str+=",";[/align]
[align=left] }[/align]
[align=left] System.out.println(str);[/align]
[align=left] }[/align]
[align=left] /**[/align]
[align=left] *@paramargs[/align]
[align=left] */[/align]
publicstaticvoid
main(String[] args) {
//
TODO Auto-generated method stub
[align=left] ConnectArrayWithComma c=new ConnectArrayWithComma();[/align]
[align=left] String[] a={"a","b","c"};[/align]
[align=left] c.test(a);[/align]
[align=left] }[/align]
}
3、请编写一个字符输入流的包装类,通过这个包装类对底层字符输入流进行包装,让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时,能够在读取的每行前面都加上有行号和冒号。
[align=left]import java.io.*;[/align]
[align=left]publicclass PackTextFileWithLineNumber {[/align]
[align=left] void doPack(String fileNameAndPath)[/align]
[align=left] { [/align]
[align=left] FileReader fr;[/align]
[align=left] try {[/align]
[align=left] fr=new FileReader(fileNameAndPath);[/align]
[align=left] BufferedReader br=new BufferedReader(fr);[/align]
String
readLine=null;
[align=left] int lineNumber=1;[/align]
[align=left] while((readLine=br.readLine())!=null)[/align]
[align=left] {[/align]

readLine=lineNumber+":"+readLine;
[align=left] System.out.println(readLine);[/align]
[align=left] lineNumber++;[/align]
[align=left] }[/align]
[align=left] } catch (Exception e) {[/align]
//
TODO Auto-generated catch block
[align=left] e.printStackTrace();[/align]
}

[align=left] }[/align]
[align=left] /**[/align]
[align=left] *@paramargs[/align]
[align=left] */[/align]
publicstaticvoid
main(String[] args) {
//
TODO Auto-generated method stub
[align=left] PackTextFileWithLineNumber test=new PackTextFileWithLineNumber();[/align]
[align=left] String fileNameAndPath="c://change.txt";[/align]
[align=left] test.doPack(fileNameAndPath);[/align]
[align=left] [/align]
[align=left] }[/align]
}
4、Servlet的生命周期
一个servlet的生命周期由部署servlet的容器来控制。当一个请求映射到一个servlet时,该容器执行下列步骤。
1).如果一个servlet的实例并不存在,Web容器
a. 加载servlet类。
b. 创建一个servlet类的实例。
c. 调用init初始化servlet实例。该初始化过程将在初始化servlet中讲述。
2).调用service方法,传递一个请求和响应对象。
3).如果该容器要移除这个servlet,可调用servlet的destroy方法来结束该servlet。
5、页面之间传递数据的方法
通过request, session, application, javaBean, sessionBean, 当然还有数据库了
6、JSP和Servlet有哪些相同点和不同点,它们之间的联系是什么?
JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。
7、四种会话跟踪技术
答:会话作用域ServletsJSP 页面描述
page否是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成 servlet 的 JSP 页面
request是是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)
session是是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常会跨越多个客户机请求
application是是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域
9、J2EE是技术还是平台还是框架
J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。
J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。
10、B/S和C/S的区别
Client/Server是建立在局域网的基础上的.Browser/Server是建立在广域网的基础上的.
1).硬件环境不同:
C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务.
B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行

2).对安全要求不同
C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S发布部分可公开信息.
B/S 建立在广域网之上, 对安全的控制能力相对弱, 面向是不可知的用户群.
3).对程序架构不同
C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑.
B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 从MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持网络的构件搭建的系统. SUN 和IBM推的JavaBean 构件技术等,使 B/S更加成熟.

4).软件的可重用性
C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好.
B/S 对的多重结构,要求构件相对独立的功能. 能够相对较好的重用.就入买来的餐桌可以再利用,而不是做在墙上的石头桌子
5).系统维护不同
系统维护是软件生存周期中,开销大, -------重要
C/S 程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级. 升级难. 可能是再做一个全新的系统
B/S 构件组成,方面构件个别的更换,实现系统的无缝升级. 系统维护开销减到最小.用户从网上自己下载安装就可以实现升级.
6).处理问题不同
C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是相同的系统
B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的. 与操作系统平台关系最小.
7).用户接口不同
C/S 多是建立的Window平台上,表现方法有限,对程序员普遍要求较高
B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流. 并且大部分难度减低,减低开发成本.
8).信息流不同
C/S 程序一般是典型的中央集权的机械式处理, 交互性相对低
B/S 信息流向可变化, B-B B-C B-G等信息、流向的变化, 更象交易中心
11、面向对象的特征有哪些方面,分别是什么?
1.抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2.继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
3.封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
4. 多态性:
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
12、栈和队列的区别
栈和队列都是在一个特定范围的存储单元中存储的数据,这些数据都可以重新被取出使用。不同的是,栈就象一个很窄的桶先存进去的数据最后才能取出来,即“先进后出”。而队列则不一样,队列有点象日常排队买东西的人的“队列”先排队的人先买,后排队的人后买,即“先进先出”。有时在数据结构中还有可能出现按照大小排队或按照一定条件排队的数据队列,这时的队列属于特殊队列,就不一定按照“先进先出”的原则读取数据了。
13、范式
请参见文章(数据库设计三大范式应用实例剖析(讲得比较清楚)
14、数据库的事务处理
事务是现代数据库理论中的核心概念之一。如果一组处理步骤或者全部发生或者一步也不执行,我们称该组处理步骤为一个事务。当所有的步骤像一个操作一样被完整地执行,我们称该事务被提交。由于其中的一部分或多步执行失败,导致没有步骤被提交,则事务必须回滚(回到最初的系统状态)。事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。持久性表示已提交的数据在事务执行失败时,数据的状态都应该正确。
15、EJB
EJB技术定义了一组可重用的组件:Enterprise JavaBeans。你可以利用这些组件,像搭积木一样的建立你的分布式应用程序。当你把代码写好之后,这些组件就被组合到特定的文件中去。每个文件有一个或多个Enterprise Beans,在加上一些配置参数。最后,这些Enterprise Beans被配置到一个装了EJB容器的平台上。客户能够通过这些Beans的home接口,定位到某个beans,并产生这个beans的一个实例。这样,客户就能够调用Beans的应用方法和远程接口。EJB技术简化了用JAVA语言编写的企业应用系统的开发、配置和执行。有三种类型的Enterprise
beans: Session beans、 entity beans和Message-driven Beans。
16、JavaBean
JavaBean是用Java语言编写的与平台无关的组件。它是描述Java的软件组件模型,有点类似于Microsoft的COM组件的概念。在Java模型中,通过JavaBean可以无限扩充Java程序的功能,通过JavaBean的组合可以快速的生成新的应用程序。JavaBean可以实现代码的重复利用,对于程序的易维护性也有重大的意义。非可视化的JavaBean,在JSP程序中常用来封装事务逻辑、数据库操作等,可以很好的实现业务逻辑和前台程序的分离。JavaBean在服务器端的应用方面表现出了越来越强的生命力。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: