首页 课程 师资 教程 报名

15道基础Java编程面试题

  • 2020-10-15 17:00:17
  • 2636次 动力节点

在现在的互联网大环境下,程序员和工程师的职位需求在提高,相应的想投入到工程师行业的人也在变多,所以很多大公司对于面试工程师职位的人要求也在逐渐提高,但是在java面试中,面试官着重考察的还是基础知识是否扎实,基础java编程面试题是在面试前必须要做的功课,下面整理了15道基础java编程面试题,有要参加java面试的朋友们可以学习下面的内容。

image.png

1、java语言层次安全性表现在哪里?

答:Java取消了强大但又危险的指针,而代之以引用。由于指针可进行移动运算,指针可随便指向一个内存区域,而不管这个区域是否可用,这样做是危险的,因为原来这个内存地址可能存储着重要数据或者是其他程序运行所占用的,并且使用指针也容易数组越界。

垃圾回收机制:不需要程序员直接控制内存回收,由垃圾回收器在后台自动回收不再使用的内存。避免程序忘记及时回收,导致内存泄露。避免程序错误回收程序核心类库的内存,导致系统崩溃。

异常处理机制:Java异常机制主要依赖于try、catch、finally、throw、throws五个关键字。

强制类型转换:只有在满足强制转换规则的情况下才能强转成功。

2、JDK、JRE、JVM三者关系是什么?

答:jdk是JAVA程序开发时用的开发工具包,其内部也有JRE运行环境JRE。JRE是java程序运行时需要的运行环境,就是说如果你光是运行JAVA程序而不是去搞开发的话,只安装JRE就能运行已经存在的JAVA程序了。JDk、JRE内部都包含java虚拟机JVM,java虚拟机内部包含许多应用程序的类的解释器和类加载器等等。

3、if多分支语句和switch多分支语句的异同点?

答:相同之处:都是分支语句,多超过一种的情况进行判断处理。

不同之处:switch更适合用于多分支情况,就是有很多种情况需要判断处理,判断条件类型单一,只有一个入口,在分支执行完后(如果没有break跳出),不加判断地执行下去;而if—elseif---else多分枝主要适用于分支较少的分支结构,判断类型不是单一,只要一个分支被执行后,后边的分支不再执行。switch为等值判断(不允许比如>= <=),而if为等值和区间都可以,if的使用范围大。

4、&和&&的区别和联系

答:&和&&的联系:&和&&都可以用作逻辑与运算符,但是要看使用时的具体条件来决定。操作数1&操作数2,操作数1&&操作数2,表达式1&表达式2,表达式1&&表达式2。

情况1:当上述的操作数是boolean类型变量时,&和&&都可以用作逻辑与运算符。

情况2:当上述的表达式结果是boolean类型变量时,&和&&都可以用作逻辑与运算符。

表示逻辑与(and),当运算符两边的表达式的结果或操作数都为true时,整个运算结果才为true,否则,只要有一方为false,结果都为false。

&和&&的区别(不同点):&逻辑运算符称为逻辑与运算符,&&逻辑运算符称为短路与运算符,也可叫逻辑与运算符。无论任何情况,&两边的操作数或表达式都会参与计算。对于&&:当&&左边的操作数为false或左边表达式结果为false时,&&右边的操作数或表达式将不参与计算,此时最终结果都为false。

综上所述,如果逻辑与运算的第一个操作数是false或第一个表达式的结果为false时,对于第二个操作数或表达式是否进行运算,对最终的结果没有影响,结果肯定是false。

5、基本数据类型转换规则?

答:基本类型转换分为自动转换和强制转换。

自动转换规则:容量小的数据类型可以自动转换成容量大的数据类型,也可

以说低级自动向高级转换。这儿的容量指的不是字节数,而是指类型表述的范围。

强制转换规则:高级变为低级需要强制转换。如何转换:(1)赋值运算符“=”右边的转换,先自动转换成表达式中级别最高的数据类型,再进行运算。(2)赋值运算符“=”两侧的转换,若左边级别>右边级别,会自动转换;若左边级别 == 右边级别,不用转换;若左边级别 < 右边级别,需强制转换。(3)可以将整型常量直接赋值给byte, short, char等类型变量,而不需要进行强制类型转换,前提是不超出其表述范围,否则必须进行强制转换。

6、if多分支语句和switch多分支语句的异同之处在哪里?

答:相同之处:都是分支语句,多超过一种的情况进行判断处理。

不同之处:switch更适合用于多分支情况,就是有很多种情况需要判断处理,判断条件类型单一,只有一个入口,在分支执行完后(如果没有break跳出),不加判断地执行下去;而if—elseif---else多分枝主要适用于分支较少的分支结构,判断类型不是单一,只要一个分支被执行后,后边的分支不再执行。switch为等值判断(不允许比如>= <=),而if为等值和区间都可以,if的使用范围大。

7、while和do-while循环的区别是什么?

答:while先判断后执行,第一次判断为false,循环体一次都不执行;do while先执行 后判断,最少执行1次;如果while循环第一次判断为true, 则两种循环没有区别。

image.png

8、break和continue的作用?

答:break: 结束当前循环并退出当前循环体。break还可以退出switch语句。

continue: 循环体中后续的语句不执行,但是循环没有结束,继续进行循环条件的判断(for循环还会i++)。continue只是结束本次循环。

9、数组的特征都有什么?

答:数组是(相同类型数据)的(有序)(集合);

数组会在内存中开辟一块连续的空间,每个空间相当于之前的一个变量,称为数组的元素element;

每个数组元素有默认值 double 0.0 boolean false int 0;

数组元素有序的,不是大小顺序,是索引的顺序;

数组中可以存储基本数据类型,可以存储引用数据类型;但是对于一个数组而言,数组的类型是固定的,只能是一个;

length:数组的长度,数组的长度是固定的,一经定义,不能再发生变化(数组的扩容)。

10、一个数如果恰好等于它的因子之和, 这个数就称为”完数”,例如 6 = 1+2+3。编程找出0-1000以内的所有完数

public class WanShu {
    private static boolean isWanShu(int shu){
        int sum = 0;
        for (int i = 1; i < shu; i++) {
            if(shu%i==0){
                sum+= i;
            }
        }
        if(sum==shu){
            return true;
        }else{          
            return false;
        }  
    }
    public static void main(String[] args) {
        for (int i = 1; i < 1000; i++) {
            if(isWanShu(i)){
                System.out.println(i);
            };
        }
    }
}

11、下面程序输出的结果是(A)

static boolean foo(char c) {
        System.out.print(c);
        return true;
    }
public static void main(String[] args) {
        int i = 0;
        for (foo('A'); foo('B') && (i < 2); foo('C')) {
            i++;
            foo('D');
        }
} 

A. ABDCBDCB B. ABDCDBCB C. ABDBCDCB D. ABDBCDCB

解析:首先,必定是ABDC打头,排除C、D,随后执行foo('B') && (i < 2)这一项,结果为B,可得出结果为A。执行顺序--foo('A')--foo('B')&&true--foo('D')--foo('C')--foo('B')&&true--foo('D')--foo('C')--foo('B')&&false--end

12、当 n = 5 时,下列函数的返回值是:(A)

int foo(int n)
    {
        if(n<2)return n;
        return foo(n-1)+foo(n-2);
    }
A.5 B.7 C.8 D.1
解析:Result=foo(4)+foo(3)
foo(4)=foo(3)+foo(2)
foo(3)=foo(2)+foo(1)
foo(2)=foo(1)+foo(0)
foo(1)=1
foo(0)=0
所以foo(2)=1,foo(3)=2,foo(4)=3

13、写出插入排序的代码

:package com.bjsxt;
public class TestInsertSort {
public static void sort(int arr[]) {
int i, j;
for (i = 1; i < arr.length; i++) {
int temp = arr[i];
for (j = i; j > 0 && temp < arr[j - 1]; j--) {
arr[j] = arr[j - 1];
}
arr[j] = temp;
}
}
}

14、final、finally、finalize的区别?

答:final修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承例如:String类、Math类等。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重写,但是能够重载。 使用final修饰的对象,对象的引用地址不能变,但是对象的值可以变。

finally在异常处理时提供 finally 块来执行任何清除操作。如果有finally的话,则不管是否发生异常,finally语句都会被执行。一般情况下,都把关闭物理连接(IO流、数据库连接、Socket连接)等相关操作,放入到此代码块中。

finalize方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要清理工作。finalize() 方法是在垃圾收集器删除对象之前被调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。一般情况下,此方法由JVM调用,程序员不要去调用。

15、字符型常量和字符串常量的区别?

答:形式上:字符常量是单引号引起的一个字符;字符串常量是双引号引起的若干个字符。含义上:字符常量相当于一个整形值(ASCII值),可以参加表达式运算;字符串常量代表一个地址值(该字符串在内存中存放位置)。占内存大小:字符常量只占一个字节;字符串常量占若干个字节(至少一个字符结束标志)。

以上是今天为朋友们整理的基础java编程面试题,这15道题肯定不能说是有最全面的java编程知识,但肯定是基础的常考的内容,会有很大的出现在java面试中的概率,所以希望大家可以好好学上面的内容,再及时的通过java基础教程来学习更多的java知识。

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交