一面向对象
1 作用域 public,private,protected,以及不写时的区别
答:作用域当前类同一package 子孙类其他package
Public 有效有效有效有效
Private 有效无权限无权限无权限
Friendly 有权有权无权限无权限
不写时默认为friendly
2 面向对象的特征有哪些方面
答:主要有以下四方面:
1.抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2.继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要 3.封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
4. 多态性:
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
3 Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型
4 abstract class和interface有什么区别
答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况,一种不可以被实例化的类。抽象类中一般含有抽象方法,当然也可有具体实现。继承类只有实现过所有抽象类的抽象方法后才能被实例化。不能有抽象构造函数或抽象静态方法接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。一个接口定义一个协定。实现接口的类或结构必须遵守其协定。接口可以从多个基接口继承,而类或结构可以实现多个接口。接口可以包含方法、属性、事件和索引器。接口本身不提供它所定义的成员的实现。接口只指定实现该接口的类或接口必
须提供的成员。
抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化。
但接口是一个行为的规范,里面的所有东西都是抽象的!
abstract的method是不可同时是static、native、synchronized的
5值类型和引用类型的区别?
答:基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。与引用类型不同,从值类型不可能派生出新的类型。与引用类型不同,值类型不可能包含 null 值。然而,可空类型功能允许将 null 赋给值类型。每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。
值类型主要由两类组成:结构、枚举结构分为以下几类:Numeric(数值)类型、整型、浮点型、decimal、bool、用户定义的结构。
引用类型的变量又称为对象,可存储对实际数据的引用。声明引用类型的关键字:class、inte***ce、delegate、内置引用类型: object、string
6 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递
答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的
7关键字static的作用是什么?(请至少说明两种)
答:【
1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
】C语言中的意义
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。static对象可以在它的任何对象创建之前访问,无需引用任何对象。
(1)static变量
按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。
两者的区别是:
对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。
所以一般在需要实现以下两个功能时使用静态变量:
在对象之间共享值时
方便访问变量时
(2)静态方法
静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this 和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。
(3)static和final一块用表示什么
static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!对于变量,表一旦给值就不可修改,并且通过类名可以访问。对于方法,表示不可覆盖,并且可以通过类名直接访问。你可以将方法和变量都声明static 成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static。
8、内部类的实现方式?
答:示例代码如下:
package test;
public class OuterClass
{
private class InterClass
{
public InterClass()
{
System.out.println("InterClass Create");
}
}
public OuterClass()
{
InterClass ic = new InterClass();
System.out.println("OuterClass Create");
}
public static void main(String[] args)
{
OuterClass oc = new OuterClass();
}
}
输出结果:
C:\>java test/OuterClass
InterClass Create
OuterClass Create
再一个例题:
public class OuterClass {
private double d1 = 1.0;
//insert code here
}
You need to insert an inner class declaration at line 3. Which two inner class declarations are
valid?(Choose two.)
A. class InnerOne{
public static double methoda() {return d1;}
}
B. public class InnerOne{
static double methoda() {return d1;}
}
C. private class InnerOne{
double methoda() {return d1;}
}
D. static class InnerOne{
protected double methoda() {return d1;}
}
E. abstract class InnerOne{
public abstract double methoda();
}
说明如下:
一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员。故 A、B 错
二.静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;return d1 出错。
故 D 错
三.非静态内部类的非静态成员可以访问外部类的非静态变量。故 C 正确
四.答案为C、E
9 java优缺点
先说优点吧,比较显见一点
1.指针.
任何一个学过C或者C++的人都知道指针的操作对于他们是很重要的,为什么,指针能够支持内存的直接操作,这样的直接操作能够带来的是效率上的提高.但是任何一个东西都是有副作用的,指针给程序员带了的混乱也是无可比拟的.对于一个不是很强劲的C程序员而言,指针是要命的(对我而言也是,我几乎不会写C代码).而JAVA就为我们省去了这样的麻烦,或者说JAVA完整的限制了对内存的直接操作,让程序员能够安心去搞业务逻辑,而不用管自己后院的那堆内存有没有人来收拾.
2.垃圾回收
其实垃圾回收也是JAVA对于内存操作的限制之一,也大大解放了程序员的手脚.但是也正是这样的一个内存保姆的存在导致JAVA程序员在内存上几乎没有概念...一个纯粹的JAVA 程序员对于内存泄露这样的问题是从来没有概念的,因为他从来不用担心,因为大多数情况下即便他大手大脚也不会有什么问题
3.平台无关性
平台无关性的真正意义在于程序的可移植性高,能够在多个平台平滑迁移。这点就特别适合网络应用。
好吧,然后我们再来看看缺点吧:
1效率
1.1当然首先就是内存操作限制带来安全的同时带来的副面效果了.....
1.2 其次呢,就是面对对象的一个很重要的特点所带来的——多态导致的。
1.3平台无关性带来的。由于需要平台无关,所以JAVA是不能直接调用OS的API的,JAVA 需要调用自己的API来隐式地调用OS的API,大家可想而知这样的效果。多一层调用,必然多一层代码需要加载到栈内了。
2逆向编译问题
由于JAVA程序是动态连接的,从一个类到另外一个类的引用是符号化的。在静态连接的可执行程序中,类之间的只是直接的指针或者偏移量,。相反地,在JAVA class文件中,指向另一个类的引用通过字符串清楚地标明了所指向的类的名字。如果引用指向一个字段的话,这个字段的名字和描述符会被详细说明。如果引用指向一个成员变量,这个成员变量的名字和描述符(方法的返回类型,方法参数的数量和类型)也会被详细说明。
3 线程调度问题
Java虽然是一个总进程下的多线程,但是线程间的调度没有非常的清晰,由于为了能够支持多种系统的不同的线程支持策略,JAVA只能采取这样笼统而又松散的线程规范。
二Java类库之集合类
1 List, Set, Map是否继承自Collection接口?
答: List,Set是,Map不是。
1、List接口
List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java 的数组。和Set不同,List允许有相同的元素。除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口ListIterator 多了一些add()之类的方法,允许添加,删除,设定元素还能向前或向后遍历
实现List接口的常用类有LinkedList,ArrayList,Vector和Stack,如下:
(1)ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。(2)LinkedList允许null元素,提供额外的get,remove,insert方法在LinkedList 的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。
(3)Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator 被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常
(4)Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector 得以被当作堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。
2、Set接口
Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。
很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。请注意:必须小心操作可变对象(Mutable Object)。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。
3、Map接口
请注意,Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
实现Map接口的常用类Hashtable、HashMap有如下:
Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。添加数据使用put(key, value),取出数据使用get(key),这两个基本操作的时间开销为常数,Hashtable是同步的。
HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。,但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap的容量成比例。因此,如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设得过高,或者load factor过低。
2介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构)?
collection FrameWork如下:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│└Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)
Map提供key到value的映射
如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。
如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法。
尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList 换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。
同步性
Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList 则是异步的,因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。
数据增长
从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的
50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。
使用模式
在ArrayList和Vector中,从一个指定的位置(通过索引)查找数据或是在集合的末尾增加、移除一个元素所花费的时间是一样的,这个时间我们用O(1)表示。但是,如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i),其中n代表集合中元素的个数,i代表元素增加或移除元素的索引位置。为什么会这样呢?以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行位移的操作。这一切意味着什么呢这意味着,你只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector 或ArrayList都可以。如果是其他操作,你最好选择其他的集合操作类。比如,LinkList 集合类在增加或移除集合中任何位置的元素所花费的时间都是一样的?O(1),但它在索引一个元素的使用缺比较慢-O(i),其中i是索引的位置.使用ArrayList也很容易,因为你可以简单的使用索引来代替创建iterator对象的操作。LinkList也会为每个插入的元素创建对象,所有你要明白它也会带来额外的开销。
最后,在《Practical Java》一书中Peter Haggar建议使用一个简单的数组(Array)来代替Vector或ArrayList。尤其是对于执行效率要求高的程序更应如此。因为使用数组(Array)避免了同步、额外的方法调用和不必要的重新分配空间的操作。
3 ArrayList和Vector的区别,HashMap和Hashtable的区别
答:(1)就ArrayList与Vector主要从二方面来说.
一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
(2)就HashMap与HashTable主要从三方面来说。
一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map 接口的一个实现
二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
三.值:只有HashMap可以让你将空值作为一个表的条目的key或value
4 Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别
答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
(1)对字符变量来说:
“==”比较两个变量本身的值,即两个对象在内存中的首地址。
“equals()”比较字符串中所包含的内容是否相同
(StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类,而Object类中的equals方法是用来比较“地址”的;
String类中定义重新定义了equals这个方法,比较的是“值”不是“地址”。)
(2)对非字符变量来说:
"=="和"equals"方法的作用是相同的,都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。
5 说出ArrayList,Vector, LinkedList的存储性能和特性
答:ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的
数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
6 AWT和Swing的区别?
一般swing组件是从awt组件扩展的,swing是轻量组件而awt是重量组件, AWT是比较依赖操作系统组件,功能少,Swing不依赖,组件多,功能多窗口风格更多样化 Swing是由纯JAVA CODE所写的,解决了JAVA因窗口类而无法跨平台的问题,使窗口功能也具有跨平台与延展性的特性,而且SWING不需占有太多系统资源,并且一些组件也采用一些更开放式的开发方式,支持更多的扩展。
三Java数据类型
1 STRING与STRINGBUFFER的区别
答:在java中有3个类来负责字符的操作。
1.Character 是进行单个字符操作的,
2.String 对一串字符进行操作。不可变类。
3.StringBuffer 也是对一串字符进行操作,但是可变类。
String:是对象不是原始类型.为不可变对象,一旦被创建,就不能修改它的值.对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承.
StringBuffer:
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立,
StringBuffer sb = new StringBuffer();
note:不能通过付值符号对他进行付值.
sb = "welcome to here!";//error
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer 中付值的时候可以通过它的append方法.
sb.append("hello");
字符串连接操作中StringBuffer的效率要比String高:
String str = new String("welcome to ");
str += "here";的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后再将StringBuffer toSting();
这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.
2 String s = new String("xyz");创建了几个String Object
答:两个,第一个对象是字符串常量 "xyz ",第二个对象是new String( "xyz ")的时候产生的,在heap中分配内存给这个对象,只不过这个对象的内容是指向字符串常量 "xyz 3 char型变量中能不能存贮一个中文汉字?为什么?
答:能,java中的字符就是指char类型的变量,无论中文还是英文,都是占2个字节,因为都是用Unicode编码,一个Unicode编码就是16位,也就是2个字节。所以放一个中文
是没问题的
四异常
1 谈谈final, finally, finalize的区别
答:final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载
finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)
finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的
2 error和exception有什么区别
答:Error(错误)表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件问题,比如,内存资源不足等,对于这种错误,程序基本无能为力,除了退出运行外别无选择。
Exception(违例)表示需要捕捉或者需要程序进行处理的异常,它处理的是因为程序设计的瑕疵而引起的问题或者在外的输入等引起的一般性问题,是程序必须处理的。
3 运行时异常与一般异常有何异同
Java提供了两类主要的异常:runtime exception和checked exception。checked 异常也就是我们经常遇到的IO异常,以及SQL异常都是这种异常。对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。但是另外一种异常:runtime exception,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机接管。比如:我们从来没有人去处理过NullPointerException异常,它就是运行时异常,并且这种异常还是最常见的异常之一。出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由Thread.run()抛出,如果是单线程就被main()抛出。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,那么这整个程序也就退出了。运行时异常是Exception的子类,也有一般异常的特点,是可以被Catch块处理的。只不过往往我们不对他处理罢了。也就是说,你如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。
4 JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
答:Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。
用try来指定一块预防所有"异常"的程序。紧跟在try程序后面,应包含一个catch子句来
指定你想要捕捉的"异常"的类型。
throw语句用来明确地抛出一个"异常"。
throws用来标明一个成员函数可能抛出的各种"异常"。
Finally为确保一段代码不管发生什么"异常"都被执行一段代码。
可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保
护其他代码。每当遇到一个try语句,"异常"的框架就放到堆栈上面,直到所有的try语句
都完成。如果下一级的try语句没有对某种"异常"进行处理,堆栈就会展开,直到遇到有处
理这种"异常"的try语句。
5 最常见的runtime exception运行时异常?
答:数字转换异常,类异常ClassCastException NumberFormatException ArrayIndexOutOfBoundsException:数组越界 ClassCastException:类型转换错误ArithmeticException:算术错误,典型的就是0作为除数的时候。IllegalArgumentException:非法参数IndexOutOfBoundsException NullPointerException
SystemException ArrayStoreException
五垃圾回收
1 GC是什么? 为什么要有GC
答:GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地
方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可
以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已
分配内存的显示操作方法。
2 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通
知虚拟机进行垃圾回收
答:对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情
况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪
些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责
任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java
语言规范并不保证GC一定会执行。
六输入输出流
1 java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们
分别是哪些类?
答:字节流,字符流。字节流继承于InputStream OutputStream,字符流继承于InputStreamReader OutputStreamWriter。在java.io包中还有许多其他的流,主要是为了
提高性能和使用方便。
2 概述反射和序列化
答:Reflection 是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序
在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其
modifiers(诸如public, static 等等)、superclass(例如Object)、实现之interfaces
(例如Cloneable),也包括fields和methods的所有信息,并可于运行时改变fields内
容或唤起methods。本文借由实例,大面积示范Reflection APIs。
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以
对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个 ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流
七多线程
1 多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
同步的实现方面有两种,分别是synchronized,wait与notify
2 sleep() 和 wait() 有什么区别?
答:sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
3 同步和异步有何异同,在什么情况下分别使用他们?举例说明。
答:如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。
4 请说出你所知道的线程同步的方法。
答:wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。
Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。
5启动一个线程是用run()还是start()?
答:启动线程肯定要用start()方法。当用start()开始一个线程后,线程就进入就绪状态,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。当cpu分配给它时间时,才开始执行run()方法(如果有的话)。START()是方法,它调用RUN()方法.而RUN()方法是你必须重写的. run()方法中包含的是线程的主体。而如果直接用Run方法,这只是调用一个方法而已,程序中依然只有主线程--这一个线程,其程序执行路径还是只有一条,这样就没有达到写线程的目的。
6 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
.答 1其他方法前是否加了synchronized关键字,如果没加,则能。
2.如果这个方法内部调用了wait,则可以进入其他synchronized方法。
3.如果其他个方法都加了synchronized关键字,并且内部没有调用wait,则不能。
4.如果其他方法是static,它用的同步锁是当前类的字节码,与非静态的方法不能同步,因为非静态的方法用的是this。
7 进程和线程的区别:
答;线程是一种操作系统对象,代表着一个进程中要被执行的代码的路径。每一个WIN32应用程序至少有一个线程--通常称为住线程或默认线程--但应用程序可以自由地创建其他线程来执行其他任务!
进程是程序的一次动态执行过程,它对应了从代码加载、执行到执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到消亡的过程线程是比进程更小的执行单位。一个进程在其执行过程能够中,可以产生多个线程,形成多条执行线索。每条线索,即每个线程也有它自身的产生、存在和消亡过程,也是一个动态的概念
八代码与编程
1 写一个Singleton出来
答:程序中经常有这样的要求,整个程序运行时只有一个实例被使用。比如:数据库连接池,系统参数配置,Java API 中的 Runtime, Calendar ... 如何实现这种需求成为一个值得讨论的问题。Java Singleton 模式用来保证在运行的应用程序中,一个Class只是实例化一次,也就是只有一个相应的对象存在。在 web 程序中我们会用一个核心的分配功能的Servlet程序,在这里我们就可以运用这种设计模式了。
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是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; }
}
2 Java 的通信编程,编程题(或问答),用JAVA SOCKET编程,读服务器几个字符,再写入本地显示?
答:亲自调试!
服务器端:
import https://www.wendangku.net/doc/7215924099.html,.*;
import java.io.*;
public class Server {
public static final int SERVER_PORT = 8888;
public void startServer() {
try {
ServerSocket ss = new ServerSocket(SERVER_PORT);
//时刻监听客户端的连接
while(true) {
//接手客户端的连接
Socket s = ss.accept();
//得到接收的这个Socket的输入流,并封装成一个BufferedReader(),封
装采取内部匿名类
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
//将从客户端接收到的数据在发送回客户端
PrintWriter pw = new PrintWriter(s.getOutputStream(), true); pw.println("我是服务器,你发给我的是:"+br.readLine());
//关闭相应的资源
pw.close();
System.err.println(br.readLine());
}
} catch (IOException e) {
}
}
public static void main(String[] args) {
new Server().startServer();
}
}
客户端:
import https://www.wendangku.net/doc/7215924099.html,.*;
import java.util.Scanner;
import java.io.*;
public class Client {
public void connServer() {
try {
//建立与服务器端的链接
Socket s = new Socket("localhost",Server.SERVER_PORT);
//建立个扫描,扫描输入
Scanner sc = new Scanner(System.in);
//得到Socket的输入流封装成一个PrintWriter,封装采取内部匿名类 PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
//把用户输入的字符写出去
pw.println(sc.nextLine());
//得到服务器端的输入流并封装成BufferedReader对象
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println(br.readLine() );
} catch (UnknownHostException e) {
} catch (IOException e) {
}
}
public static void main(String[] args) {
new Client().connServer();
}
}
还有一个更好的,包括GUI、线程、嵌套类。
服务器端:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import https://www.wendangku.net/doc/7215924099.html,.*;
import javax.swing.*;
public class ServerFrameSample extends JFrame {
BorderLayout borderLayout =new BorderLayout();
JTextArea jTextArea=new JTextArea("Hello Everyone");
JScrollPane jScrollPane=new JScrollPane(jTextArea);
JToolBar jToolBar=new JToolBar();
JLabel jLable=new JLabel("端口号");
JTextField jTextField =new JTextField("输入端口号");
String txt=null;
int port =8080;
public ServerFrameSample(){
try{
ServerInit();
}catch(Exception exception){
exception.printStackTrace();
}
}
private void ServerInit() throws Exception{
getContentPane().setLayout(borderLayout);
jTextField.addKeyListener(new KeyAdapter(){
public void keyTyped(KeyEvent e){
jTextField_keyTyped(e);
}
});
jToolBar.add(jLable);
jToolBar.add(jTextField);
getContentPane().add(jToolBar,borderLayout.NORTH);
getContentPane().add(jScrollPane,borderLayout.CENTER);
}
public void jTextField_keyTyped(KeyEvent e) {
if(e.getKeyChar()==KeyEvent.VK_ENTER){
try{
txt=jTextField.getText();
port=Integer.parseInt(txt);
txt=jTextArea.getText();
ServerSocketSample sss=new ServerSocketSample(port,txt);
sss.service();
}catch(NumberFormatException nfe){
nfe.printStackTrace();
}
}
}
public static void main(String[] args) {
ServerFrameSample sfs=new ServerFrameSample();
sfs.setTitle("服务器端Socket通信");
sfs.setSize(600,400);
sfs.setVisible(true);
sfs.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class ServerSocketSample{
private int backlog=16;
private ServerSocket serverSocket=null;
String txt=null;
public ServerSocketSample(int port, String txt) {
this.txt=txt;
try{
serverSocket=new ServerSocket( port,backlog);
}catch(IOException e){
e.printStackTrace();
}
}
public void service() {
Socket socket=null;
try {
socket=serverSocket.accept();
Thread transfersDataThread=new Thread(new DataHandler(socket,txt));
transfersDataThread.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class DataHandler implements Runnable{
private Socket socket;
String txt=null;
private OutputStream out =null;
private int length=0;
byte[] data;
public DataHandler(Socket socket, String txt) {
this.socket=socket;
this.txt=txt;
this.length=this.txt.length();
this.data=new byte[this.length];
for (int i=0;i data[i]=(byte)this.txt.charAt(i); } } public void run() { try { out=socket.getOutputStream(); out.write(this.length); out.write(data); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ if(socket!=null){ try { socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } 客户端: import java.awt.*; import java.awt.event.*; import java.io.*; import https://www.wendangku.net/doc/7215924099.html,.*; import javax.swing.*; import java.applet.*; public class ClientRecieveSample extends JApplet{ private String host="localhost"; private int port =8080; private Socket socket=null; private InputStream in=null; private int length=0; private byte[] data; String txt=null; public void init(){ try { ClientInit(); }catch (Exception e) { e.printStackTrace(); } } private void ClientInit() throws Exception{ this.setSize(400, 300); socket =new Socket(host,port); } public void start(){ try { in=socket.getInputStream(); length=in.read(); data=new byte[length]; length=in.read(data); this.txt=new String(data); repaint(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(socket!=null){ try { socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } public void paint(Graphics g) { g.drawString(this.txt,50,50); } }运行结果: 3 用JAVA实现一种排序,JAVA类实现序列化的方法(二种)?如在COLLECTION框架中,实现比较要实现什么样的接口? 答:用插入法进行排序代码如下 Java类库中的数据结构考题。 import java.util.*; class InsertSort { //定义一个数组ArrayList对象,注意是对象!!! ArrayList al=null; //构造函数 public InsertSort(int num,int mod) { //初始化实例对象 al = new ArrayList(num); //初始化随机数对象 Random rand = new Random(); System.out.println("The ArrayList Sort Before:"); for (int i=0;i //匿名内嵌类,绝对值取余数+1化整 al.add(new Integer(Math.abs(rand.nextInt()) % mod + 1)); //这里就是字符串和变量的连接问题,不要把他当成数组元素看,不是a[+i+]!! System.out.println("al["+i+"]="+al.get(i)); } } //排序函数 public void SortIt(){ //Integer是java为int提供的封装类 Integer tempInt; int MaxSize=1; for(int i=1;i tempInt = (Integer)al.remove(i); if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue()) { al.add(MaxSize,tempInt); MaxSize++; System.out.println(al.toString()); } else { for (int j=0;j if (((Integer)al.get(j)).intValue()>=tempInt.intValue()) { al.add(j,tempInt); MaxSize++; System.out.println(al.toString()); break; } } } } System.out.println("The ArrayList Sort After:"); for(int i=0;i System.out.println("al["+i+"]="+al.get(i)); } } public static void main(String[] args) { InsertSort is = new InsertSort(10,100); is.SortIt(); } } 运行结果,看完之后有助理解插叙算法: The ArrayList Sort Before: al[0]=96 al[1]=14 al[2]=13 al[3]=9 al[4]=57 al[5]=62 al[6]=82 al[7]=100 al[8]=43 al[9]=98 [14, 96, 13, 9, 57, 62, 82, 100, 43, 98] [13, 14, 96, 9, 57, 62, 82, 100, 43, 98] [9, 13, 14, 96, 57, 62, 82, 100, 43, 98] [9, 13, 14, 57, 96, 62, 82, 100, 43, 98] [9, 13, 14, 57, 62, 96, 82, 100, 43, 98] [9, 13, 14, 57, 62, 82, 96, 100, 43, 98] [9, 13, 14, 57, 62, 82, 96, 100, 43, 98] [9, 13, 14, 43, 57, 62, 82, 96, 100, 98] [9, 13, 14, 43, 57, 62, 82, 96, 98, 100] The ArrayList Sort After: al[0]=9 al[1]=13 al[2]=14 al[3]=43 al[4]=57 al[5]=62 al[6]=82 al[7]=96 al[8]=98 al[9]=100 Serialization(序列化)是一种将对象以一连串的字节描述的过程,通常采用implements java.io.Serializable 的方式就可以了,这种方式简单,没有要实现的任何方法,还可以实现Externalizable 接口,Externalizable是一个有实际方法需要实现的interface,包括writeExternal 和readExternal,,是Serializable接口的子接口。 Collection框架中实现比较要实现Comparable 接口和Comparator 接口。 4 编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC 汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。 答:代码如下: public class TextC { 一:选择题 1. 关于以下程序代码的说明正确的是( D ) 1.class HasStatic{ 2. private static int x=100; 3. public static void main(String args[ ]){ 4. HasStatic hs1=new HasStatic( ); 5. hs1.x++; 6. HasStatic hs2=new HasStatic( ); 7. hs2.x++; 8. hs1=new HasStatic( ); 9. hs1.x++; 10. HasStatic.x- -; 11. System.out.println(“x=”+x); 12. } 13. } A、 5行不能通过编译,因为引用了私有静态变量 B、 10行不能通过编译,因为x是私有静态变量 C、程序通过编译,输出结果为:x=103 D、程序通过编译,输出结果为:x=102 2. 下列关于for循环和while循环的说法中哪个是正确的?( B ) A.while循环能实现的操作,for循环也都能实现 B.while循环判断条件一般是程序结果,for循环判断条件一般是非程序结果C.两种循环任何时候都可替换 D.两种循环结构中都必须有循环体,循环体不能为空 3. 以下选项中循环结构合法的是( C ) A、while (int i<7) { i++; System.out.println(“i is “+i); } B、 int j=3; while(j) { System.out.println(“ j is “+j); } C、int j=0; for(int k=0; j + k !=10; j++,k++) { System.out.println(“ j is “+ j + “k is”+ k); } D、 int j=0; do{ System.out.println( “j is “+j++); if (j = = 3) {continue loop;} }while (j<10); 4. 给出下面代码段, 哪行将引起一个编译时错误?( D ) Java工程师笔试题 一、填空题(本大题10小题,每空1分,共20分)。 1.Java语言的三大特性即是: 继承、封装、多态。 2.在Java中,char 型采用____unicode_______编码方案,这样,无论是中文字符还是英文字符,都是占用__2___个字节的内存空间。 3. 形式参数指的是方法被__定义____ 时的参数行,实际参数是方法被__调用__ _ 时所传递进去的变量或值。 4.JSP内置对象中,application对象是代表应用程序上下文,它允许JSP页面与包括在同一应用程序中的任何Web组件共享信息,而session 对象则是每个客户专用的。 5.如果想把一个对象写入一个流,那么这个类就必须实现Seralizable 接口。 6.程序中实现多线程的方法有两种:继承Thread类和实现___Runable _ 接口。 7.多线程中,可以通过调用相应的setPriority() 方法来修改一个线程的相对优先级。 8.面向对象编程的五大设计原则,分别是单一职责、开放封闭、 里氏替换、依赖倒置、接口分离 9.通过Ajax,客户端获取的数据主要有两种类型:文本型和xml 10.Socket通常也称为套接字,用于描述__ ip 和_ _接口 二、选择题(本大题20 小题,每小题2分.共40分)。 1.在JA V A中,如果父类中某些方法不包含任何逻辑,并且需要由子类重写.应该使用( )关键字来声明父类的这些方法: A) final B) static C) abstract D) void 2.在JA V A中,已定义两个接口B和C,要定义一个实现这两个接口的类,以下语句正确的是()。 A) interface A extend B,C B) interface A implements B,C C) class A implements B,C D) class A implements B, implements C 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 5、String是最基本的数据类型吗 基本数据类型包括byte、int、char、long、float、double、boolean和short。 类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 6、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 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为null,而原始类型实例变量的缺省值与它们的类型有关。 7、String 和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String 类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。 8、运行时异常与一般异常有何异同 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 9、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求 Java开发工程师笔试试题 (请不要在试题上留任何痕迹,所有答案均写在答题纸上) 一.编程题(共26分) 1.任意写出一种排序算法。(6分) public void sort(int [] array){ //代码区 } 2.求1+2+3+..n(不能使用乘除法、for 、while 、if 、else 、switch 、case 等关 键字以及条件判断语句)(8分) public int sum(int n){ //代码区 return 0; } 3.完成下面方法,输入一个整数,输出如下指定样式图案。(12分) 输入:3, 输出: 1*2*3 7*8*9 4*5*6 输入:4 输出: 1*2*3*4 9*10*11*12 13*14*15*16 5*6*7*8 public void drawNumPic(int n){ //代码区 } 二.选择题(定项选择每题3分,不定项选择每题4分,共63分) 1.在基本JAVA类型中,如果不明确指定,整数型的默认是__类型,带小数的默认是__类型?( B ) A.int float B.int double C.long float D.long double 2.只有实现了__接口的类,其对象才能序列化( A ) A.Serializable B.Cloneable https://www.wendangku.net/doc/7215924099.html,parable D.Writeable 3.代码System. out. println(10 % 3 * 2);将打印出?( B ) A.1 B.2 C.4 D.6 4.以下程序运行的结果为( A ) public class Example extends Thread{ @Override public void run(){ try{ Thread.sleep(1000); }catch (InterruptedException e){ e.printStackTrace(); } System.out.print("run"); } public static void main(String[] args){ Example example=new Example(); example.run(); System.out.print("main"); } } Java软件开发工程师笔试题(答案) Java工程师笔试题 1,填空(此大题10项,每空1分,共20分) 1。Java语言的三个特性是继承性、封装性和多态性2.在Java中,char 使用_ _ _ _ Unicode _ _ _ _ _ _编码方案,因此中文字符和英文字符都占用__2__字节的内存空间 3。当方法由_ _定义时,形参指的是参数行,当方法由_ _调用时,实际参数是传入的变量或值。 4。JSP内置对象,应用程序对象代表应用程序上下文,它允许JSP 页面与包含在同一应用程序中的任何网络组件共享信息,而会话对象是特定于每个客户的 5。如果你想把一个对象写到一个流中,这个类必须实现Seralizable 接口 6。在程序中实现多线程有两种方法:继承线程类和实现_ _ Runable _ interface 7。在多线程中,线程的相对优先级可以通过调用相应的setPriority()方法来修改 8。面向对象编程的五个设计原则是单一责任、开放和封闭、里氏尺度替换、依赖倒置、接口分离。通过Ajax,客户端获取的数据主要有两种类型:文本类型和xml 10。Socket通常也叫socket,用来描述__ ip和_ _ interface 2,多项选择题(这个大题20项,每项2分,共40分) 1。在JA V A中,如果父类中的一些方法不包含任何逻辑并且需要被子类重写,那么父类的这些方法应该使用()关键字来声明:a)final b)static c)abstract d)void 2。在JA V A中,已经定义了两个接口b和c。要定义实现这两个接口的类,下面的语句是正确的() a)接口aextend b,c b)接口a implements b,c c)类a mplements b,c d)类a mplements b,实现c 3。可以在JA V A接口()中定义 A)静态方法b)常量c)构造函数d)抽象方法 4。假设A有构造函数A (int a),那么在A类的其他构造函数中调用的构造函数和语句格式应该是() a)a(x)b)this . a(x)c)this(x)d)super(x) 5。如果x = 1,y = 2,z = 3,表达式y+= z-/++x的值为()a)3b)3.5°c)4d)5 6。下列关于继承的陈述中哪一个是正确的?( )a)子类只继承父类的公共方法和属性:b)子类继承父类的非私有属性和方法: C)子类继承父类的方法,但不继承父类的属性:d)子类继承所有的属性和方法。 7。在爪哇。使用JDBC时对于对同一个SQL语句的多次调用,使用()通常会提高效率 a)语句b)可调用语句c)准备语句d)prarmeters语句8。以下方法无法控制Servlet的生命周期:a)服务b)销毁c) dopost d) init9。可以分配给字节变量的值的范围是()0 ~ 65535 b) (-128) ~ 127 c) (-32,768) ~ 32, JA V A编程方面 1.Java中switch是否能作用在byte上,是否能作用在long上,是否能作用在String上?(3’) 2.Java中String 对象能否被继承?STRING与STRINGBUFFER的区别?(6’) 3.说说你熟悉的几种Java的常用设计模式,一般在哪种情况下用到这些设计模式?你对设 计模式有什么看法?用java实现一个单例模式?(12’) 4.abstract class和interface有什么区别?(5’) 5.说说你所知道的java解析XML的方法。(4’) 6.简述ArrayList和Vector的区别,HashMap和Hashtable的区别。(20’) 7.写一个Javascript函数,返回指定的英文句子中的每个单词及其字符的起止位置。 例:”Th at is right.”应依次返回”Th at 0-4”, ”is 5-7” ,”right 8-13”(15’) 8.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变 化后的结果?那么这里到底是值传递还是引用传递? (5’) 数据库方面 1.事务是什么?(5’) 2.Oracle中有2张表格T1和T2,如下所示: T1 A B C 1 1 1 1 21 1 12 21 1 12 1 Null 12 41 2 12 4 3 T2 A B C 12 1 5 13 1 1 14 2 2 22 5 2 2 16 1 请问select * from T2 where c not in (select c from T1)结果是什么?(10’) 英文翻译(15’) Foremost amongst these is the Spring Framework's Inversion of Control (IoC) container. A thorough treatment of the Spring Framework's IoC container is closely followed by comprehensive coverage of Spring's Aspect-Oriented Programming (AOP) technologies. The Spring Framework has its own AOP framework, which is conceptually easy to understand, and which successfully addresses the 80% sweet spot of AOP requirements in Java enterprise programming. Coverage of Spring's integration with AspectJ (currently the richest - in terms of features - and certainly most mature AOP implementation in the Java enterprise space) is also provided. 软件工程师笔试题 笔试时间为60min 请在答题卡上作答,请勿在试卷上进行勾画,感谢您的配合 第一部分:判断题 1.Java语言是一种面向对象程序设计语言。( ) 2.在Java有布尔类型,该类型只能有两个值:1和0。( ) 3.Java中一个类可以同时继承多个其他类,但只能实现一个接口。( ) 4.在Java中字符串的长度和字符串中字符的个数是相等的。( ) 5.程序中的异常是错误的一种,通过调试程序可以解决异常。( ) 6.使用Java语言既可以读写二进制文件,又可以读写文本文件。( ) 7.框架JFrame作为图形用户界面的顶级容器,原子组件是不能直接放置到框架的。( ) 8.当最小化小程序时就会调用小程序的stop()方法,暂时释放所占资源。( ) 9.调试Java程序也就是运行Java程序,使用java命令即可完成。( ) 10.线程就是程序,只不过是代码较少。( ) 第二部分:选择题(可多选) 1.以下有关类型转变的说法错误的是() A低精度类型向高精度类型转换时,不会丢失数据精度 B系统会自动进行(整型或浮点型)低精度类型数据向高精度类型数据的转换 C高精度类型数据向低精度类型数据的转换、整型和浮点型数据之间的转换,必须强制进行,有可能会引起数据丢失 D高精度类型数据向低精度类型转换时,也不会丢失数据精度,因为转换是系统进行的 2. 以下有关条件运算符(?:)说法正确的是() A条件运算符是一个三元运算符,其格式是:表达式1?表达式2:表达式3 B格式中的“表达式1”是关系或者逻辑表达式,其值是boolean值 C若“表达式1”成立,该条件表达式取“表达式2”的值,否则取“表达式3”的值 D以上说法都正确 3.在switch(表达式)语句中,“表达式”的值必须是() A 整数值 B 字符值 C 布尔逻辑值 D 整数或字符值 4.下列关于for循环和while循环的说法中,正确的是() A while循环能实现的操作,for循环也能实现 B while循环判断条件一般是程序结果,for循环判断条件一般是非程序结果 C 两种循环任何时候都可以替换 D 两种循环结构中必须都有循环体,循环体不能为空 5. 下面的表达式中正确的是() A String s=”你好”;if(s==”你好”) System.out.println(true); B String s=”你好”;if(s!=”你好”) System.out.println(false); C String s=”你好”;if(s.equals(”你好”)) System.out.println(true); D String s=”你好”;if(equals(s,”你好”)) System.out.println(true); 6.String str;System.out.println(str.length());以上语句的处理结果是() A 编译报错 B 运行结果是null C 运行结果为0 D 随机值 7. 执行String [ ] s=new String[10];代码后,下面结论正确的是() 软件开发工程师(JAVA)笔试题 请在90分钟以内做答答案请写在答题纸上 一、选择题 1、下面哪项是不合法的标识符:() A. $persons B. TwoUsers C. *point D. _endline E. final 2、下列运算符合法的是() A.&& B.<> C.if D.:= 3、下面描述中哪两项相等:()[选择两项] A.<%= YoshiBean.size%> B.<%= YoshiBean.getSize()%> C.<%= YoshiBean.getProperty(“size”)%> D. 一、选择题 1.Java中提供了名为()的包装类来包装原始字符串类型。 A.Integer B.Char C.Double D.String 2.https://www.wendangku.net/doc/7215924099.html,ng包的()方法比较两个对象是否相等,相等返回true。 A.toString() B.equals() C.compare() D.以上所有选项都不正确 3.下面的集合中,()不可以存储重复元素。 A.Set B.Collection C.Map D.List 4. Java接口的修饰符可以为() A private B protected C final D abstract 5. 下面哪些是Thread类的方法() A start() B run() C exit() D getPriority() 6. 下面关于https://www.wendangku.net/doc/7215924099.html,ng.Exception类的说法正确的是() A 继承自Throwable B Serialable C集成自Error D以上都不正确 7.下面程序的运行结果:() public static void main(String[] args) { // TODO Auto-generated method stub Thread t = new Thread() { public void run() { pong(); } }; t.run(); System.out.print("ping"); } static void pong() { System.out.print("pong"); } A pingpong B pongping C pingpong和pongping都有可能 D 都不输出 8. 下面哪个流类属于面向字符的输入流( ) A BufferedWriter B FileInputStream C ObjectInputStream D InputStreamReader 9. ArrayList list = new ArrayList(20);中的list扩充几次() A 0 B 1 C 2 D 3 Java 软件高级工程师笔试题 【智力部分】(30分) 1.烧一根不均匀的绳要用一个小时,如何用它来判断半个小时?(5分) 2.4,4,10,10,加减乘除,怎么出24点?(5分) 3.如果你有无穷多的水,一个容积为3L的和5L的提桶,你如何准确称出4L的水?(5分) 4.一只蜗牛从井底爬到井口,每天白天蜗牛要睡觉,晚上才出来活动,一个晚上蜗牛可以向上爬3尺,但是白天 睡觉的时候会往下滑2尺,井深10尺,问蜗牛几天可以爬出来?(5分) 5.有一种细菌,经过一分钟分裂为2个,再过一分钟,分裂为4个,这样,将一个细菌放在一个瓶子里面,一个 小时后瓶子被细菌充满了。现在假设一开始放入瓶中的为两个细菌,那么到充满瓶子要多长的时间?(10分) 【专业部分】(70分) 6.简述一下面向对象的特征,并举例说明你对面向对象的理解?(5分) 7.ArrayList和HsahSet的区别,HashMap和Hashtable的区别?(5分) 8.线程同步的关键字是什么?sleep() 和wait() 有什么区别?怎么唤醒wait()停止的线程?(5分) 9.列举你在项目中常用的设计模式(伪代码或类图),并说明每种设计模式的具体应用场景。(5分) 10.Spring中事务管理支持哪几种方式以及每种方式的具体使用方法。(5分) 11.Hibernate的缓存等级及其特点(5分) 12.至少写出一种11位手机号码的正则表达式。(5分) 13.用简短的代码实现字符串“s tr in g”到“s tr in g”转换。即将多个空格转换为一个空格(5 分) 14.使用Socket编写一个程序,客户端向服务器端发送请求(发送字符串即可),服务端接收后发送反馈信息.(10 分) 某公司Java工程师笔试题 java工程师是要参加的,下面YJBYS小编为大家搜集的一篇某公司Java工程师,供大家参考借鉴,希望可以帮助到有需要的朋友! 一、问答题(共两题每题5分) 1、在软件开发的形式中,有单独开发和团队开发,请您分析两种开发形式的利弊? 2、除了工资还有什么福利对你具有吸引力? 二、案例分析(共四题每题5分) 1、案例一:项目经理陈经理所在的项目组接到总监分配的一项紧急任务,要求在2天内完成A项目,陈经理马上召集其下属工程师小张和小黄进行工作分配并分析项目要点和各个要点的主要做法。时间已经过去了1天半,工程师小张发现,根据陈经理对项目要点的主要做法行不通,但时间已经所剩不多了。 问题一:如果你是小张,你会怎么做?为什么? 问题二:由于项目做法的问题导致项目的进度无法按总监的要求在2天内完成,总监怪罪下来,你认为这是谁的责任,为什么? 2、案例二:工程师小李和工程师小陈分别在同一个项目组负责软件开发工作,他俩是同时进入公司的,而且被分配在邻座,因此关系非常好。工程师小李最近发现小陈经常在上班时间做一些与本公司业务无关的工作,并且在一次偶然的机会让小李发现,小陈的薪资比自己的薪资要高一倍多。 问题一:如果你是小李,你会怎么做,为什么? 问题二:如果你是小陈,你发现做的事情被小李发现了,你会怎么做,为什么? 技术题 一、基础题,共十题每题2分 1、GC是什么?为什么要有GC? 2、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?Byte a=1,b=1,bye c=a+b有什么错?Short a=1,b=1,Short c=a+b有什么错(答对一个给0.5分) JAVA工程师笔试题 一,选择题 1.如下代码 2.public class Test { 3.public int aMethod() { 4.static int i = 0; 5.i++; 6.return i; 7.} 8.public static void main (String args[]) { 9.Test test = new Test(); 10.(); 11.int j = (); 12. 13.} 14.} 15.输出结果是什么 16. A. 0 B. 1 C. 2 D. 编译失败 2. 如下代码 int i =1,j =10; do { if(i++> --j) { continue; } } while (i <5); "i = " +i+ "and j = "+j); 输出结果是什么 A. i = 6 and j = 5 B. i = 5 and j = 5 C. i = 6 and j = 5 D. i = 5 and j = 6 E. i = 6 and j = 6 3. 如下代码: public class SwitchTest { public static void main(String[] args) { "value = " + switchIt(4)); } public static int switchIt(int x) { int j = 1; switch (x) { case 1: j++; case 2: j++; case 3: j++; case 4: j++; case 5: j++; default: j++; } return j + x; } } 输出结果是什么 A. value = 3 B. value = 4 C. value = 5 D. value = 6 E. value = 7 F. value = 8 4. 在接口中以下哪条定义是正确的 (两个答案) A. void methoda(); B. public double methoda(); C. public final double methoda(); D. static void methoda(double d1); E. protected void methoda(double d1); 5. 如下代码: public void test(int x) { int odd = x%2; if (odd) { "odd); } else { "even"); } } 哪个描述正确 A. 编译失败. B. "odd" 永远被输出. C. "even" 永远被输出 D. "odd" 输出x的值, E. "even" 输出x的值 6. 如下代码: public class X { public X aMethod() { return this;} } public class Y extends X { } 哪两个方法能加到Y类的定义中 A. public void aMethod() {} B. private void aMethod() {} C. public void aMethod(String s) {} D. private Y aMethod() { return null; } E. public X aMethod() { return new Y(); } 1、抽象: 抽象就就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只就是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一就是过程抽象,二就是数据抽象。 2、继承: 继承就是一种联结类的层次模型,并且允许与鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法与实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3、封装: 封装就是把过程与数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其她对象。 4、多态性: 多态性就是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性与包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 5、String就是最基本的数据类型不? 基本数据类型包括byte、int、char、long、float、double、boolean与short。 java、lang、String类就是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 6、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 引用类型与原始类型的行为完全不同,并且它们具有不同的语义。引用类型与原始类型具有不同的特征与用法,它们包括:大小与速度问题,这种类型以哪种类型的数据结构存储,当引用类型与原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为null,而原始类型实例变量的缺省值与它们的类型有关。 7、String 与StringBuffer的区别 JA V A平台提供了两个类:String与StringBuffer,它们可以储存与操作字符串,即包含多个字符的字符数据。这个String 类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当您知道字符数据要改变的时候您就可以使用StringBuffer。典型地,您可以使用StringBuffers来动态构造字符数据。 8、运行时异常与一般异常有何异同? 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,就是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但就是并不要求必须声明抛出未被捕获的运行时异常。 1.web中的forward和redirect的区别? 前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。 2. xml在解释的时候DOM和SAX协议的区别和含义? DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问 SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问 3说明JNDI、JMS、JTA、RMI的意思? JNDI(Java Naming and Directory Interface)是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在抽象层上。 JMS(Java Messaging Service)是Java平台上有关面向消息中间件的技术规范,翻译为Java消息服务。JMS支持点对点和发布/订阅两种消息模型。 JTA(Java Transaction API) 为 J2EE 平台提供了分布式事务服务。要用 JTA 进行事务界定,应用程序要调用https://www.wendangku.net/doc/7215924099.html,erTransaction 接口中的方法. RMI是Java的一组拥护开发分布式应用程序的API。RMI使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol)。它大大增强了Java开发分布式应用的能力 4.单例模式 Public class Signle{ Private Signle(){ } Pirvate static Signle signle = new Signle(); Public static Signle gets(){ Retrun signle; } } 5数据库中left join的意思,和在什么场合中应用? LEFT JOIN操作用于在任何的 FROM 子句中,组合来源表的记录。使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。 6 ejb中的sessionbean和entitybean的区别和含义? SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean 被用来代表应用系统中用到的数据。 对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。 对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。 7抽象类和接口的区别 1:一个类可以实现任意多的接口,但是最多只能对一个抽象类进行子类化。 2:一个抽象类可以包括非抽象方法,而一个接口的所有方法在效果上都是抽象的。 3:一个抽象类可以申明并使用变量,而一个接口不行。 4:一个抽象类中的方法的访问修饰符可以使public,internal,protected,protected internal,private,而接口成员的访问修饰符在默认情况下都是public,而且,在申明接口成员时,不允许使用访问修饰符(甚至不能使用public)。 Java笔试题 第一部分:数据结构 } } staticboolean foo(char c) { returntrue; } publicstaticvoid main(String[] argv) { int i = 0; ABDCBDCB B. ABCDABCD C. Compilation fails. D. An exception is thrown at runtime. 三、1. class A { 2. protected int method1(int a, int b) { return 0; } 3. } Which two are valid in a class that extends class A? (Choose two) A. public int method1(int a, int b) { return 0; } B. private int method1(int a, int b) { return 0; } C. private int method1(int a, long b) { return 0; } D. public short method1(int a, int b) { return 0; } E. static protected int method1(int a, int b) { return 0; } publicclass B extends A{ /** *@param args */ } 四、 1. public class Outer{ 2. public void someOuterMethod() { 3. } 5. public class Inner{} 6. public static void main( String[]argv ) { 7. Outer o = new Outer(); 8. } 10. } Which instantiates an instance of Inner? A. new Inner(); new Inner(); new (); new (); ew Inner() 五、有两个页面和,要从传值到有几种方法?分别是什么? JAVA工程师笔试题 一、选择题 1、如下代码 public class Test { public int aMethod() { static int i = 0; i++; return i; } public static void main (String args[]) { Test test = new Test(); test.aMethod(); int j = test.aMethod(); System.out.println(j); } } 输出结果是什么? A. 0 B. 1 C. 2 D. 编译失败 2. 如下代码 int i =1,j =10; do { if(i++> --j) { continue; } } while (i <5); System.out.println("i = " +i+ "and j = "+j); 输出结果是什么? A. i = 6 and j = 5 B. i = 5 and j = 5 C. i = 6 and j = 5 D. i = 5 and j = 6 3. 如下代码: public class SwitchTest { public static void main(String[] args) { System.out.println("value = " + switchIt(4)); } public static int switchIt(int x) { int j = 1; switch (x) { case 1: j++; case 2: j++; case 3: j++; case 4: j++; case 5: j++; default: j++; } return j + x; } } 输出结果是什么? A. value = 3 B. value = 4 C. value = 5 D. value = 6 E. value = 7 F. value = 8 4. 在接口中以下哪条定义是正确的? (多选) A. void methoda(); B. public double methoda(); C. public final double methoda(); D. static void methoda(double d1); E. protected void methoda(double d1); 5. 如下代码: public void test(int x) { int odd = x%2; if (odd) { System.out.println("odd); } else { System.out.println("even"); } } 哪个描述正确? A. 编译失败. B. "odd" 永远被输出. C. "even" 永远被输出 D. "odd" 输出x的值, E. "even" 输出x的值 6. 如下代码: public class X { public X aMethod() { return this;} } public class Y extends X {} 哪些方法能加到Y类的定义中? A. public void aMethod() {} B. private void aMethod() {} C. public void aMethod(String s) {} D. private Y aMethod() { return null; } E. public X aMethod() { return new Y(); } 7. 如下代码: public class X {java高级工程师_面试题和答案
Java软件开发工程师笔试题(答案)
Java工程师面试题(含答案)
Java开发工程师笔试题(带答案)
Java软件开发工程师笔试题(答案)
java软件工程师笔试试题
JAVA初级程序员笔试题(电讯盈科)
软件开发工程师(JAVA)笔试题
JAVA工程师笔试题
JAVA高级工程师笔试题(技术部分)
某公司Java工程师笔试题
java工程师笔试题
Java工程师面试题(含答案)
用友软件Java工程师面试题(含答案)
JAVA助理工程师笔试题答案副
JAVA工程师笔试题(答案版)