一. java语言基础:html
1、合法标识符:java
答:以字母,“_”,“$“符号开头,能够包含字母,“_”,“$“和数字;编程
2、八大类型以及各类整数类型的取值范围:数组
答:byte 8位(-2^7~2^7-1)、short 16位(-2^15~2^15-1)、int 32位(-2^31~2^31-1)、long 64位(-2^63~2^63-1)缓存
float 32位单精度浮点数、double 64位双精度浮点数、boolean、char单一的 16 位 Unicode 字符等;安全
在把容量大的类型转换为容量小的类型时必须使用强制类型转换;服务器
转换过程当中可能致使溢出或损失精度;网络
char型变量中能不能存贮一个中文汉字?为何?数据结构
答:是可以定义成为一个中文的,由于java中以unicode编码,一个char占16个字节,因此放一个中文是没问题的。函数
3、&(位运算符)与&&(关系运算符)区别:
答:&比较两个二进制是否为1;而&&比较两边是否为true,只有两边都为true时才为true;
4、if与else语句:
答:一个判断中能够有多个if、if else语句,可是只能有一个else;else能够没有;
5、switch里面数据类型包括:
答:整型(byte,short,int),char,枚举(重点);
int i = 5; switch(i){ case 0: System.out.println("0");break; case 1: System.out.println("1");break; case 2: System.out.println("2");break; default: System.out.println("default");break; }
default能够放在中间吗?多个case能够共用一条语句;
能够,可是通常default放在最后
6、while循环:
答:当while内条件为true时,循环继续执行,当while内条件为false时才退出循环;若一开始就为false时程序只执行do范围内语句一次;
Given:
10.int x=0;
11.int y=10;
12. do {
l3. y--;
14. ++x;
15. } while (x < 5);
16. System.out.print(x + "," + y);
Answer:5,5
7、break与continue区别:
答:continue是退出本次循环,继续下一次循环,而break是退出整个循环体;
8、关于可变长参数:
答:a、参数列表中最多只能出现一次可变长参数;
b、若是参数中包含多个参数的话,那么可变长参数只能出如今最后面的位置;
c、可变长参数可实现方法的重载(重点);
public class Demo {
public static int sum(int n, int... nums) {
for (int i = 0; i < nums.length; i++) {
n = n + nums[i];
}
return n;
}
public static void main(String[] args) {
int s1 = sum(1, 2);
int s2 = sum(1, 2, 3);
int s3 = sum(1, 2, 3, 4);
int s4 = sum(1, 2, 3, 4, 5);
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
System.out.println(s4);
}
}
9、静态常量初始化两种方式:
答:静态常量必须显示的初始化;a、经过构造器进行初始化,b、只能用静态代码块初始化;
public class Test{
public static String a="";
public Test(){a="1";//后初始化};
static{a="2";//先初始化}
}
十、Java初始化顺序(静态变量、静态初始化块、实例变量、实例初始化块、构造方法);A继承B,A是子类,B是父类(基类);成员变量不继承;
父类静态成员--子类静态成员;
父类静态初始化块--子类静态初始化块;
父类实例成员和实例初始化块--父类构造方法;
子类实例成员和实例初始化块--子类构造方法;
11、不一样访问修饰符对类成员的访问范围:
当前类 |
同一package |
子孙类 |
其余package |
|
public |
√ |
√ |
√ |
√ |
protected |
√ |
√ |
√ |
× |
friendly(不写时默认) |
√ |
√ |
× |
× |
private |
√ |
× |
× |
× |
12、String 和stringBuffer的区别:
答:String建立的字符串不能修改;而stringBuffer定义的字符串能够修改;
new String("hello")建立了几个对象?
答案:建立了两个对象
String temp="hello";//在常量池中
String str=new String(temp);//在堆上
13、final, finally, finalize的区别。
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。String类便是final类;
finally是异常处理语句结构的一部分,表示老是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,能够覆盖此方法提供垃圾收集时的其余资源回收,例如关闭文件等。
14、int 和 Integer 有什么区别?
答:a、Integer是对象类型,而int是基本数据类型;
b、类能够是null,但基本数据类型不能为空;
17、Math.round(11.5)等于多少? Math.round(-11.5)等于多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;Math.round(-11.6)返回(long)-12;
正数:小数点后第一位>=5,+1;负数,小数点后第一位>5;+1;
18、怎样将浮点数(float)相加 ? Float 好像没有办法?
答:请注意 float 和 Float 是不一样的,前者是 Java 基本类型之一, 然后者倒是class。您应该将源代码改成:
float One;
float Two;
float Hard = One + Two;
或
Float One = new Float(1.0);
Float Two = new Float(2.0);
Float Hard = new Float(One.floatvalue() + Two.floatvalue());
19、如何将字串String转换成整数int?
答:1)int i = Integer.parseInt(“String”);
20、如何将整数 int 转换成字串 String?
有三种方法:
1)String s = String.valueOf(i);
2)String s = Integer.toString(i);
3)String s = "" + i;
21、什么是J2EE,J2SE,J2ME?
答:J2SE主要用于开发界面平台软件的;
J2ME主要用于开发嵌入式程序,如:手机软件程序等;
J2EE主要是基于WEB服务器的开发B/S结构企业级程序;
22、Java中的属性和字段有什么区别?
答:Java中的属性,一般能够理解为get和set方法。而字段一般叫作“类中定义的成员变量”。
23、值类型与引用类型变量的区别?
答:值类型变量是基本数据类型的一个变量;而引用类型变量是一个对象类型引用的变量;
24、隐式参数与显示参数?
答:显示参数是明显列在方法声明中,而隐式参数没有出如今方法声明中;
隐式参数,如,关键字this;
this表明对象的引用(谁调用就表明谁);
super表明当前子类对父类的引用。
25、什么是实例域、实例、实例变量?
答:实例域就是指定义类时的最外层的那两个大括号那个范围。
实例就是你new出来的类的对象引用。
实例变量:private(访问修饰符) int(数据类型) a(实例变量)=0;
实例变量不能标识为 abstract、synchronized 、native 或 strictfp。不能用JAVA关键字
26、什么是标识符、修饰符、访问修饰符?
(1)标识符:“_”、“$”
(2)修饰符:final、synchronized、abstract、
(3)访问修饰符:public、protected、default、private
27、一个类在new后,其静态代码块会执行吗?
答:一个类在new的时候即执行其静态代码块;执行完毕以后不会再执行;
二.类/接口/枚举/封装类:
1、一个类为何要作成抽象类?接口?
答:a、减小代码的重复;b、解耦合;
接口与抽象类:一个类实现接口必须实现接口全部方法,而继承抽象类只需实现抽象方法,非抽象方法可不实现,这样就减小了这个类不须要的代码的重写性;
2、匿名内部类是否能够继承其余类,是否能够实现接口?
答:匿名内部类必须扩展一个基类或实现一个接口,可是不能有显式的继承和实现子句;
三、静态内部类与普通内部类区别:
答:a、静态内部类实例化的时候没必要先实例化外围类,能够直接实例化内部类,而对于非静态内部类必须先实例化其外部类,才能再实例化自己;
b、静态内部类没有了指向外部类的引用;
c、在任何非静态内部类中,都不能有静态数据、方法、静态类等;
四、为何须要使用内部类呢?其主要缘由有如下三点:
答:a、内部类方法能够访问该类定义所在的做用域中的数据,包括私有的数据。
b、内部类能够对同一个包中的其余类隐藏起来。
c、当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。
三.面向对象编程:
1、请问java的三大特性是什么?它们各有什么特色?
答:a、封装:将一个类的成员属性设置成私有的,再提供get和set方法供外部访问;即这样的封装类不会被外界所改变,只能给外界使用;
b、继承:一个子类继承一个父类,继承父类中全部方法,不能继承父类中成员变量;子类自己又能够有另外的方法,即子类具备可扩展性特性;
c、多态(重写):两种,一种是重写,重写就是子类重写父类中方法(方法名、返回类型(子类的返回类型必须相同或是父类返回类型的子类)和参数类型必须一致);
另一种是重载,重载是在一个类中的方法名相同,参数类型必须不一样(或它们有不一样的参数个数),返回类型能够相同,能够不一样;
2、类与对象之间的关系:
答:a、关联:一个类受另一个类影响,一个Driver类里面只跟一个Car类变量,即在Driver类中的方法内传一个car属性对象,强耦合关系;
b、依赖:一种使用关系,很弱的一种耦合。driver开几种类型的车,即重载,drive(plane);drive(car);这个时候drive与plane的关系即为依赖关系;
c、聚合:聚合关联 Aggregation:弱'拥有'关系,A对象能够包含B对象,但B不是A的一部分;
d、组合:是一种强的‘拥有’关系,体现严格的部分和总体的关系,
e、泛化:继承
f、实现:接口
3、类与对象间的结构关系:
纵向关系:泛化(包括类继承、接口继承、实现)
横向关系:关联(包括通常关联、聚合、组合)
什么是OOP?什么是类?请对比类和对象实例之间的关系。OOP是面向对象编程缩写。指的是用对象的观点来组织与构建系统,对象是类的实例化。对象一般做为计算机模拟思惟,表示真实世界的抽象。类是静态的,对象是动态的,类负责产生对象,能够将类当成生产对象的工厂。
6、UML图分几类?
答:经常使用的UML图:
A、用例图:帮助开发团队以一种可视化的方式了解系统功能需求,好比:角色与用例之间关系;
B、 类图:三部分描述,上面是类名、中间是属性、下面是方法;完整的类图,应该具备指向其父类关系,而且具备与之关联的部分;
C、 时序图:显示不一样对象之间的调用关系;
D、状态图:某个类所处的不一样状态或者是该类的状态转换信息:
E、 活动图:表示在处理某个活动时,两个或者更多类对象之间的过程控制流。
F、 组件图:显示系统中软件与其余软件的依赖关系:
G、部署图表示该软件系统如何部署到硬件环境中。
静态(系统结构):用例图、类图、对象图、组件图、部署图
动态(系统行为):时序图、协做图、状态图、活动图
五.I/O流:
1、在Java语言中,如何列出PC机文件系统中的全部驱动器名?
答:在Java 2版本中,java.io包中的File类新增长了方法listRoots()能够实现这一功能;
2、IO流的三种分类方式:
a.按流的方向分为:输入流和输出流;
b.按流的数据单位不一样分为:字节流和字符流;
c.按流的功能不一样分为:节点流和过滤流;
三、IO流的四大抽象类:
(1)字节流:
InputStream(读数据):全部字节输入流的祖先;(从外部读取文件数据到程序中)
OutputStream(写数据):全部字节输出流的祖先;(将程序中的数据输出到外部文件中)
(2)字符流:Reader:全部读取字符输入流的祖先;
Writer :全部写入字符串的祖先;
4、文件读写的基本类:
(1)、读取字节流:
文件àFileInputStreamàBufferedInputStreamàDataInputStreamà数据;
(2)、写入字节流:
数据à DataOutputStream à BufferedOutputStream à FileOutputStream à文件;
(3)、该程序接受键盘输入(从键盘读取数据):
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String str=in.readLine();
(4)、写入字符流:
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("C:\\test.txt")));
out.write(“dagdagd”);
六.集合和泛型
1、说出ArrayList,Vector, LinkedList的存储性能和特性
答:ArrayList,Vector, 查询数据快,插入慢,Vector是线程安全的,LinkedList查询数据慢,插入速度快;list有序可重复;set不可重复且无序;
2、Collection 和 Collections的区别
答:Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各类集合的搜索、排序、线程安全化等操做。
3、HashMap和Hashtable的区别。
答:HashMap是线程不安全的,容许有null的key值或者value值;
Hashtable是线程安全的,不容许空key和value值;
4、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==仍是equals()? 它们有何区别?
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。而==是判断两个值是否相等的;
5、遍历一个list
for(int i=0;i <list.size();i++)
for(Object o:list)
Iterator it=list.iterator()
for(;it.hasNext();)
Set set = new HashSet(list);
for(Iterator it=set.iterator();it.hasNext();)
{ Object o = it.next; System.out.println(o.toString());}
List<Object> list
for(Object foo : list){
String className = foo.getClass().getClassName;
System.out.println(foo);
}
六、 String传值,
public class Test {
public static void change(String str){
str="123";
}
public static void main(String args[]) {
String abc = new String("abc");
Test.change(abc);
System.out.println(abc); }
输出:abc
由于这两个函数均可以重写;彻底能够hashcode相等的对象而equals确返回false;重写hashCode是为了集合类存储这些对象的时候有个比较规则;好比Map不容许重复元素,就是经过hashCode来检测的;可是hashcode的实现,通常要知足几个特征,好比:自反性,传递性什么的。
8.java泛型中的E,T,K,V,U,S
E - Element (在集合中使用,由于集合中存放的是元素)
T - Type(Java 类)
K - Key(键)
V - Value(值)
N - Number(数值类型)
? - 表示不肯定的java类型
9.认识理解Java中的native方法
Java不是完美的,Java的不足除了体如今运行速度上要比传统的C++慢许多以外,Java没法直接访问到操做系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。在java中native是关键字。它通常在本地声明,异地用C和C++来实现。它的声明有几点要注意:
1)native与访问控制符先后的关系不受限制。
2)必须在返回类型以前。
3)它通常为非抽象类方法。
4)native方法在异地实现,象抽象方法同样,因此没有方法体,以分号结束。以下列5种声明:
native public void f(); 正确。
private native void f(); 正确。
protected int native f(); 错误,返回类型位置不对,返回类型必须在native以后。
public abstract native void f(); native必然不是abstract的。
native int f(){} 错误,由于存在方法体{}
public static native f(); 正确。static与native方法位置随意。
Ingeter是int的包装类,int的初值为0,Ingeter的初值为null。 int是数据类型;
Integer i = 1;int ii = 1; i==ii为true仍是为false?
public static void main(String[] args) { 13 int i = 128; 14 Integer i2 = 128; 15 Integer i3 = new Integer(128); 16 //Integer会自动拆箱为int,因此为true 17 System.out.println(i == i2); 18 System.out.println(i == i3); 19 System.out.println("**************"); 20 Integer i5 = 127;//java在编译的时候,被翻译成-> Integer i5 = Integer.valueOf(127); 21 Integer i6 = 127; 22 System.out.println(i5 == i6);//true 23 /*Integer i5 = 128; 24 Integer i6 = 128; 25 System.out.println(i5 == i6);//false 26 */ Integer ii5 = new Integer(127); 27 System.out.println(i5 == ii5); //false 28 Integer i7 = new Integer(128); 29 Integer i8 = new Integer(123); 30 System.out.println(i7 == i8); //false 31 } 首先,17行和18行输出结果都为true,由于Integer和int比都会自动拆箱(jdk1.5以上)。 22行的结果为true,而25行则为false,不少人都不动为何。其实java在编译Integer i5 = 127的时候,被翻译成-> Integer i5 = Integer.valueOf(127);因此关键就是看valueOf()函数了。只要看看valueOf()函数的源码就会明白了。JDK源码的valueOf函数式这样的: 看一下源码你们都会明白,对于-128到127之间的数,会进行缓存,Integer i5 = 127时,会将127进行缓存,下次再写Integer i6 = 127时,就会直接从缓存中取,就不会new了。因此22行的结果为true,而25行为false。
11. IP协议属于()层。
应用层
数据链路层
网络互联层
传输层
答案:C
IP协议是网络层协议
A,应用层协议有http ftp smtp pop3 等
B,数据链路层协议有PPP ARP RARP等
D,传输层协议有TCP UDP
12.十六进制数30转换成二进制数是()
110000
100000
111000
101010
答案:A
十六进制转换为二进制快捷的方法是将每个十六进制字符转换成4个二进制字符,不足4个的前面补零
3转换为二进制是0011,0转换为二进制是0000
合起来就是00110000
将前面两个无用的0去掉就是110000
13.List<? extends T>和List<? super T>之间有什么区别?
List<? extends T>要求List中的泛型对象只能够是T或者T的子类对象
List<? super T>要求List中的泛型对象只能够是T或者T的父类对象
14.对于IP地址为200.5.6.3,属于()类
A
B
C
D
答案:C
第一字节范围1到127属于A类IP
第一字节范围128到191属于B类IP
第一字节范围192到223属于C类IP
15. 某系统中有11台打印机,N个进程共享打印机资源,每一个进程要求3台,当N的取值不超过()时系统不会发生死锁。
4
5
6
7
答案:B
不发生死锁的条件是至少能保证一个进程能得到三台打印机资源。
最坏的状况是1个进程获取三台打印机资源,另外N-1个进程获取到两台打印机,等待获取第三台。
3+(N-1)*2=11
N=5
一、java类自带排序:
组成int数组,再调用Arrays.sort(int[] a)实现升序;降序可从尾部开始输出;
二、方法二:重复for循环比较两值大小存入ArrayList中;
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。能够对流化后的对象进行读写操做,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操做时所引起的问题。
序 列化的实现:将须要被序列化的类实现Serializable接口,该接口没有须要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,而后使用一个输出流(如:FileOutputStream)来构造一个 ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就能够将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
18.数据结构有哪些
集合、线性结构、树形结构、图状结构