Java基础知识
2.说说你对java的了解?
j2ee企业级开发 j2se 标准开发 j2me 移动开发
java是面向对象的,它的特点是安全,简单,可移植,跨平台,它分为三种开发平台
j2ee 企业级开发 j2se 标准开发 j2me 移动开发。
58.J2EE是什么:
J2EE是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterprieseapplication model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。
1.java语言的特点?
安全,简单,可移植,跨平台
成员变量的默认值 String :null,boolean: false ,int :0;
68.编写java文件的注意事项:
在记事本中编写java文件,在保存时一定要把文件名和扩展名用双引号括起来,否则将默认保存为文本文件,如果要保存的java 文件名为Program1.java,则在保存时在文件名文本框中一定要输入”Program1.java”。
69.如何编译java程序:
单击开始|运行命令,在命令行上输入cmd,按回车键(在 window98中输入command,按回车键),即可打开一个命令窗口,将目录转换到编写java源程序所在的目录,输入javac filename.java
70.如何执行java程序:
同样在命令窗口中输入java filename,
51.垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收:
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。
40.编写java文件的注意事项:
在记事本中编写java文件,在保存时一定要把文件名和扩展名用双引号括起来,否则将默认保存为文本文件,如果要保存的java 文件名为Program1.java,则在保存时在文件名文本框中一定要输入”Program1.java”。
第二章 Java语言基本元素
1.说下&&和&的区别?
& && 共同处是都是做逻辑与运算,当其中一个为假的时候,都为假
&&有短路功能,如果第一个表达式值为假,则不运行第二个表达式
&运行完所有表达式,才返回结果
2.short s=10; s=s+1,有错吗? s+=1; 有错吗?为什么?
s=s+1,当short去做运算的时候,会自动转换为int,所以返回值是int,如果再为s赋值,需要强制类型转换;s+=1,+=符号是java语言规定的运算符,会自动类型转换,所有没问题
七:shorts1 = 1; s1 = s1 + 1;有什么错? short s1 = 1;s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型,这样子才可以正确的编译) short s1 = 1; s1 += 1;(可以正确编译)
3.char型变量中能不能存贮一个中文汉字?为什么?
能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的
4.“==”和equals方法有什么区别?
==操作符专门用来比较两个变量的值是否相等
==做对象比较的时候,判断的是两个对象地址是否相等
equals方法多用于比较字符串,判断对象的时候,比较的是两个对象的值是否相同
5.Math.round(11.5)等於多少?Math.round(-11.5)等於多少?
12 -11
八:Math.round(11.5)等於多少?Math.round(-11.5)等於多少? Math.round(11.5)==12 Math.round(-11.5)==-11 round方法返回与参数最接近的 长整数,参数加1/2后求其floor.
6.String是最基本的数据类型吗?
基本数据类型包括byte、int、char、long、float、double、boolean和short。
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类
7.int 和Integer 有什么区别
Java提供两种不同的类型:引用类型和原始类型(或基本数据类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。
基本数据类型 封装类
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double
二:int 和 Integer 有什么区别
byte char short int long float double boolean
Int ------Integer
Char ----------Character
Byte
Short
Long
Float
Double
Boolean
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。
原始类型封装类booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。
3.goto是不是java关键字或者java有没有goto?
goto const 是java保留关键字,现在不常用
71.基本数据类型:
Java的数据类型可以划分为4大类:整数,浮点数,字符型,布尔型。其中整数可以划分为:byte,short,int,long.浮点数可以划分为float,double.
程序的流程控制
1.while 和do..while的区别?
while是先判断条件,如果满足条件,则执行语句,如果不满足,什么都不执行
do..while是先执行一遍语句块,然后再去判断条件,如果满足条件,则执行语句,如果不满足,什么都不执行
2.break 和continue的区别?
break直接中断当前所在循环
continue是跳过本次循环,继续执行循环的下一个循环
3.switch语句里面的常量表达式可以是什么类型?可以用String类型吗?
可以是byte short int char
String可以,但是必须是jdk1.7版本之后才支持
4.在JAVA中,如何跳出当前的多重嵌套循环?
用break; return方法。
break 和continue的 return 区别:
break:跳出循环,不再执行剩余部分。
continue:停止当次循环,回到循环起始处,进入下一次循环操作。continue语句之后的语句将不在执行。
面向对象
一:面向对象的特征有哪些方面
Java语言的特性:一次编译,到处运行<跨平台>
1. 抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2. 继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
3. 封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
4. 多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
可以。必须只有一个类名与文件名相同。
2.什么是抽象?
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。
抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
3.面向对象的
三大特征?
封装,继承,多态
封装:把类的某些信息隐藏在类内部,不让外部程序直接访问,而是通过类提供的方法实现对类的访问和操作;
继承:一个类可以得到另外一个类的所有非私有的方法和变量,这称之为继承,定义方法的类叫父类,得到方法的类叫子类;
多态:事物的多种形态,集中体现为方法的重写和重载;
4.Overload(重载)和Override(重写)的区别。Overloaded(重载)的方法是否可以改变返回值的类型?
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)
50.java中实现多态的机制是什么:
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
五:Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型 +
5.abstract class和interface有什么区别?
1.抽象类可以有构造方法,接口不可以.
2.抽象类中可以有普通的成员变量,普通的非抽象方法.接口不可以.
3.抽象类中的抽象方法的访问类型可以说public,protected和默认类型,,但接口的抽象方法只能是public,默认即为public abstract类型.
4.抽象方法可以包含静态方法,但接口不可以.
5.抽象类和接口中都可以包含静态成员变量.抽象类中静态成员变量的访问类型可以任意.但接口只能是publicstatic final类型(默认)
六:abstract class和interface有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。接口(interface)是抽象类的变体
在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有方法的可执行体操作《没有初始化操作》。
6.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concreteclass)? 抽象类中是否可以有静态的main方法?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类是可继承具体类。抽象类中可以有静态的main方法。记住抽象类与普通类的唯一区别就是不能创建实例对象和允许有abstract方法
十:接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concreteclass)?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类可以继承实体类,但前提是实体类必须有明确的构造函数。
7.构造器Constructor是否可被override(重写)?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
如果一个类由父类,它去实例化对象的时候,先走的父类的构造函数
8.是否可以继承String类?
String类是final类故不可以继承。
十五:覆盖和重载-------重点内容
覆盖:覆盖一个方法并对其重写,以求达到不同的做用!覆盖要注意一下几点:
1) 覆盖的方法标识必须要和被覆盖的方法标志完全匹配!
2) 覆盖方法的返回值必须和被覆盖方法的返回值一致!
3) 覆盖方法所抛得异常必须和被覆盖方法所抛得异常一致或者是其子类!
4) 被覆盖的方法不能为private,否则其子类只是定义了一个方法,并没有对其覆盖!
5)
重写:定义一些名称相同的方法,通过传入参数的不同来区分这些方法,再调用 时,会根据不同的参数样式来选择合适的方法执行!、
重载要注意一下几点:
1)在使用重载时只能通过不同的参数样式,如:不同参数类型、不同参数个数、 不同参数顺序!
2)不能通过访问权限、返回类型、抛出异常来进行重载!
3)方法的异常类型和数目不会对重载构成影响!
4)对于继承来说,如果父类方法访问权限为private,那么就不能再子类对其重载,如果定义的话也只是定义一个新方法,而不会达到重载的效果
67.什么是封装:
只要有足够的方法,就没必要直接去操作对象属性,只要调用这些方法就可以实现要完成的任务,这种现象称为封装,它通过对象方法对其属性的操作把对象属性封装在一个对象内部,对象与外界打交道全部通过其自身的方法来实现,有效的把对象属性隐藏在对象内部。
66.属性与方法:
不同对象具有相同特点,就可能抽象为一定的类,那么这些特点基本上可以分为两类,一类是描述对象静态状态的,就是对象的属性,在程序设计中,可以称之为变量;另一类是描述对象的动作,就是对象的方法,在程序设计中我们称之为函数。属性和方法是一个对象所具备的两大基本要素,也是我们后面编程工作的核心。
65.什么是类与对象:
所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。
类是具备某些共同特征的实体的集合,它是一种抽象的概念,用程序设计的语言来说,类是一种抽象的数据类型,它是对所具有相同特征实体的抽象。
54.是否可以从一个static方法内部发出对非static方法的调用:
不可以,如果其中包含对象的method();不能保证对象初始化.
52.静态变量和实例变量的区别:
static i = 10; //静态变量为所有该类对象所共享,一改变会影响所有; class A a; a.i =10;//实例变量改变之影响这一个对象。
38.Java的接口和C++的虚类的相同和不同处:
由于Java不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是public static,所有方法默认情况下是public.一个类可以实现多个接口。
37.Static Nested Class 和Inner Class的不同:
Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。
集合
1.说出ArrayList,Vector,LinkedList的存储性能和特性
ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,
但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),
通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,
但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
ArrayList 和Vector 索引数据快而插入数据慢 ArrayList 线程不安全 Vector 线程安全的
LinkedList 索引数据慢,插入数据快
33.说出ArrayList,Vector,LinkedList的存储性能和特性:
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
三:说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引插入数据快,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
2.HashMap和Hashtable的区别。
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap线程不安全 它允许 key值可以为null
Hashtable线程安全的 它不允许 key值可以为null
四:HashMap和Hashtable的区别。 -------重点
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
Hashtable
3.List, Set, Map是否继承自Collection接口?
List,Set是,Map不是
4.数组有没有length()这个方法?String有没有length()这个方法?
数组没有length()这个方法,有length的属性。String有有length()这个方法。
5.你所知道的集合类都有哪些?主要方法?
最常用的集合类是 List和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。List 适用于按数值索引访问元素的情形。
Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值。
6.List、Map、Set三个接口,存取元素时,各有什么特点?
List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。
List存储一组有序的,不唯一的数据
可以用for循环 迭代 当它是泛型的时候,可以用forEach(forin)
Set 存储一组无序的,唯一的数据
迭代
Map 存储键值对形式的数据 键唯一,值可以不唯一
1.它是键值对形式 ,我们要获取键和值
2.但是获取值要根据键来取值 ,所以要先获取所有的键 获取所有的键,生成一个Set集合
3.然后把set集合迭代,然后在用get方法获取值
57.List、Map、Set三个接口,存取元素时,各有什么特点:
List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map保存key-value值,value可多值。
7.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()?它们有何区别?
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值.
8、List 和 Map 区别?
一个是存储单列数据的集合,另一个是存储键和值这样的双列数据的集合,List中存储的数据是有顺序,并且允许重复;Map中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的。
二十一:Collection 和 Collections的区别。
Collection是集合类的上级接口,继承他的接口主要有Set 和List.
31.介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构):
答:Collection FrameWork如下:
Collection 的架构图
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set –hashset-Linkedhashset
-Treeset
Map
treemap
├Hashtable
├HashMap –WeakHashMap
-Linkedhashmap
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)
Map提供key到value的映射。
String与内部类
1.String 和StringBuffer的区别
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。
这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。
当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用 StringBuffers来动态构造字符数据。
2.String s = "Hello";s = s + "world!";这两行代码执行后,原始的String对象中的内容到底变了没有?
没有。因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。在这段代码中,s原先指向一个String对象,内容是 "Hello",然后我们对s进行了+操作,那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为"Hello world!",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。
3.String s = new String("xyz");创建了几个StringObject? 二者之间有什么区别?
两个或一个,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。New String每写一遍,就创建一个新的对象,它一句那个常量”xyz”对象的内容来创建出一个新String对象。如果以前就用过’xyz’,这句代表就不会创建”xyz”自己了,直接从缓冲区拿
31.String是最基本的数据类型吗:
基本数据类型包括byte、int、char、long、float、double、boolean和short。
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类。
异常
1.error和exception有什么区别?
error:表示系统级别的错误,不希望用户去处理,程序代码无法解决的问题(内存溢出)
Exception:编写的程序出现问题,可以人为修复的
二十四:error和exception有什么区别?
error 表示恢复不是不可能,但很困难的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
2.try {}里有一个return语句,那么紧跟在这个try后的finally{}里的语句会不会被执行,什么时候被执行,在return前还是后?
会执行,在return前执行。
3.运行时异常与编译异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。
java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
十八:运行时异常与一般异常有何异同?
Exception 和 error
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
Io流
1.java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
字节流,字符流。字节流继承于InputStream OutputStream,字符流继承于InputStreamReader OutputStreamWriter。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。
40.java中流的分类?
按照流传输方向区分:输入流,输出流
按照流处理单位的不同:字节流,字符流
64.文件读写的基本类:
答:File Reader 类和FileWriter类分别继承自Reader类和Writer类。FileReader类用于读取文件,File Writer类用于将数据写入文件,这两各类在使用前,都必须要调用其构造方法创建相应的对象,然后调用相应的read()或 write()方法
62.java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类:
字节流,字符流。字节流继承于InputStream \OutputStream,字符流继承于InputStreamReader \OutputStreamWriter。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。
53.什么是java序列化,如何实现java序列化:
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implementsSerializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
线程
39.线程的基本概念、线程的基本状态以及状态之间的关系:
线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身。Java中的线程有四种状态分别是:运行、就绪、挂起、结束。
43.简述synchronized和java.util.concurrent.locks.Lock的异同:
主要相同点:Lock能完成synchronized所实现的所有功能主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。
40.多线程有几种实现方法?同步有几种实现方法?
多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
同步的实现方面有两种,分别是synchronized,wait与notify
41.启动一个线程是用run()还是start()? .
启动一个线程是调用start()方法,使线程就绪状态,以后可以被调度为运行状态,一个线程必须关联一些具体的执行代码,run()方法是该线程所关联的执行代码。
十二:请说出你所知道的线程同步的方法。
wait():使一个线程处于等待状态,并且释放所持有的对象的lock。sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。
二十三:sleep() 和 wait() 有什么区别?
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,
61.java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用:
有两种实现方法,分别是继承Thread类与实现Runnable接口用synchronized关键字修饰同步方法反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被“挂起”的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend(),而应在自己的Thread类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。
34.同步和异步有何异同,在什么情况下分别使用他们?举例说明。
如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。
常用的类
十六:java中的常用包
1) java.applet:包含一些用于创建Java小应用程序的类。------已经过时
2) java.awt:包含一些用于编写与平台无关的图形界面(GUI)应用程序的类。----已经过时
3) java.io:包含一些用作输入输出(I/O)处理的类。
4) java.lang:包含一些Java语言的基本类与核心类,如String、Math、Integer、System和Runtime,提供常用的功能,这个包中的所有类是被隐式导入的。
5) java.net:包含用于建立网络连接的类,与java.io同时使用完成与网络有关的读写。
6) java.util:包含一些实用工具类和数据结构类。
60.说出一些常用的类,包,接口,请各举5个常用的类:
常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer;
常用的包:java.lang java.awt java.io java.util java.sql;
常用的接口:Remote List Map Document NodeList
网络编程
72.63.Java 的通信编程,编程题(或问答),用JAVA SOCKET编程,读服务器几个字符,再写入本地显示:
答:Server端程序: package test; import java.net.*; import java.io.*; public classServer { private ServerSocket ss; private Socket socket;
private BufferedReader in;private PrintWriter out; public Server() { try { ss=new ServerSocket(10000);while(true) { socket = ss.accept();
String RemoteIP =socket.getInetAddress().getHostAddress(); String RemotePort =":"+socket.getLocalPort(); System.out.println("A client comein!IP:"+RemoteIP+RemotePort); in = new BufferedReader(newInputStreamReader(socket.getInputStream())); String line = in.readLine();System.out.println("Cleint send is :" + line); out = newPrintWriter(socket.getOutputStream(),true); out.println("Your MessageReceived!"); out.close(); in.close(); socket.close(); } }catch(IOException e) { out.println("wrong"); } } public static voidmain(String[] args) { new Server(); } }
Client端程序: package test; import java.io.*; import java.net.*; public classClient { Socket socket; BufferedReader in; PrintWriter out; public Client() {try { System.out.println("Try to Connect to 127.0.0.1:10000"); socket= new Socket("127.0.0.1",10000); System.out.println("The ServerConnected!"); System.out.println("Please enter some Character:");BufferedReader line = new BufferedReader(new InputStreamReader(System.in)); out= new PrintWriter(socket.getOutputStream(),true);
Out
73.59.UML方面:
标准建模语言UML。用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,合作图),实现图。
不知道
28.什么时候用assert:
断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 AssertionError。它用于调试目的:
assert(a > 0); // throws an AssertionError if a <= 0
断言可以有两种形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 应该总是产生一个布尔值。
Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。
断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记:
javac -source 1.4 Test.java
要在运行时启用断言,可使用 -enableassertions 或者 -ea 标记。
要在运行时选择禁用断言,可使用 -da 或者-disableassertions 标记。
要系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。
可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。
二十二:final,finally, finalize的区别。
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
Finalize----值的是java垃圾回收机制有关系的
垃圾回收机制------是有底层的JVM《java虚拟机》去调用GC(Object)--处理垃圾回收
二十五:heap和stack有什么区别。
栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。堆是栈的一个组成元素
栈---------------------------后进先出
堆----------------------------先进后出
74.Class.forName的作用?为什么要用:
答:调用该访问返回一个以字符串指定类名的类的对象。
75..写clone()方法时,通常都有一行代码,是什么:
Clone 有缺省行为,super.clone();他负责产生正确大小的空间,并逐位复制。
76.java中会存在内存泄漏吗,请简单描述:
会。如:int i,i2; return (i-i2); //when i为足够大的正数,i2为足够大的负数。结果会造成溢位,导致错误。
46.EJB的激活机制:
以Stateful SessionBean 为例:其Cache大小决定了内存中可以同时存在的Bean实例的数量,根据MRU或NRU算法,实例在激活和去激活状态之间迁移,激活机制是当客户端调用某个EJB实例业务方法时,如果对应EJB Object发现自己没有绑定对应的Bean实例则从其去激活Bean存储中(通过序列化机制存储实例)回复(激活)此实例。状态变迁前会调用对应的ejbActive和ejbPassivate方法。
47.EJB的几种类型:
会话(Session)Bean ,实体(Entity)Bean消息驱动的(Message Driven)Bean ;
会话Bean又可分为有状态(Stateful)和无状态(Stateless)两种;
实体Bean可分为Bean管理的持续性(BMP)和容器管理的持续性(CMP)两种
44.EJB的角色和三个对象:
一个完整的基于EJB的分布式计算结构由六个角色组成,这六个角色可以由不同的开发商提供,每个角色所作的工作必须遵循Sun公司提供的EJB规范,以保证彼此之间的兼容性。这六个角色分别是EJB组件开发者(Enterprise Bean Provider) 、应用组合者(Application Assembler)、部署者(Deployer)、EJB 服务器提供者(EJB Server Provider)、EJB 容器提供者(EJB Container Provider)、系统管理员(System Administrator)三个对象是Remote(Local)接口、Home(LocalHome)接口,Bean类
45.EJB容器提供的服务:
主要提供声明周期管理、代码产生、持续性管理、安全、事务管理、锁和并发行管理等服务。
46.EJB规范规定EJB中禁止的操作有哪些:
1. 不能操作线程和线程API(线程API指非线程对象的方法如notify,wait等),
2. 不能操作awt,
3. 不能实现服务器功能,
4. 不能对静态属生存取,
5. 不能使用IO操作直接存取文件系统,
6. 不能加载本地库.,
7. 不能将this作为变量和返回,
8. 不能循环调用。
36.EJB与JAVA BEAN的区别:
java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。
27.客服端调用EJB对象的几个基本步骤:
一、 设置JNDI服务工厂以及JNDI服务地址系统属性。
二、 查找Home接口。
三、 从Home接口调用Create方法创建Remote接口。
四、 通过Remote接口调用其业务方法。
26.remote接口和home接口主要作用:
remote接口定义了业务方法,用于EJB客户端调用业务方法
home接口是EJB工厂用于创建和移除查找EJB实例。