71、为了显示 myStr = 23 这样的结果,写出在控制台输入的命令

public class MyClass {

public static void main(String args[]) {

String s1 = args[0];

String s2 = args[1];

String myStr = args[2];

System.out.printin("myStr =" + s2 + myStr);

}

}

答:java MyClass 1 2 3 4

72、写出下面代码的执行结果

public class MyClass {

static void aMethod(StringBuffer sf1, StringBuffer sf2) {

sf1.append(sf2);   sf2 = sf1;

}

public static void main(String[] args){

StringBuffer sf1 = new StringBuffer("A");

StringBuffer sf2 = new StringBuffer("B");

aMethod(sf1,sf2);

System.out .println(sf1+ "":"+sf2);

}

}

答:AB:B

73、第 3 行中生成的 object 在第几行执行后成为 garbage collection 的对象? 1.public class MyClass {

2. public StringBuffer aMethod() {

3.  StringBuffer sf = new StringBuffer("Hello");

4.   StringBuffer[] sf_arr = new StringBuffer[1];

5.   sf_arr[0] = sf;

6.   sf = null;

7.   sf_arr[0] = null;

8.   return sf;

9. }

10.}

答:第 7 行 
 
74、写出执行下面的代码后的结果

public class MyClass {

public static void main(String args[]) {

java.util.Vector v1 = new java.util.Vector();

v1.addElement("Hello");

v1.addElement(new Float(3.14f));

v1.addElement(10);

System.out.println(v1.elementAt(0) + ":" + v1.elementAt(1) + ":"+ v1.elementAt(2));

}

}

答:Hello:3.14:10 
 
75、写出执行下面代码后的正确结果

interface MyDB {

public void getConnection();

}

class MyDBDriver implements MyDB {

public void getConnection() {

System.out.println("getConnection()");

}

}

public class MyClass {

public static void aMethod(MyDB db) {

db.getConnection();

}

public static void main(String args[]) {

MyDBDriver db_driver = new MyDBDriver();

aMethod(db_driver);

}

}

答:getConnection() 
 
76、下列程序运行的结果是

class A {

class Dog {

private String name;

private int age;

private int step;

Dog(String s, int a) {

name = s;

age = a;

step = 0;

}

public void run(Dog fast) {

fast.step++;

}

}

public static void main(String args[]) {

A a = new A();

Dog d = a.new Dog("Tom", 3);

d.step = 25;

d.run(d);

System.out.println(d.step);

}

}

答:26 
 
77、下列程序运行的结果是

public class foo {

public static void main (String args[]){

String s;

System.out.println("s="+s);

}

}

答:编译出错 
 
78、请看下列程序,运行结果是

class Super{

int i=10;

Super(){

print();

i=20;

}

void print(){

System.out.print(i);

}  
}

public class Sub extends Super{

int j=30;  Sub(){

print();  j=40;

}

void print(){

System.out.print(j);

}

public static void main(String[] args){

System.out.print(new Sub().j);

}

}

答:03040  
 
79、getSomething ()执行时发生 IllegalArgumentException 会出现什么样的结 果?

void makeConnection(String url)  {

try {

getSomething();

}catch(NullPointerException e) {

System.out.printin("Invalid URL") ;

return;

}catch(Exception e) {

System.out.println("Exception");

}

}

答:打印 Exception 
 
80、有 2 个类 Cat 及 WhiteCat,代码如下:

public class Cat {

protected static String color = "random";

public Cat() {  }

public void showCatColor() {

System.out.println("Cat:" + color);

}

public static void  showColor() {

System.out.println("Cat:" + color);

}

}

public class WhiteCat extends Cat { 
    protected static String color = "white";

public WhiteCat() {   super();  }

public void showCatColor() {

System.out.println("WhiteCat:" + color);

}

public static void showColor() {

System.out.println("WhiteCat:" + color);

}

}

请分析下面各段程序的运行结果

A.WhiteCat whiteCat = new WhiteCat();

Cat cat = whiteCat; cat.showColor();

cat.showCatColor();

B.Cat cat = new Cat();

WhiteCat whiteCat = (WhiteCat) cat;

cat.showColor(); cat.showCatColor();

C.Cat cat = new WhiteCat();

WhiteCat whiteCat = (WhiteCat) cat;

cat.showColor();

cat.showCatColor();

答:

A 段执行的结果是: Cat:random WhiteCat:white

B 段执行的结果是: 会抛出 java.lang.ClassCastException 异常

C 段执行的结果是: Cat:random WhiteCat:white  
 
81、现有 1~100 共一百个自然数,已随机放入一个有 98 个元素的数组 a[98]。 要求写出一个尽量简单的方案,找出没有被放入数组的那 2 个数,并在屏幕上打 印这 2 个数。注意:程序不用实现自然数随机放入数组的过程。

答: int[] b = new int[]{....存入 98 个随机的 1~100 的整数};

int[] a = new int[100];  
for(int t : b)

a[t-1]=t;

for(int t=0;t < a.length; t++)

if(a[t]==0)

System.out.println(t+1); 
 
82、写一段程序用冒泡算法对数组 int[]array 内的元素有小到大重新排列 答: pacakge com.tarena; class BubbleSort{     public static void main(String[] args)     {         int[] arr = {8,4,2,3,5};         arr = sort(arr);         for(int a : arr)         {             System.out.print(a+"\t");         }     }     public static int[] sort(int[] array) {   int cnt;   int n = array.length;   do{    cnt = 0;    for( int i=1; i<n; i++ )    {     if( array[i]<array[i-1] )     {      int temp = array[i];      array[i] = array[i-1];             array[i-1] = temp;      cnt++;     }    }    n--;   }while( cnt!=0 );        return array;     } } 
83、设计线程一个类 WorkerThread,其构造函数接受一个 message 字符串作 为参数,把该字符串打印到 console 上,同时,在 WorkThread 的 main 函数中 启动该线程 
答:

package com.tarena; 
public class WorkerThread extends Thread {

private String message;

public WorkerThread(String message) {

this.message = message;

}

public void run(){

System.out.println(message);

}

public static void main(String[] args) {

new WorkerThread("hello world!").start();

}


 
84、在 web 应用开发过程中经常遇到输出某种编码的字符,如从 GBK 到iso8859-1 等,如何输出一个某种编码的字符串?

答:

public static String translate(String str) {

String tempStr = "";   t

ry {

tempStr = new String(str.getBytes("GBK"), "ISO-8859-1");

tempStr = tempStr.trim();

} catch (Exception e) {

System.err.println(e.getMessage());

}

return tempStr;


 
85、写一个单例 答:

public class Singleton {

private Singleton sin = new Singleton();

private Singleton(){    }

public static Singleton init(){

return sin;

}


 
86、请写出一个公用方法,输入 String 返回该串是否含有非空字符,并写出 junit 的测试用例

答:

public boolean hasBlank(String str){

if(str.endWith(" ")||str.startWith(" ")){

return false; 
    } else{

String[] strs=str.split(“ ”);

if(strs.length()==1){

return false;

}

}

return true;

}  
@Test

public void testFun(){

System.out.println(TestString.nullString("test"));

}

87、JAVA 实现一种排序

答:用插入法进行排序代码如下

package com.tarena;

import java.util.*;

class InsertSort  {

ArrayList list;

public InsertSort(int num,int mod)  {

list = new ArrayList(num);

Random rand = new Random();

System.out.println("The ArrayList Sort Before:");

for (int i=0;i<num ;i++ )  {

list.add(new Integer(Math.abs(rand.nextInt()) % mod + 1));

System.out.println("list["+i+"]="+list.get(i));

}

}

public void SortIt()  {

Integer tempInt;  int MaxSize=1;

for(int i=1;i<list.size();i++)  {

tempInt = (Integer)list.remove(i);

if(tempInt.intValue()>=((Integer)list.get(MaxSize-1)).intValue())  {

list.add(MaxSize,tempInt);

MaxSize++;

System.out.println(list.toString());  
        }  else  {

for (int j=0;j<MaxSize ;j++ )  {

if (((Integer)list.get(j)).intValue()>=tempInt.intValue())  {

list.add(j,tempInt);

MaxSize++;

System.out.println(list.toString());

break;

}

}

}

}

System.out.println("The ArrayList Sort After:");

for(int i=0;i<list.size();i++)  {

System.out.println("list["+i+"]="+list.get(i));

}

}  
    public static void main(String[] args)  {

InsertSort sort = new InsertSort(10,100);  sort.SortIt();

}

}

88、创建类 Person,其中存储的成员数据为:age(int),sex(boolean),weight(int), 至少有一个构造函数可以初始化这三个属性值,同时提供获取这三个属性值的 public 方法

答:

public class Person {

private int age;

private boolean sex;

private int weight;

public Person() {  }

public Person(int age, boolean sex, int weight) {

this.age = age;

this.sex = sex;

this.weight = weight; 
    }

public int getAge() {

return age;

}

public boolean isSex() {

return sex;

}

public int getWeight() {

return weight;

}


 
89、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节 截取的字符串。 但是要保证汉字不被截半个,如"我 ABC", 4,应该截为"我 AB", 输入"我 ABC 汉 DEF",6,应该输出为"我 ABC"而不是"我 ABC+汉的半个"。

答:

package com.tarena;

class SplitString {

public static String split(String str,int num)      {

byte[] strs = str.getBytes();

if(strs[num-1]<0)         {

num=num-1;

}

byte[] news = new byte[num];

System.arraycopy(strs,0,news,0,num);

return new String(news);

}

public static void main(String[] args)      {

String str = split("我 ABC", 4);

System.out.println(str);

String str2 = split("我 ABC 走 DEF", 6);

System.out.println(str2);

}


 
90、现有一个 32 位的整型变量 value 和一个有 32 个元素的数组 a[32]  要求: a.对 value 随机赋值;b.让数组 a[n]的值等于 value“位 n”的值,0<=n<=31。
 举例:如果 value 的“位 0”(Bit0)=0,那么 a[0]=0;如果 value 的“位 10” (Bit10)=1,那么 a[10]=1。

答:

package com.tarena; 
import java.util.Random;

public class TestArray {

final static char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8',    '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',    'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',    'z' };

public static void main(String[] args) {

Random r = new Random();

int value = r.nextInt();

System.out.println(value);

char[] cs = TestArray.test(value, 1);

int[] is = new int[32];

for (int i = 0; i < cs.length; i++) {

is[i]=((int)cs[i])==0? cs[i]:cs[i]-48;

}

for (int i = 0; i < is.length; i++) {

System.out.print(is[i]);

}

}

public static char[] test(int i, int shift) {

char[] buf = new char[32];

int charPos = 32;

int radix = 1 << shift;

int mask = radix - 1;

do {

uf[--charPos] = digits[i & mask];

i >>>= shift;

} while (i != 0);

return buf;

}

}

91、编写程序将由数字及字符组成的字符串中的数字截取出来并按顺序输出, 例如:“ABC137GMNQQ2049PN5FFF”输出结果应该为 01234579 答:

package com.tarena; 
import java.util.Arrays; 
public class NumberSplitChar { 
    public static void main(String[] args) {

String str="ABC137GMNQQ2049PN5FFF";

char[] beforechars=str.toCharArray(); 
        char[] afterchars=new char[beforechars.length];

int j=0;

for(int i=0;i<beforechars.length;i++){

if(beforechars[i]>='0' && beforechars[i]<='9'){

afterchars[j++]=beforechars[i];

}

}

Arrays.sort(afterchars);

for(int i=(afterchars.length-j);i<afterchars.length;i++){

System.out.print(afterchars[i]);

}



 
91、排序都有哪几种方法?用伪代码实现一个快速排序

答:排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排 序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱 排序、基数排序) 快速排序的伪代码:使用快速排序方法对 a[ 0 :n- 1 ]排序从 a[ 0 :n- 1 ]中 选择一个元素作为 middle,该元素为支点;把余下的元素分割为两段 left 和 right,使得 left 中的元素都小于等于支点,而 right 中的元素都大于等于支点;递归地使用快速排序方法对 left 进行排序;递归地使用快速排序方法对 right 进行排序;所得结果为 left + middle + right。 
 
92、请用 JAVA 实现两个类,分别实现堆栈(Stack)和队列(Queue)操作。  答:

public class MyStack {

private List list;

public MyStack(){

list = new ArrayList();

}

public boolean isEmpty(){

return list.size() == 0;

}

public void push(Object obj){

list.add(obj);

}

public Object pop(){

if(list.size()>0){

Object obj = list.get(list.size()-1);

list.remove(list.size()-1);

return obj;

}else{    return null;   } 
    }

public int getNumber(){

return list.size();

}

}

class IntegerQueue {

public int[] integerQueue;// 用来当队列

public int tail;// 队尾

public int size;// 队的长度,也可以设置一个默认值,溢出时从新申请

public IntegerQueue(int size) {

integerQueue = new int[size];

this.size = size;

tail = 0;

}

public void inQueue(int i) {

if (tail < size) {

this.integerQueue[tail] = i;

tail++;

} else {

System.err.println("溢出啦!");

}


    public int outQueue() {

if (tail >= 0) {

int tmp = this.integerQueue[0];

tail--;

return tmp;

} else {

System.err.println("队列为空!");

throw new RuntimeException();

}

}

}

93、简述 JAVA 代码安全性

答:类加载器(class loader)加载程序运行所需要的所有类,它通过区分本机 文件系统的类和网络系统导入的类增加安全性,这可以限制任何的特洛伊木马程 序,因为本机类总是先被加载,一旦所有的类被加载完,执行文件的内存划分就 固定了,在这个时候特定的内存地址被分配给对应的符号引用,查找表(lookuo table)也被建立,由于内存划分发生在运行时,解释器在受限制的代码区增加保护防止未授权的访问;然后字节码校验器(byte code verifier)进行校验, 主要执行下面的检查:类符合 JVM 规范的类文件格式,没有违反访问限制,代码 没有造成堆栈的上溢或者下溢,所有操作代码的参数类型都是正确的,没有非法 的数据类型转换(例如将整型数转换成对象类型)发生;校验通过的字节码被解 释器(interpreter)执行,解释器在必要时通过运行时系统执行对底层硬件的 合适调用。 
 
94、简述 java 中的继承

答:Java 中是单继承关系,也就是说一个类只能有一个父类,但是可以同时实 现多个接口;对于接口本身而言,可以继承多个接口。这样做的目的就是为了阻 止因为多继承而造成的的业务对象本身的可读性的降低。 
 
95、简述 java 中的垃圾回收

答:GC 是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出 现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃, Java 提供的 GC 功能可以自动监测对象是否超过作用域从而达到自动回收内存的 目的,Java 语言没有提供释放已分配内存的显示操作方法。 Java 程序员不用 担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下 面的方法:System.gc() 或 Runtime.getRuntime().gc() 。 
 
96、String a=null; if (a!=null && a.length()>10) {...}    上面面的代码,如果你用“&”替换“&&”将发生什么错误? 答:会抛出空指针异常;&&会短路,只要遇到 boolean 值为 false 就不会再往后 执行了;而&则是会把两边的运算都执行完。 
 
97、abstract class 和 interface 有什么区别?  答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用 于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现 该类的情况。不能创建 abstract 类的实例。然而可以创建一个变量,其类型是 一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态 方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也 是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中 实现这些方法。接口(interface)是抽象类的变体。新型多继承性可通过实现 这样的接口而获得。接口中的所有方法都是抽象的,所有成员变量都是 public static final 的。一个类可以实现多个接口,当类实现接口时,必须实现接口 的所有方法。抽象类在 Java 语言中表示的是一种单继承的关系,而接口表示的 是多继承的关系;抽象类中可以定义自己的成员变量,也可以包含非抽象的方法, 而在接口中只能有静态的常量,所有方法必须是抽象的;实现抽象类时可以只实 现其中的部分方法,而要是实现一个接口的话就必须实现这个接口中的所有抽象 方法。

98、String,  StringBuffer  StringBuilder 的区别。 
答:String 是不可变的;StringBuffer 是可变的,如果你对字符串中的内容经 常进行操作,特别是内容要修改时,那么使用 StringBuffer,如果最后需要 String,那么使用 StringBuffer 的 toString()方法,并且它是线程安全的; StringBuilder 是从 JDK 5 开始提供的类,为 StringBuffer 该类补充了一个单 个线程使用的等价类;通常应该优先使用 StringBuilder 类,因为它支持所有 相同的操作,但由于它不执行同步,所以速度更快。

99、谈谈 final, finally, finalize 的区别

答:final —修饰符(关键字)如果一个类被声明为 final,意味着它不能再派 生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract 的 ,又被声明为 final 的。将变量或方法声明为 final,可以保证它们在使用中不 被改变。被声明为 final 的变量必须在声明时给定 初值,而在以后的引用中只 能读取,不可修改。被声明为 final 的方法也同样只能使用,不能重载 finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个 异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块( 如果有的话) finalize —方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对 象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定 这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此 所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其 他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。 
 
100、屋子里面有椅子,椅子有四只腿及靠背。屋子、椅子什么关系,椅子、腿、 靠背什么关系(HAS-A,IS-A)?

答:屋子 HAS-A 椅子 椅子 HAS-A 四只腿及靠背 
 
101、你认为 java 与其他(你所了解的)语言相比,有什么优点和缺点?

答:1). Java 没有预处理指令。(如 C 中的#define , #include , #ifdef 等)。 C 中的常量定义在 Java 中用 static final 来取代。

2). Java 中没有 C 中的全局变量。

3). Java 中的主类型的 size 是确定的,而 C 中主类型的 size 跟平台相关。

4). Java 中没有了指针,它使用了类似的句柄来取代指针,但是 Java 中不 允许对句柄进行加减,没有取地址操作符之类的东东。

5). Java 有垃圾收集机制,不需要自己释放空间。

6). Java 没有 goto 语句。Java 在 C 提供的控制语句基础上增加了异常处理 和标签 break 和 continue 语句。这些可以替代 goto 的作用。

7). C 要求一个方法或块中使用的所有局部变量的定义在该方法或块的最开 始处定义,而 Java 允许这些定义在方法或块的任意地方出现。

8). Java 不要求在调用一个函数以前已经定义了该函数,可以在调用点后 面定义。而 C 有这个要求。

9). Java 不支持 C 中的 strut 和 union 类型。Java 支持方法重载。

10). Java 不支持 C 中的 enum 关键字。

11). Java 不支持 C 中的 bitfields 能力。

12). Java 不支持 C 的 typedef。

13). Java 不支持 C 的方法指针。

14). Java 不支持 C 的可变参数表。

java 和.net 的都不适合做桌面程序,这两个比较适合写 WEB 的程序; c++比较适合写桌面程序 c++/java 都是强类型的静态预编译型语言。优点是结构 性强,程序可读性好,开发效率高,适合开发大型应用。就本人的经验而言,java 的开发效率优于 c++,实际上 java 大行其道的首要因素就是它够简单。java 尤 其不适合开发桌面程序,GUI 的 API 一直都是 java 的弱点;    perl/python 是动态解释型语言。perl 是弱类型的而 python 是强类型的,后 者的变量一旦赋值,就拥有了类型,不能再赋其他类型的值。不象 javascript/perl 可以随便定义。perl 是 unix 下的王牌工具,在缺乏 IDE 的字 符界面下,很好地弥补了 unix; shell/utility 的不足,并且部分继承了面向对象语言的灵活性。适合用来 搭建大程序。 
 
102、Java 中包含哪些基本数据类型?String 是最基本的数据类型吗?是否可以 继承 String 类?

答:基本类型包括 byte、int、short、long、float、double、boolean     String 不是基本数据类型,因为 String 类是 final 的,所以不能够被继承。
 
 
103、Math.round(11.5)等于多少? Math.round(-11.5)等于多少?

答:Math.round(11.5)==12  Math.round(-11.5)==-11  round 方法返回与参数 最接近的长整数,参数加 1/2 后求其 floor。 
 
104、Bit 和 Byte 是什么意思?它们之间有什么关系?

答:bit 中文名称是位,是用以描述电脑数据量的最小单位。     byte(字节)是计算机信息技术用于计量存储容量和传输容量的一种计量单 位 1byte=8bit 
 
105、用最有效的方法算出 2 乘已 8 对于几?

答: 2 << 3。 
 
106、String s=new Stirng("xyz");创建了几个 String Object?

答:创建两个,一个在堆内存(通过 new 得到),另一个在字符串常量池(“xyz”) 对象。 
 
107、swtich 是否能作用在 byte 上?是否能作用在 long 上? 是否能作用在 char 上? 是否能作用在 short 上?是否能作用在 String 上?

答:可以用在 byte、short、int、char 和枚举类型。 
 
108、char 型变量中能不能存贮一个中文汉字?为什么?

答:能够定义成为一个中文的,因为 java 中以 unicode 编码,一个 char 占 16 个字节,所以放一个中文是没问题的。

109、java 语言中 public、private、protected 三个关键字的用法,重写和重载 的区别。

答: 作用域   当前类   同包   子类     其它 public    √      √      √     √ protected √      √    √    × default   √      √      ×     × private   √      ×      ×       × 重写:发生在父子类之间,方法名相同,参数的类型、个数、顺序相同,返回值 相同,访问权限不能更封闭,抛出异常不能宽泛; 重载:发生在同一个类中,方法名相同,但是参数不同(类型不同或个数不同或 参数的顺序不同),返回值可以不相同。 
 
110、说一下 “==”和 equals()方法在字串变量操作中的不同? 答:”==”比较的是两个字符串对象的地址,equals()是比较的两个字符串的具 体值。 
 
111、异常机制中 try{}后一定要跟 catch 和 finally 吗?

答:一定要有 catch 或者 finally,catch 子句紧跟在 try 块后面,用来指定你 想要捕捉的“异常”的类型。如果有 catch 的话,可以没有 finally。 
 
112、能用 foreach 遍历访问的对象需要实现?

答:需要实现 Iterable 接口 
 
113、说出一些 JDK 常用的类,包,接口,请各举 5 个

类:        HashSet 、Thread 、String 、FileInputStream 、Class

包:        java.lang 、java.io 、java.util 、java.text 、java.sql

接口:    Collection 、Set 、List 、Comparable 、Serializable 
 
114、Anonymous Inner Class (匿名内部类) 是否可以 extends(继承)其它类,是 否可以 implements(实现)interface(接口)?

答:匿名内部类是可以继承其它类,同样也可以去实现接口的,用法为: JButton button = new JButton();  button.addActionListener(new ActionListener()  {  public void actionPerformed(ActionEvent e){//some mothod...}  }); 这样的用法在 swing 编程中是经常使用的,就是因为它需要用到注册监听器 机制,而该监听类如果只服务于一个组件,那么,将该类设置成内部类/匿名类是 最方便的。 
 
115、Java 的接口和 C++的虚类的相同和不同处。

答:由于 Java 不支持多继承,而有可能某个类或对象要使用分别在几个类或对 象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有 更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类 要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是 public  static,所有方法默认情况下是 public.一个类可以实现多个接口。 
 
116、JAVA 中数组有没有 length()这个方法? String 有没有 length()这个方法? 答:数组是没有 length()方法的,数组是使用数组对象.length 来得到该数组的长 度;String 是有 length()方法的。
 
117、接口是否可继承接口? 抽象类是否可实现接口? 抽象类是否可继承实体 类?

答:接口是可以继承接口的并且可以继承多个其它接口;抽象类可以实现接口中 的方法;抽象类可以继承实体类。 
 
118、java 中用 char 型变量中能不能存放一个中文汉字?

答:是能够定义成为一个中文的,因为 java 中以 unicode 编码,一个 char 占 16 个字节,所以放一个中文字符是没问题的。 
 
119、面向对象的特征有哪些方面?

答:面向对象的特征主要有以下几个方面:   1)抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地 注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一 部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。   2)继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了 一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称 为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原 始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量, 并且类可以修改或增加新的方法使之更适合特殊的需要。   3)封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。 面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封 装的对象,这些对象通过一个受保护的接口访问其他对象。   4)多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参 数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的 优势,很好的解决了应用程序函数同名问题。 
 
120、什么是 java 序列化,如何实现 java 序列化?

答:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进 行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之 间。序列化是为了解决在对对象流进行读写操作时所引发的问题; 序列化的实现:将需要被序列化的类实现 Serializable 接口,该接口没有需实现 的方法,implements Serializable 只是为了标注该对象是可被序列化的,然后使 用一个输出流(如FileOutputStream)来构造一个ObjectOutputStream(对象流)对 象,接着,使用 ObjectOutputStream 对象的 writeObject(Object obj)方法就可以将参数为 obj 的对象写出(即保存其状态),要恢复的话则用输入流。 
 
121、什么是垃圾回收?什么时候触发垃圾回收?如何降低垃圾回收的触发频 率?它能保证程序有足够的可用内存吗?

答:垃圾回收(GC)是 Java 语言的一个重要特性,作用是释放不再被使用的内存。 垃圾回收由系统进行管理。在系统认为需要的时候自动启动一个线程进行处理。尽量减少垃圾内存,也就是新建对象,的数量,可以降低垃圾回收的频率。垃圾 回收机制无法保证有足够的内存。 
 
122、什么是 JAVA 的反射?

答:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程 序集、模块和类型的对象。可以使用反射动态地创建类型的实例,将类型绑定到 现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段 和属性。 
 
123、构造器 Constructor 是否可以被继承?是否可以被 Override?

答:构造器 Constructor 不能被继承,因此不能重写 Overriding,但可以被重 载 Overloading。 
 
124、UDP 和 TCP 连接有和异同?

答:TCP 协议是面向连接的,每个数据包的传输过程是:先建立链路、数据传输、 然后清除链路。数据包不包含目的地址。受端和发端不但顺序一致,而且内容相 同。它的可靠性高;UDP 协议是面向无连接的,每个数据包都有完整的源、目的 地址及分组编号,各自在网络中独立传输,传输中不管其顺序,数据到达收端后 再进行排序组装,遇有丢失、差错和失序等情况,通过请求重发来解决。它的效 率比较高。 
 
125、程序注释的用途有哪些?带注释的程序有什么缺点?

答:注释可以说明程序,给自己或他人在阅读程序时提供帮助,使程序更容易理 解,也就是增强程序代码的可读性。过多的代码注释会使程序结构变得不清晰。
 
 
126、在程序中退出两重循环可以用哪些语句?

答:可以使用标签:  loop1: for (;;) {   for (;;) {    break loop1;   }  } 
 
127、什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和 拆箱?什么是  重载?CTS、CLS 和 CLR 分别作何解释?

答:应用程序域:一种边界,它由公共语言运行库围绕同一应用程序范围内创建 的对象建立(即,从应用程序入口点开始,沿着对象激活的序列的任何位置)。 应用程序域有助于将在一个应用程序中创建的对象与在其他应用程序中创建的 对象隔离,以使运行时行为可以预知。在一个单独的进程中可以存在多个应用程序域。 托管代码:由公共语言运行库环境(而不是直接由操作系统)执行的代码。托管 代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检 查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用 程序行为。 强类型系统:通过运行时类型识别(RTTI)(Run-Time Type Identification), 程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生 类型。 装箱、拆箱:从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。
 重载:是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需 要。 CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。 
 
128、Error 和 Exception 有什么区别? 列出你见过的 Exception 并简要说明。 答:error 表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困 难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况;

exception 表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现 问题;也就是说,它表示如果程序运行正常,从不会发生的情况。 常见异常有: NullPointerException:当操作一个空引用时会出现此错误。 NumberFormatException:数据格式转换出现问题时出现此异常。 ClassCastException:强制类型转换类型不匹配时出现此异常。 ArrayIndexOutOfBoundsException:数组下标越界,当使用一个不存在的数 组下标时出现此异常。 
 
129、java 中会存在内存泄露吗?请简单描述。

答:内存泄露是指系统中存在无法回收的内存,有时候会造成内存不足或系统崩 溃。Java 存在内存泄露。Java 中的内存泄露当然是指:存在无用但是垃圾回收 器无法回收的对象。而且即使有内存泄露问题存在,也不一定会表现出来。自己 实现堆栈的数据结构时有可能会出现内存泄露。 
 
130、Java  AWT 或 Swing 中的常用控件包括:

答:JTable,BorderLayout,GridLayout, FlowLayout,JFrame,Jlabel。 
 
131、运行时异常与一般异常有何异同?

答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的 通常操作中可能遇到的异常,是一种常见运行错误。java 编译器要求方法必须声 明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时 异常。 
 
132、sleep()和 wait()有什么区别?

答:sleep 是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行 机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用 sleep 不会 释放对象锁。  wait 是 Object 类的方法,对此对象调用 wait 方法导致本线程放弃对象锁, 进入等待此对象的等待锁定池,只有针对此对象发出 notify 方法(或 notifyAll) 后本线程才进入对象锁定池准备获得对象锁进入运行状态。 
 
133、同步和异步有何异同,在什么情况下分别使用他们?请举例说明

答:如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到, 或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据, 必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的 方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况 下采用异步途径往往更有效率。 
 
134、进程和线程分别该怎么理解?

答:进程是资源分配的基本单位。所有与该进程有关的资源,都被记录在进程控 制块 PCB 中。以表示该进程拥有这些资源或正在使用它们。另外,进程也是抢占 处理机的调度单位,它拥有一个完整的虚拟地址空间。 与进程相对应,线程与资源分配无关,它属于某一个进程,并与进程内的其 他线程一起共享进程的资源。当进程发生调度时,不同的进程拥有不同的虚拟地 址空间,而同一进程内的不同线程共享同一地址空间。 线程只由相关堆栈(系统栈或用户栈)寄存器和线程控制表 TCB 组成。寄存 器可被用来存储线程内的局部变量,但不能存储其他线程的相关变量。 发生进程切换与发生线程切换时相比较,进程切换时涉及到有关资源指针的 保存以及地址空间的变化等问题;线程切换时,由于同不进程内的线程共享资源 和地址 空间,将不涉及资源信息的保存和地址变化问题,从而减少了操作系统 的开销时间。而且,进程的调度与切换都是由操作系统内核完成,而线程则既可 由操作系统内 核完成,也可由用户程序进行。 
 
135、死锁的必要条件?怎么克服?

答:产生死锁的四个必要条件:  互斥条件:一个资源每次只能被一个进程使用。  请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。  不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。  循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。  这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要 上述条件之一不满足,就不会发生死锁。 死锁的解决方法:  a 撤消陷于死锁的全部进程;   b 逐个撤消陷于死锁的进程,直到死锁不存在;   c 从陷于死锁的进程中逐个强迫放弃所占用的资源,直至死锁消失。   d 从另外一些进程那里强行剥夺足够数量的资源分配给死锁进程,以解除死 锁状态

136、谈谈对 ClassLoader 的理解?

答:ClassLoader 加载类用的是全盘负责委托机制。所谓全盘负责,即是当一个 classloader 加载一个 Class 的时候,这个 Class 所依赖的和引用的所有 Class 也由这个 classloader 负责载入,除非是显式的使用另外一个 classloader 载入; 委托机制则是先让 parent(父)类加载器 (而不是 super,它与 parent classloader 类不是继承关系)寻找,只有在 parent 找不到的时候才从自己的类路径中去寻找。 此外类加载还采用了 cache 机制,也就是如果 cache 中保存了这个 Class 就直 接返回它,如果没有才从文件中读取和转换成 Class,并存入 cache,这就是为 什么我们修改了 Class 但是必须重新启动 JVM 才能生效的原因。 
 
137、详细阐述一下 Collection 接口所包含的内容 ?

答:List:有序允许重复存放

ArrayList----按顺序存放数据的数组

LinkList-----按顺序存放数据的链表

Vector-------线程安全的按顺序存放数据的数组 Set:无序不允许重复存放

HashSet---根据 HashCode()和 equals()方法来判断是否有重复 SortedSet:有序

TreeSet------通过实现 Comparable 接口和 Comparator 接口而具有排序功 能的集合  
 
138、请说出集合类中 List、Map、Set 的区别

答:List 和 Set 继承了 Collection 接口,而 map 不是;List 中存放元素有顺序并 且可以重复;set 中存放的元素是无序并且是不可能重复的;Map 中存放是键值 对。 
 
139、请说出你所知道的线程同步的方法。

答:wait():使一个线程处于等待状态,并且释放所持有的对象的 lock;     sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方 法要捕捉 InterruptedException 异常;     notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候, 并不能确切的唤醒某一个等待状态的线程,而是由 JVM 确定唤醒哪个线程,而且 不是按优先级;     notityAll():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一 个对象的锁,而是让它们竞争。 
 
140、Collection 和 Collections 的区别?

答:Collection 是 java.util 下的接口,它是各种集合的父接口,继承于它的接口 主要有 Set 和 List;Collections 是个 java.util 下的类,是针对集合的帮助类,提 供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 
 
141、HashMap 与 TreeMap 的区别?

答:HashMap 通过 hashcode 对其内容进行快速查找,而 TreeMap 中所有的元素 都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap 中元素的排列顺序是不固定的)。 
 
142、ArrayList 和 Vector 的区别?

答:同步性:Vector 是线程安全的,也就是说是同步的,而 ArrayList 是线程不安 全的,不是同步的;数据增长:当需要增长时,Vector 默认增长为原来一培,而 ArrayList 却是原来的一半。 
 
143、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 的一个实现。 最大的不同是,Hastable 的方法是 synchronize 的,而 HashMap 不是,在多个 线程访问 Hashtable 时,不需要自己为它的方法实现同步,而 HashMap 就必须 为之提供外同步。 
 
144、OOAD 中的 Association、Aggregation、Composition 的区别?

答:三者从概念上来讲:Association 是一般的关联,有”use-a”的含义。 Aggregation 和 Composition 都有整体和部分的关系,其中 Aggregation 中的部 分脱离了整体,部分仍然有意义,有”has a”的含义,是共享式的。而 Composition 中的部分脱离了整体,部分将没有任何意义,是独占式的。      从代码实现的角度上讲:三者都是以属性出现,其中 Association 中作为属 性出现时,不需要对其进行强制赋值,只要在使用是对其进行初始化即可。 Aggregation 中作为属性出现时,需要在构造器中通过传递参数来对其进行初始 化。Composition 中  作为属性出现时,需要在整体的构造器中创建部分的具体 实例,完成对其的实例化。      从数据库的层面上来讲:Association 不需要被级联删除,Aggregation 不 需要被级联删除,Composition 是需要被级联删除的。  
 
145、j2ee 常用的设计模式?说明工厂模式? 
答:Java 中的 23 种设计模式:

Factory(工厂模式), Builder(建造模式),Factory Method(工厂方法模式),Prototype(原始模型模式),Singleton(单例模式),Facade(门面模式), Adapter(适配器模式),Bridge(桥梁模式),Composite(组合模式), Decorator(装饰模式),Flyweight(享元模式),Proxy(代理模式),Command(命令模式),Interpreter(解释器模式),Visitor(访问者模式), Iterator(迭代器模式),Mediator(调停者模式),Memento(备忘录模式), Observer(观察者模式),State(状态模式),Strategy(策略模式), Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)
工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根 据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父 类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首 先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需 要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实 例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。 
 
146、请说出 ArrayList,Vector, LinkedList 的存储性能和特性

答:ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存 储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素 要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector 由于使 用了 synchronized 方法(线程安全),通常性能上较 ArrayList 差,而 LinkedList 使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数 据时只需要记录本项的前后项即可,所以插入速度较快。 
 
147、JAVA 中常用的 XML 解析技术有哪些?区别是什么?

答: DOM、SAX 两种方式。

DOM:处理大型文件时其性能下降的非常厉害。这个问题是由 DOM 的树形结构所 造成的,该结构占用的内存较多,而且 DOM 必须在解析文件之前把整个文档载入 内存,适合对 XML 的随机访问。

SAX:不同于 DOM,SAX 是事件驱动型的 XML 解析方法。它顺序读取 XML 文件,不 需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标 签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理 XML 文件,适合对 XML 的顺序访问。 
 
148、XML 文档定义有几种形式?有何本质区别?

答:两种形式 dtd 和 schema,区别:

a.Schema 是标准的 XML 文件,而 DTD 则使用自己的特殊语法,因此,只需要知 道 XML 的语法规则就可以编写 Schema 了,不需要再学习其它语法规则。 b.Schema 利用命名空间将文件中特殊的节点与 Schema 说明相联系,一个 XML 文件可以有多个对应的 Schema;而一个 XML 文件只能有一个相对应的 DTD 文件。

c.Schema 的内容模型是开放的,可以随意扩充,而 DTD 则无法解读扩充的内 容.DTD 只能把文件类型定义为一个字符串,而 Schem 允许把文件类型定义为整数, 浮点数,字符串,布尔值或其他各数据类型,而无须重新定义。

https://mp.weixin.qq.com/s/ab251eErDR_7k7IrOOLvXw

javaSE(71-148)相关推荐

  1. python画玫瑰花的代码_python绘制玫瑰的实现代码

    今天为大家介绍一个Python绘制一朵漂亮的玫瑰花,用python的turtle库这个绘画库是非常简单的,但是还是需要你测试路径方向,慢慢调试,下面的代码具有一定的参考价值 利用python绘制一朵玫 ...

  2. Fast Flux技术——本质就是跳板,控制多个机器,同一域名指向极多的IP(TTL修改为0),以逃避追踪...

    转自:http://ytuwlg.iteye.com/blog/355718 通过病毒邮件和欺诈网站学到的对付网络封锁的好东西:Fast Flux技术  收到一封邮件,引起我的好奇了: 邮件标题是:H ...

  3. 用python画玫瑰花代码-python绘制玫瑰的实现代码

    今天为大家介绍一个Python绘制一朵漂亮的玫瑰花,用python的turtle库这个绘画库是非常简单的,但是还是需要你测试路径方向,慢慢调试,下面的代码具有一定的参考价值 利用python绘制一朵玫 ...

  4. hdu 4279 Number

    代码如有错,请指出 找规律题... 打的表如下: View Code n 满足有公因子且不整除的数的个数 满足为奇数的个数(要求的答案) 1 0 0 2 0 0 3 0 0 4 0 0 5 0 0 6 ...

  5. 用python画玫瑰花-python绘制玫瑰的实现代码

    今天为大家介绍一个Python绘制一朵漂亮的玫瑰花,用python的turtle库这个绘画库是非常简单的,但是还是需要你测试路径方向,慢慢调试,下面的代码具有一定的参考价值 利用python绘制一朵玫 ...

  6. 清华2021计算机学院复试,清华大学2021年硕士研究生复试名单汇总(持续更新中)...

    清华大学2021年硕士研究生复试名单汇总已出来,下面金程考研小编整理了:清华大学2021年硕士研究生复试名单汇总 (持续更新中),希望对同学有帮助~ 加小助手微信(备注网校)jckyyxm领取历年考研 ...

  7. oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等)

    oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等) oracle 字符集 GBK 没有问题 , UTF -8 需要修改一下 1.获得全拼 SELECT GETHZPY.GETHZFULLPY( ...

  8. 数据结构(Java)-排序算法-选择排序

    选择排序: 选择排序也是一种简单的排序方法.它的基本思想是: 对于总共n个元素的数组arr: 第一次从arr[0]~arr[n-1]中选取最小值,与arr[0]交换, 第二次从arr[1]~arr[n ...

  9. 根据用户名字刷账户(取用户名的字母)

    最近由于手动创建用户过于繁琐,就写了个存储过程根据用户名字刷账户. 过滤多余的部分 由于一些名字代有别称,会有一些"("类的符号,所以需要过滤.这里如果有"(" ...

  10. 汉字转拼音函数 linux,oracle 汉字转拼音

    1.要有创建过程.函数的权限 -- grant create procedure to user; 2.在命令窗口中,执行以下语句,创建包 CREATE OR REPLACE package GetH ...

最新文章

  1. jQuery和dom的相互转换
  2. HashTab---Windows资源管理器的文件属性窗口中添加了一个叫做”文件校验”的标签...
  3. SQL优化--inner、left join替换in、not in、except
  4. pytorch几种损失函数CrossEntropyLoss、NLLLoss、BCELoss、BCEWithLogitsLoss、focal_loss、heatmap_loss
  5. spring+mybatis实现读写分离
  6. 郑州it java_郑州Java网站开发
  7. ABAP术语-World Wide Web
  8. JQuery判断元素是否存在
  9. 块裁剪后的矩形边界如何去掉_如何3分钟剪辑出满意的视频号视频?
  10. 图片处理和验证码识别
  11. 必须安装三星系列android系统智能手机usb驱动程序,三星usb手机驱动
  12. linux系统 安装hp驱动怎么安装,Ubuntu 8.04 下安装HP LaserJet 1020 打印机驱动程序步骤...
  13. 计算机主机的储存,电脑截屏保存在哪里 电脑截屏保存位置【图文】
  14. 早期日语笔记----日语从入门到入土笔记
  15. Android 本地化翻译插件,解放你的双手! AndroidLocalizePlugin
  16. 谷歌学术上不了的解决办法
  17. 数据中台建设方案-基于大数据平台(下)
  18. 计算机实用教学,【实用】计算机教学工作计划3篇
  19. python与金融工程的区别_科研进阶 | 纽约大学 | 金融工程、量化金融、商业分析:Python金融工程分析...
  20. 项羽ol网站服务器,《项羽OL》今日开服 全新新服务器“巨鹿之战”开启

热门文章

  1. 速锐得解码东风雪铁龙CAN网特点及休眠唤醒应用于驾培驾考
  2. windows中常见后门持久化方法总结
  3. alpha因子常见问题_多因子模型是否真的可以带来阿尔法(alpha)?
  4. 【Spring】共性问题(九)
  5. Typescript 2+迷你书 :从入门到不放弃
  6. win10引导安卓x86_手把手给你传授win10系统安卓模拟器使用的处理方法
  7. 今日头条广告如何优化?这四个思路至关重要
  8. 医院招聘sass管理软件解决方案分析(2)
  9. for..in和for ..of的用法
  10. Win10自带杀毒功能如何打开