1.11.&和&&的区别?
参考答案:
&和&&都可以执行关系判断。二者的区别是:&运算是把逻辑表达式全部计算完,而&&运算具有短路计算的功能。所谓短路计算,是指系统从左到右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止。
1.12.写出Java中8种原始类型及其字节长度
参考答案:
类型名称 | 字节空间 | 说明 |
byte | 1字节(8位) | 存储1个字节的数据 |
short | 2字节(16位) | 兼容性考虑,一般不用 |
int | 4字节(32位) | 存储整数(常用) |
long | 8字节(64位) | 存储长整数(常用) |
float | 4字节(32位) | 存储浮点数 |
double | 8字节(64位) | 存储双精度浮点数(常用) |
char | 2字节(16位) | 存储一个字符 |
boolean | 1字节(8位) | 存储逻辑变量(true、false) |
1.13.请描述一下JVM加载class文件的原理机制
参考答案:
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。
1.14.你对软件开发中迭代的含义的理解
参考答案:
软件开发中,各个开发阶段不是顺序执行的,而各个阶段都进行迭代,然后进入下一个阶段的开发。这样对于开发中的需求变化,及人员变动都能得到更好的适应。
1.15.什么是进程
参考答案:
进程是操作系统结构的基础,是一个计算机中正在运行的程序实例。可以分配给处理器并由处理器执行的一个实体,由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元。
1.16.什么是垃圾回收?什么时候触发垃圾回收?如何降低垃圾回收的触发频率?它能保证程序由足够的可用内存吗?
参考答案:
第一问:
垃圾回收(GC)是Java语言的一个重要特性,作用是释放不再被使用的内存。
第二问:
垃圾回收是由系统进行管理。在系统认为需要的时候自动启动一个线程进行护理。
第三问:
尽量减少垃圾内存,也就是新建对象的数量,可以降低垃圾回收的频率。
第四问:
垃圾回收机制无法保证有足够的内存。
1.17.Java中会存在内存泄漏吗,请简单描述?
参考答案:
会存在内存泄漏。
一般来说内存泄漏有两种情况。一是堆中分配的内存,在没有将其释放掉的时候,就将所有能访问这块内存的方式都删掉;另一种情况则是在内存对象已经不需要的时候,还仍然保留着这块内存和它的访问方式(引用)。第一种情况,在Java中已经由于垃圾回收机制的引入,得到了很好的解决。所以,Java中的内存泄漏,主要指的是第二种情况。
下面给出了一个简单的内存泄漏的例子。在这个例子中,我们循环申请Object对象,并将所申请的对象放入一个List中,如果我们仅仅是放引用本身,那么List仍然引用该对象,所以这个对象对GC来说是不可回收的。代码如下所示:
List list = new ArraryList(10);
for (int i = 1; i < 100; i++){
Object o = new Object();
list.add(o);
o = null;
}
此时,所有的Object对象都没有被释放,因为变量list引用这些对象。
1.18.Java源文件中是否可以包括多个类,有什么限制?
参考答案:
一个Java源文件中可以包含多个类,每个源文件中至多有一个public类,如果有的话,那么源文件的名字必须与之相同。如果源文件中没有public类,则源文件用什么名字都可以,但最好还好具有特定的意义,免得自己都不记得里面写的是什么了。一般建议一个源文件中只写一个Java类。
1.19.列出自己常用的jdk包
参考答案:
常用的JDK包如下:
1.java.lang包:这个包中包含了JDK提供的基础类,比如String等都是这里面的,这个包是唯一一个不用导入就可以使用的包;
2.java.io包:这个包中包含了与输入输出相关的类,比如文件操作等;
3.java.net包:这个包中包含了与网络有关的类,比如URL,URLConnection等;
4.java.util包:这个是系统辅助类,特别是集合类Collction,List,Map等;
5.java.sql包:这个是数据库操作的类,Connection,Statement,ResultSet等。
1.20.简单说明什么递归?什么情况会使用?并使用Java实现一个简单的递归程序?
参考答案:
1.递归作为一种算法在程序设计语言中广泛应用,是指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象。
2.递归算法一般用于解决三类问题:
1)数据的定义是递归定义的。(fibonacci(斐波那契)函数)
2)问题解法按递归算法实现。(回溯)
3)数据的结构形式是按递归定义的。(数的遍历,图的搜索)
3.下面是使用递归算法实现计算某个整数在二进制中的个数,代码如下所示:
/**
* 计算二进制中1的个数
* N为奇数,二进制中1的个数等于N/2的个数
* 例子:
* num=13
* 1.getBinary(13/2=6)+1;
* 2.getBinary(6/2=3)+1;
* 3.getBinary(3/2=1)+1+1;
* 4.getBinary(1)+1+1; getBinary(1)返回1,与后边两个1相加得结果3
*/
public static int getBinary(int num){
if (num == 1){
return 1;
}
if (0 == num % 2){ // 是否为偶数
return getBinary(num / 2);
} else {
return getBinary(num / 2) + 1;
}
}