Java JSP SSH面试笔试题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java程序员笔试题
一、单项选择题(共10题,每题2分,共20分)
1.下列说法哪一个是正确的。

(B )
A.Java程序经编译后会产生machine code
B.Java程序经编译后会产生byte code
C.Java程序经编译后会产生DLL
D.以上都不正确
2.提供Java存取数据库能力的包是。

( A )
A.java.sql B.java.awt C.ng D.java.swing
3.执行如下程序代码后,C的值是。

(C )
a=0;c=0;
do{
--c;
a=a-1;
}while(a>0);
A.0 B.1 C.-1 D.死循环
4.下面的语句中正确的表达式为。

( C )
A.byte b = 128;
B.boolean n = null;
C.double d = 0.9239d;
D.float f = 0.9239;
5.将一个十六进制值赋给一个long型变量的正确写法为。

( D )
A.long number = 345L;
B.long number = 0345;
C.long number = 0345L;
D.long number = 0x345L;
6.以下程序代码的输出是。

( B )
public class test (
public static void main (String args[]) (
System.out.printIn (6 ^ 3);
)
)
A.3 B.5 C.6 D.11
7.以下程序代码的输出是。

(E )
public class test (
private static int j = 0;
private static boolean methodB(int k) (
j += k;
return true;
)
public static void methodA(int i) {
boolean b:
b = i < 10 | methodB (4);
b = i < 10 || methodB (8);
)
public static void main (String args[] } (
methodA (0);
system.out.printIn(j);
)
)
A.0 B.4 C.8 D.12 E.不能编译通过
8.以下程序代码的输出是。

(A)
public class test {
public static void add3 (Integer i) }
int val = i.intValue ( );
val += 3;
i = new Integer (val);
}
public static void main (String args [ ] ) {
Integer i = new Integer (0);
add3 (i);
system.out.printIn (i.intValue ( ) );
}
)
A.编译失败B.编译成功但在第三行会出现异常C.0 D.3
9.以下程序代码执行后,哪个说法正确?( B )
int index = 1;
boolean[] test = new Boolean[3];
boolean foo= test [index];
A.有异常抛出。

B.无法编译。

C.foo的值是0。

D.foo的值是null。

E.foo的值是true。

F.foo的值是false。

10.以下哪个类是swt包中的。

( D )
A.MessageBox B.MessageDialog C.JDialog D.DisplayMode
多项选择题(共5题,每题4分,共20分)
11.在下面的选项中合法的标识符有。

(ADEF )
A._ok
B.*point
C.this
D.$byte
E.const
F.ILikeJLCSS
12.下面的选项中哪些不是java的关键字。

(AB D )
A.TRUE
B.sizeof
C.goto
D.const
E.super
F.void
13.下面的叙述中正确的有。

(AC )
A.环境变量可在编译source code时指定。

B.在编译程序时,所能指定的环境变量不包括class path。

C.javac一次可同时编译数个Java源文件。

D.javac.exe能指定编译结果要置于哪个目录(directory)。

14.下面的叙述中正确的有。

( C )
A.equals()方法判定引用值是否指向同一对象。

B.= = 操作符判定两个分立的对象的内容和类型是否一致。

C.equals()方法只有在两个对象的内容一致时返回true。

D.类File重写方法equals()在两个分立的对象的内容和类型一致时返回true。

15.下面有关变量及其作用域的陈述哪些是对的。

( A C )
A. 在方法里面定义的局部变量在方法退出的时候被撤销。

B. 局部变量也叫自动变量。

C. 在方法外面定义的变量(译注:即实例变量)在对象被构造时创建。

D. 在方法中定义的方法的参变量只要该对象被需要就一直存在。

二、简答题(共7题,共40分)
1.请写出一个输出“Hello World!”的程序。

(3分)
答:public Class Hello World
{
Public static void main(String[]args)
{
System.out.println(“HELLO WOTLD”);
}
}
2.char型变量中能不能存贮一个中文汉字? 为什么? (3分)
3
答:能存储一个汉字;因为它能存储四个字节而每个汉字只占两个字节。

3.常见的两种xml解析技术是什么? 区别是什么? (4分)
答:常见的两种有:SAX和DOM。

区别:SAX 是一种事件驱动的xml解析方式。

每次访问一个xml文件中的某个节点的时候,sax就会搜索一遍xml文件,在找到相应的节点后就会触发一个事件来处理请求。

只读
DOM是一种基于树状的查找方式。

DOM会将xml解析成一棵树,存在内存中。

开发者可以通过查找树的节点来取得文件的内容或者修改内容。

可读写
4.MVC是什么,如何实现? (5分)
答:MVC是一个是一个设计模式,它强制性的使应用程序的输入,处理和输出分开。

使用MVC应用程序被分为三个核心部件:M----------MODO模型,V ----------VIEW 试图,C --------- Contral控制
实现:首先有页面(jsp)发送请求给控制器(servlet),然后由控制器接收用户的请求,并决定应该调用哪个模型(javabean)来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层显示给用户。

5..J2EE是什么?(6分)
答:J2EE 是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。

所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。

6.jsp有哪些内置对象?作用分别是什么? (9分)
答:1.request 用户端请求,此请求会包含来自GET/POST请求的参数;2.response 网页传回用户端的回应;3.pageContext 网页的属性是在这里管理;4.session 与请求有关的会话期;5.application servlet 正在执行的内容;6.out 用来传送回应的输出;7.config servlet的构架部件;8.page JSP网页本身;9.exception 针对错误网页,未捕捉的例外
7.作用域public,private,protected,以及不写时的区别?(10分)
答:作用域当前类同一package 子孙类其他package public √√√√
protected √√√×
friendly √√××
private √×××
不写时默认为friendly
编码及论述题(共2题,每题10分,共20分)
8.什么是Singleton,它的作用是什么,它有几种形式?请用代码写出一个Singleton类。

答:Java Singleton 模式用来保证在运行的应用程序中,一个Class只是实例化一次,
也就是只有一个相应的对象存在。

它有三种形式
public class Singleton
{
private static Singleton instance = null;
public static synchronized Singleton getInstance()
{
if (instance==null)
instance=new Singleton();
return instance;
}
}
9.在Struts + Spring + Hibernate的组合框架模式中,三者各自的特点都是什么?
答:Strtus WEB层Spring是业务层Hiebenate是持久化层
SSH试题
1.Hibernate工作原理及为什么要用?
原理:1.读取并解析配置文件2.读取并解析映射信息,创建SessionFactory 3.打开Session 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在查询数据的时候,数据并没有存
5
在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。

3.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)
类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many
4.Struts1流程:
1、客户端浏览器发出HTTP请求。

2、根据web.xml配置,该请求被ActionServlet接收。

3、根据struts-config.xml配置,ActionServlet先将请求中的参数填充到ActionForm中,然后ActionServlet再将请求发送到Action 进行处理。

4、是否验证,需要验证则调用ActionForm 的validate方法,验证失败则跳转到input,成功则继续。

5、Action从ActionForm获得数据,调用javabean 中的业务方法处理数据。

6、Action返回ActionForward对象,跳转到相应JSP 页面或Action。

7、返回HTTP响应到客户端浏览器。

MVC设计模式:modal:“模型”也称业务逻辑,是正真完成任务的代码,相当与JavaBeanview:视图,其实就是显示界面,相当于JSPcontroller:控制器,他控制模型和视图的交互过程,相当于servletstruts1是基于MVC设计模式hibernate是基于ORM对象关系映射
5.struts是什么?
struts1是基于JSP和servlet的一个开源的Web应用框架,使用的是MVC的设计模式struts2是基于webwork技术的框架,是sun和webwork公司联手开发的一个功能非常齐全的框架,struts2和struts1没有任何关系,是一个全新的框架
6.spring是什么?
spring是一个集成了许多第三方框架的大杂烩,其核心技术是IOC(控制反转,也称依赖注入)和AOP(面向切面编程)
7.hibernate是什么?
hibernate是基于ORM对象关系映射(完成对象数据到关系数据映射的机制)实现的,做数据持久化的工具
8.JSF是什么?
JavaServer Face是基于组件的web开发框架,跟sturts差不多的框架
9.数据库里面的索引和约束是什么?
索引是为了提高数据的检索速度,索引是建立在数据表上,根据一个或多个字段建立的约束是为了保持数据的完整性,约束有非空约束,主键约束,外键约束等等。

10.spring是什么
这个问题,往往可以通过我们为什么要使用spring这个问题来切入:AOP 让开发人员可以
创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。

使用AOP 后,公共服务(比如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。

IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。

正如单词倒置所表明的,IOC 就像反过来的JNDI。

没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),每一个对象都是用其协作对象构造的。

因此是由容器管理协作对象(collaborator)。

Spring即使一个AOP框架,也是一IOC容器。

Spring 最好的地方是它有助于您替换对象。

有了Spring,只要用JavaBean 属性和配置文件加入依赖性(协作对象)。

然后可以很容易地在需要时替换具有类似接口的协作对象。

11.用自己的话简要阐述struts2的执行流程。

Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action 和用户实现的企业业务逻辑组件。

核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。

业务控制器Action和业务逻辑组件是需要用户来自己实现的。

用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。

Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2是WebWork的升级版本。

基本简要流程如下:1、客户端浏览器发出HTTP请求。

2、根据web.xml 配置,该请求被FilterDispatcher接收。

3、根据struts.xml配置,找到需要调用的Action类和方法,并通过IoC方式,将值注入给Aciton。

4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。

5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。

6、返回HTTP响应到客户端浏览器。

12.谈谈你mvc的理解
MVC是Model—View—Controler的简称。

即模型—视图—控制器。

MVC是一种设计模式,它强制性的把应用程序的输入、处理和输出分开。

MVC中的模型、视图、控制器它们分别担负着不同的任务。

视图: 视图是用户看到并与之交互的界面。

视图向用户显示相关的数据,并接受用户的输入。

视图不进行任何业务逻辑处理。

模型: 模型表示业务数据和业务处理。

相当于JavaBean。

一个模型能为多个视图提供数据。

这提高了应用程序的重用性
控制器: 当用户单击Web页面中的提交按钮时,控制器接受请求并调用相应的模型去处理请求。

然后根据处理的结果调用相应的视图来显示处理的结果。

MVC的处理过程:首先控制器接受用户的请求,调用相应的模型来进行业务处理,并返回数据给控制器。

控制器调用相应的视图来显示处理的结果。

并通过视图呈现给用户。

7
Java笔试算法试题
1.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序
我的评论:
本题的splitStringByComma(String )方法纯属多余,可以用String的split方法一句话代替,且可读性也更强,下面的一段话源自JDK1.6API,StringTokenizer类已不再提倡使用,保留仅为旧代码。

StringTokenizer是出于兼容性的原因而被保留的遗留类(虽然在新代码中并不鼓励使用它)。

建议所有寻求此功能的人使用String的split方法或java.util.regex 包。

import java.util.*;
public class bycomma{
public static String[] splitStringByComma(String source){
if(source==null||source.trim().equals(""))
return null;
StringTokenizer commaToker = new StringTokenizer(source,",");
String[] result = new String[commaToker.countTokens()];
int i=0;
while(commaToker.hasMoreTokens()){
result[i] = commaToker.nextToken();
i++;
}
return result;
}
public static void main(String args[]){
String[] s = splitStringByComma("5,8,7,4,3,9,1");
int[] ii = new int[s.length];
for(int i = 0; i<ii.length;i++){
ii[i] =Integer.parseInt(s[i]);
}
Arrays.sort(ii);
//asc
for(int i=0;i<ii.length;i++ ){
System.out.println(ii[i]);
}
//desc
for(int i=(s.length-1);i>=0;i--){
System.out.println(ii[i]);
}
}
}
2.编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。

但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。

代码:
9
public static boolean isLetter(char c){
int k=0X80;
return c/k==0?true:false;
}
public static int lengths(String strSrc){
if (strSrc==null){
return 0;
}
int len=0;
char[] strChar=strSrc.toCharArray();
for (int i=0;i<strChar.length;i++){
len++;
if (!isLetter(strChar[i])) len++;
}
return len;
}
public static String subString(String origin,int len){ if (origin==null || origin.equals("")|| len<1){
return "";
}
if (len>lengths(origin)){
return origin;
}
byte[] strByte=new byte[len];
System.arraycopy(origin.getBytes(),0,strByte,0,len);
int count=0;
for (int i=0;i<len;i++){
int value=(int)strByte[i];
if (value<0) count++;
}
if (count % 2 !=0){
//len=(len==1)?++len:--len;
--len;
}
return new String(strByte,0,len);
}
public static void main(String[] args) {
System.out.println(""+ subString("我ABC汉DEF",6));
}
3、排序都有哪几种方法?请列举。

用JAVA实现一个快速排序。

排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)
快速排序的伪代码。

/ /使用快速排序方法对a[ 0 :n- 1 ]排序从a[ 0 :n- 1 ]中选择一个元素作为m I d d l e,该元素为支点把余下的元素分割为两段left 和r I g h t,使得l e f t中的元素都小于等于支点,而right 中的元素都大于等于支点递归地使用快速排序方法对left 进行排序递归地使用快速排
11
序方法对right 进行排序所得结果为l e f t + m I d d l e + r I g h t //以下为java程序实现的快速排序算法:
public static void sort(int[] data) {
quickSort(data,0,data.length-1);
}
public static void quickSort(int[] data,int low,int high){
int pivotIndex=(low+high)/2;
swap(data,pivotIndex,high);
int k=partition(data,low-1,high,data[high]);
swap(data,k,high);
if ((k-low)>1) partition(data,low,k-1);
if ((high-k)>1) partition(data,k+1,high);
}
public static int partition(int[] data int low,int high, int pivot ){ do {
while (data[++low]<pivot) ;
while (high!=0 && data[--high]>pivot);
swap(data,low,high);
}
while (low<high) ;
swap(data,low,high);
return low;
}
public static void swap(int[] data int low,int high){
int tmp=data[low];
data[low]=data[high];
data[high]=tmp;
}
public static void main(String[] args){
int[] data = new int[]{89,32,425,32,78,1,53,92};
sort(data);
}
4.试用递归的方法写一下计算菲波那契数列的通项f(n),已知f1=1,f2=1,以后每项都是前两项的和。

..............
public static long fibonacci(long m){
if (m==0 || m==1) return m;
else return fibonacci(m-1)+fibonacci(m-2);
}
5. 写一个Singleton出来。

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

我的评论:第一种形式是饿汉式单例类,第二种是懒汉式单例类;可以如此速记,饿汉式太饿了,所以迫不及待在内部new出一个实例,而懒汉式太懒了,所以知道应用时才检查有没有实例存在,如不存在才new一个实例出来。

一般Singleton模式通常有几种种形式:
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。

Public class Singleton {
private Singleton(){}
13
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
第二种形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance;
}
}
其他形式:
定义一个类,它的构造函数为private的,所有方法为static的。

一般认为第一种形式要更加安全些
6、创建一个静态方法,给它传入一个对象,请循环的打印出该对象所在类的类名和所实现的方法名(华为笔试最后一道编程)
import ng.reflect.*;
public class Test{
public static void test(Object obj){
Class clazz=obj.getClass();
//System.out.println("类名:"+clazz.getName());
Method[] ms=clazz.getDeclaredMethods();
long len=Array.getLength(ms);
for(int i=0;i<len;i++){
System.out.println("类名:"+clazz.getName()+"方法名:"+ms[i].getName());
}
}
class A{
public void b(){}
public void c(){}
public void d(){}
public void e(){}
}
public static void main(String[] args){
Test t=new Test();
Test.A a=t.new A();
test(a);
}
}
7、假设字符串类似这样的aba和aab就相等,现在随便给你二组字符串,请编程比较
15
他们看是否相等
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = null;
try {
s = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
StringTokenizer st = new StringTokenizer(s);
String s1 = st.nextToken();
String s2 = st.nextToken();
byte[] sa1 = s1.getBytes();
byte[] sb2 = s2.getBytes();
Arrays.sort(sa1);
Arrays.sort(sb2);
String ss1 = new String(sa1);
String ss2 = new String(sb2);
if(ss1.equals(ss2))
System.out.println("equal");
else
System.out.println("not equal");
8、给你一组字符串如:iu7i8hy4jnb2,让你编程输出里面的数字:7842
用正规表达式:"iu7i8hy4jnb2".replaceAll("[^\\d]","");
9、给你一组字符串让你把它倒叙输出
public static String flashBack(String origin) {
String result = "";
for (int i = origin.length(); i > 0; i--) {
String tmp = origin.substring(i - 1, i);
result += tmp;
}
return result;
}
10、给你一组字符如{1,3,4,7,2,1,1,5,2},让你输出里面出现次数最多且数值最大的一个,出现几次
public void fun4() {
int[] a = { 4, 1, 2, 4, 5, 1, 1, 1, 5, 1, 3, 4, 5 };
Arrays.sort(a);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println();
int maxNumber = a[a.length - 1], maxCount = 1;
int curNumber = a[a.length - 1], curCount = 1;
for (int i = a.length - 1; i > 0; i--) {
curNumber = a[i];
if (a[i] == a[i - 1]) {
curCount++;
} else {
17
System.out.println("i=" + i + ",curCount=" + curCount+ ",maxCount=" + maxCount + ",maxNumber=" + maxNumber);
if (curCount > maxCount) {
maxCount = curCount;
maxNumber = curNumber;
}
curCount = 1;
}
}
if (curCount > maxCount) {
maxCount = curCount;
//maxNumber = curNumber;
}
System.out.println("curCount=" + curCount + ",maxCount=" + maxCount + ",maxNumber=" + maxNumber);
}
11、求两个数的公约数,M,N
int divisor =1;
for (int i = 2; i <= b; i++) {
if(a%i==0 && b%i==0){
divisor = i;
}
}
System.out.println(a+"和"+b+"的最大公约数是:"+divisor);
}
12、实现数组复制
我的理解:这是深复制,数组a,b不再有关联public void fun8(){
int[] a = {1,2,3,4,56,7,8};
int[] b = (int[])a.clone();
Conica.print(a);
Conica.print(b);
b[0]=100;
Conica.print(a);
Conica.print(b);
}
13、冒泡排序的实现
public void fun9(){
int[] a = {1,5,2,6,8,74,1,25,69,8};
Conica.print(a);
for(int i=0; i<a.length-1; i++){
for(int j=0; j<a.length-i-1;j++){
if(a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
19
Conica.print(a);
}
14、编程显示某一文件目录下的文件名
public void fun10(){
File file = new File("G:\\03月份");
if(file.exists()){
if(file.isDirectory()){
String[] files = file.list();
Conica.println(files);
}
}
}
15、从键盘输入4个十进制数字字符,将其转换为4位时间之数并显示出来
16、编程实现统计文本文件中某个单词的出现频率,并输出统计结果
用HashMap来解决
假设单词不存在跨行的,每个单词用,. ;分割
public static void countNum() throws IOException {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("c://file.txt"));
Map map = new HashMap();
for (String s = br.readLine(); s != null; s = br.readLine()) {
StringTokenizer st = new StringTokenizer(s, ",. ;");
while (st.hasMoreTokens()) {
String temp = st.nextToken();
if (map.containsKey(temp)) {
map.put(temp, new Integer((Integer)map.get(temp) + 1));
} else {
map.put(temp, new Integer(1));
}
}
}
for (Iterator it = map.entrySet().iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next();
System.out.println(entry.getKey() + "-->" + entry.getValue()
+ "times");
}
} finally {
br.close();
}
}
Java面试题
1、作用域public,private,protected,以及不写时的区别
答:区别如下:
作用域当前类同一package 子孙类其他package public √√√√protected √√√×
21
friendly √√××
private √×××
不写时默认为friendly
4、&和&&的区别
答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)
5、Collection 和Collections的区别
答:Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作
6、什么时候用assert
答:assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。

在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。

一般来说,assertion用于保证程序最基本、关键的正确性。

assertion检查通常在开发和测试时开启。

为了提高性能,在软件发布后,assertion 检查通常是关闭的
7、String s = new String("xyz");创建了几个String Object
答:两个,一个字符对象,一个字符对象引用对象
9、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错
答:short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)short s1 = 1; s1 += 1;(可以正确编译)
11、数组有没有length()这个方法? String有没有length()这个方法
答:数组没有length()这个方法,有length的属性。

String有有length()这个方法
13、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别
答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。

equals()是判读两个Set是否相等
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分
离的对象的内容和类型相配的话,返回真值
15、error和exception有什么区别
答:error 表示恢复不是不可能但很困难的情况下的一种严重问题。

比如说内存溢出。

不可能指望程序能处理这样的情况
exception 表示一种设计或实现问题。

也就是说,它表示如果程序运行正常,从不会发生的情况
16、List, Set, Map是否继承自Collection接口
答:List,Set是,Map不是
19、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)
答:接口可以继承接口。

抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数
20、构造器Constructor是否可被override
答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading
22、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后
答:会执行,在return前执行
23、用最有效率的方法算出2乘以8等於几
答:2 << 3
25、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递
答:是值传递。

Java 编程语言只有值传递参数。

当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。

对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的
23
28、char型变量中能不能存贮一个中文汉字?为什么?
答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的
30、float型float f=3.4是否正确?
答:不正确。

精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4
34、谈谈final, finally, finalize的区别
答:final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。

因此一个类不能既被声明为abstract的,又被声明为final的。

将变量或方法声明为final,可以保证它们在使用中不被改变。

被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。

被声明为final的方法也同样只能使用,不能重载
finally—再异常处理时提供finally 块来执行任何清除操作。

如果抛出一个异常,那么相匹配的catch 子句就会执行,然后控制就会进入finally 块(如果有的话)
finalize—方法名。

Java 技术允许使用finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。

这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。

它是在Object 类中定义的,因此所有的类都继承了它。

子类覆盖finalize() 方法以整理系统资源或者执行其他清理工作。

finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的
35、面向对象的特征有哪些方面
答:主要有以下四方面:
1.抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。

抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。

抽象包括两个方面,一是过程抽象,二是数据抽象。

2.继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。

对象的一个新类可以从现有的类中派生,这个过程称为类继承。

新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。

派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

3.封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。

面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

4. 多态性:
多态性是指允许不同类的对象对同一消息作出响应。

多态性包括参数化多态性和包含多态性。

多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名
问题。

36、String是最基本的数据类型吗
答:基本数据类型包括byte、int、char、long、float、double、boolean和short。

ng.String类是final类型的,因此不可以继承这个类、不能修改这个类。

为了提高效率节省空间,我们应该用StringBuffer类
37、int 和Integer 有什么区别
答:Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。

Int是java的原始数据类型,Integer是java为int提供的封装类。

Java为每个原始类型提供了封装类。

原始类型封装类,booleanBoolean,charCharacter,byteByte,shortShort,intInteger,longLong,floatFloat,doubleDou ble
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。

引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。

对象引用实例变量的缺省值为null,而原始类型实例变量的缺省值与它们的类型有关
38、运行时异常与一般异常有何异同
答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。

java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

41、heap和stack有什么区别
答:栈是一种线形集合,其添加和删除元素的操作应在同一段完成。

栈按照后进先出的方式进行处理。

堆是栈的一个组成元素
43、Java中的异常处理机制的简单原理和应用
答:当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。

违反语义规则包括2种情况。

一种是JAVA类库内置的语义检查。

例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。

另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。

所有的异常都是ng.Thowable的子类。

25。

相关文档
最新文档