科多大数据培训
全国24小时免费热线
15328019568
联系QQ
3048661160
开班时间
当前位置:首页 > 学习资讯 >

大数据资讯之JAVA基础语法面试真题

大数据的发展势头是蒸蒸日上,不少小伙伴想要转行大数据却不知道自己到底够不够格。JAVA作为大数据的基础技能,是转行大数据的必要条件。有JAVA开发经验的人可以更快地跳转大数据

大数据的发展势头是蒸蒸日上,不少小伙伴想要转行大数据却不知道自己到底够不够格。JAVA作为大数据的基础技能,是转行大数据的必要条件。有JAVA开发经验的人可以更快地跳转大数据发展方向。今天为大家带来了面试真题的第二弹——JAVA基础语法。快来检测一下你的JAVA学的够不够扎实。

 

大数据资讯之JAVA基础语法面试真题

(共60分,每题3分)

1、关于Java编译,下列语句哪一个正确

A. Java程序经编译后会产生machine code 

B. Java程序经编译后会产生byte code 

C. Java程序经编译后会产生DLL

D.  以上都不正确

 

2、下面说法正确的是

A. class中的constructor不可省略

B. constructor必须与class同名,但方法不能与class同名

C. constructor在一个对象被new时执行 

D.  一个class只能定义一个constructor  

 

3、对于Java类型变量char c,short s,float f ,double d ,表达式c*s+f+d的结果类型为

A. float 

B. char

C. short

D. double 

 

4、JAVA中关于继承的描述不正确的是

A.  一个子类只能继承一个父类

B.  子类可以继承父类的构造方法

C.  继承具有传递性

D.  父类一般具有通用性,子类更具体

 

5、下列关于依赖注入(DI)说法错误的是

A.  只有通过Spring才能实现依赖注入(DI) 

B. 依赖注入的主要目的是解耦合

C. 常见的依赖注入方式有Setter和构造方法

D. 依赖注入指的是对象之间的关系在运行时由容器进行管理

 

6、在Java中允许创建多线程应用程序的接口是

A.  均不是 

B. Clonable

C. Runnable

D. Threadable 

 

7、下列不对的是

A. static方法可以是private的 

B. static方法可以是protected

C. static变量也可为final的

D. 一个实例方法可以同时为private和Abstract 

 

8、在Java中,关于PreparedStatement与Statement描述错误的是

A.  一般而言,PrepareStatement比Statement执行效率更高

B. PreparedStatement会预编译SQL语句

C. Statement每次都会解析、编译SQL,确立并优化数据获取路径

D. Statement执行扫描的结果集比PreparedStatement大

 

9、在Java程序中,(7<<1)& 15运算后的结果是

A. 15

B. 14

C. 8

D. 7 

 

10、对于一个已经不被任何变量引用的对象,当垃圾回收器准备回收该对象所占用的内存时,将自动调用该对象的哪个方法

A. finalize

B. notify

C. notifyAll

D. hashCode 

 

11、在类设计中,类的成员变量要求仅仅能够被同一package下的类访问,请问应该使用下列哪个修辞词

A. protected 

B. public

C. private

D. 不需要任何修辞词

 

12、关于异常处理机制的叙述正确的为

A. catch部分捕捉到异常情况时,才会执行finally部分

B.  当try区段的程序发生异常时,才会执行finally区段的程序

C.  不论程序是否发生错误及捕捉到异常情况,都会执行finally部分

D.  以上都是

 

13、提供Java存取数据库能力的包是

A. java.sql 

B. java.db

C. java.lang

D. java.util 

 

14、下列关于Java并发的说法之中正确的是

A. CopyOnWriteArrayList适用于写多读少的并发场景

B. ReadWriteLock适用于读多写少的并发场景

C. ConcurrentHashMap的写操作不需要加锁,读操作需要加锁

D.  只要在定义int类型的成员变量i的时候加上volatile关键字,那么多线程并发执行i++这样的操作的时候就是线程安全了

 

15、对于JVM内存配置参数:-Xmx10240m -Xms10240m -Xmn5120m-XX:SurvivorRatio=3,其最小内存值和Survivor区总大小分别是

A. 5120m,1024m

B. 5120m,2048m  

C. 10240m,1024m 

D. 10240m,2408m 

 

16、下面语句段的输出结果是什么

     int i = 9;

    switch (i) {

    default:

    System.out.println("default");

    case 0:

    System.out.println("zero");

    break;

    case 1:

    System.out.println("one");

    case 2:

    System.out.println("two"); }

A. default

B. default, zero

C. error default clause not defined

D. no output displayed

 

17、下面哪些语句含有语法错误

A. int a[][]=new int [5][5];

B. int [][]b=new int[5][5];

C. int []c[]=new int[5][5];

D. int [][]d=new int[5,5];

 

18、编译、运行如下代码,可能的结果

    class MyClass {

    public static void main(String args[]) {

    for(int i=0;i>5;i++){

    if (i==3) break;

    }

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

    }

    }

A. 编译错

B. 运行异常

C. 死循环

D. 输出i=3

 

19、编译、运行如下代码,可能产生的结果

    public class MyClass {

    public static void main(String arg) {

    System.out.println("Hello World");

    }

    }

A. 编译错

B. 无法运行:找不到main方法

C. 运行无输出

D. 输出:HelloWorld

 

20、编译、运行如下代码,有何结果

    public class MyClass {

    public static void main(String args[]){

    int anar[]=new int[5];

    System.out.println(++anar[0]);

    }

    }

A. 编译错

B. 运行异常

C. 1

D. null

 

 

答案解析:

1、B

2、C,这里可能会有误区,其实普通的类方法是可以和类名同名的,和构造方法唯一的区分就是,构造方法没有返回值。

3、D,数值计算时,如两个操作数类型不一致,需要先将类型转换为同一类型再进行计算。转换原则如下:     

1)如果一个操作数为double类型,则将另一个转为double;     

2)否则,如果一个操作数为float类型,则将另一个转为float;     

3)否则,如果一个操作数为long类型,则将另一个转为long;     

4)否则,两个操作数转为int;     

由上述规则得知题中表达式最后结果为double类型。此外,上述规则在不同编译器略有差别,如一个int和一个float相加,由于32位系统下都是4个字节存储,所以会给出warning或者error提示。

4、B,Java中的类继承为单继承(C++则允许多继承),一个子类只能拥有一个父类。子类的构造方法中应该调用父类的构造方法,而不是继承父类的构造方法。如果A是B的父类,B又是C的父类,那么A也是C的父类,即继承具有传递性。面向对象中,子类一般都是对父类的具体化,父类更抽象。

5、A,依赖注入(Dependency Injection),是这样一个过程:由于某客户类只依赖于服务类的一个接口,而不依赖于具体服务类,所以客户类只定义一个注入点。在程序运行过程中,客户类不直接实例化具体服务类实例,而是客户类的运行上下文环境或专门组件负责实例化服务类,然后将其注入到客户类中,保证客户类的正常运行。第一种依赖注入的方式,就是Setter注入。Setter注入(Setter Injection)是指在客户类中,设置一个服务类接口类型的数据成员,并设置一个Set方法作为注入点,这个Set方法接受一个具体的服务类实例为参数,并将它赋给服务类接口类型的数据成员。另外一种依赖注入方式,是通过客户类的构造函数,向客户类注入服务类实例。构造注入(Constructor Injection)是指在客户类中,设置一个服务类接口类型的数据成员,并以构造函数为注入点,这个构造函数接受一个具体的服务类实例为参数,并将它赋给服务类接口类型的数据成员。依赖注入是尽量减少各组件之间的相互依赖和制约,主要目的是解耦合。依赖注入是一种重要的面向对象编程的法则,可以由多种语言实现,并存在于多种框架中,A选项错误。

6、C, java多线程有3种方式实现:

1)继承Thread类,重写run函数;

2)实现Runnable接口,重写run函数;

3)实现Callable接口,重写call函数。

7、D, abstract关键字不能和final、private、static连用,原因是:     

1)final——因为abstract修饰的方法是必须在其子类中实现(覆盖),才能以多态方式调用,以上修饰符在修饰方法时,子类都覆盖不了这个方法,final是不可以覆盖。  

2)private——private类型的方法不能够被子类继承,所以也就不能覆盖。     

3)static——static类型的方法是可以覆盖的,且在调用时会调用编译时当前类的方法;若与abstract连用,在调用父类的方法时,按照abstract的要求会调用子类的方法,二者发生矛盾;所以static和abstract不能同时使用。

8、D,在Java中,Statement 和PreparedStatement用于在已经建立数据库连接的基础上向数据库发送要执行的SQL语句。Statement用于执行不带参数的简单SQL语句; PreparedStatement可以执行带参数的预编译SQL语句(选项B正确)。在执行同一个SQL语句时,PreparedStatement只对它进行一次的解析和编译,其后可以利用PreparedStatement对象高效地多次执行(选项A正确)。而对于Statement来说,每次执行同一个SQL语句时,Statement都会对它进行解析和编译(选项C正确)。但是二者的扫描结果集是一样的(选项D错误)。

9、B,在Java中,<<是左移运算符,7的二进制表示为111,左移一位为1110。&是按位与操作,15的二进制表示为1111,1110&1111的结果为1110,换算成十进制为14,因此最后结果为14。可以注意的是,左移1位相当于乘以2,右移一位相当于除以2。

10、A,垃圾回收机制是Java虚拟机(JVM)提供的主要用于不定时动态回收无任何引用对象所占的内存空间。在回收过程中,对象的finalize()方法会被垃圾回收器调用。notify()和notifyAll()方法用于唤醒正在等待的线程。hashCode()方法返回对象的哈希值,该值可以用于在散列存储结构中确定对象的存储地址。

11、D,protected表示成员变量是受保护的。主要用在继承机制上,不同包内的子类可以访问父类受保护的成员变量。同一包内的其他类也可以访问该类protected成员变量。public表示成员变量是公开的,任意包内的任意类都可以访问。private表示成员变量是私有的,只有该类本身可以访问。无修饰符(default) 是默认的 (不加修饰符),表示成员变量可以被同一个包内的类访问。

12、C,Java异常是Java提供的用于处理程序中运行错误的机制。Java提供了try-catch-finally结构来处理异常。try中的代码段包含可能产生异常的代码,try代码段后可以跟着一个或者多个catch代码段,最后是finally代码段。需要注意的是,finally代码段中的代码无论异常是否发生或者异常发生并被捕捉到时都是会执行的。

13、A,Java提供了Java开发工具包 (Java Development Kit, JDK),JDK默认提供了一些基础类库供开发人员使用。java.sql包提供了数据库调用相关函数。没有java.db这个包。java.lang包提供了基础通用类,是被默认导入的包。java.util包提供了集合类框架,日期和时间辅助类等。

14、B,本题主要考察的是Java并发技术。A选项CopyOnWriteArrayList是使用CopyOnWrite机制实现的并发容器,能够进行并发的读,而不需要加锁,适用于写少读多的并发场景;B选项ReadWriteLock即为读写锁,当写操作时,其他线程无法读取或写入数据,而当读操作时,其它线程无法写入数据,但却可以读取数据,所以适用于读多写少的场景;C选项ConcurrentHashMap使用锁分段机制,读写都加锁;D选项用volatile修饰的变量,只保证多线程操作的可见性,不保证原子性。

15、D,JVM参数配置中:-Xmx指定jvm的最大堆大小。-Xms指定jvm的初始堆大小。-Xmn指定jvm中年轻代(NewGeneration)的大小。-XX:SurvivorRatio:指定年轻代中Eden区与Survivor区的大小比值。由题目得年轻代为5120m,年轻代中Eden区与Survivor区的大小比值为3,而Survivor区有两个,即将年轻代看做5份,每个Survivor区占一份,Eden区占3份,Survivor区大小=5120/5=1024m,Survivor区总大小为2048m。-Xms初始堆大小即最小内存值为10240m。

16、B,switch传入的i值,由上至下匹配满足case值,运行该case后的语句块,若有break跳出该switch,若没有break则继续向下全部执行,忽略case匹配,直至遇到break或执行完毕 跳出 。default所有值都可直接匹配。

17、D,二维数组的定义方式,每个[] 中给一个维度数组的长度或不写。

18、A,i只能使用在for语句块中。

19、B,main函数定义为:public static void main(String arg[]) 参数为字符串数组

20、C,int为基本类型,默认值为0,在初始化int整型数组时,每个位置上的值都为初始化值,所以anar[0]等于0,++anar[0],先自增再使用,所以输出结果为1。

 

大数据资讯之JAVA基础语法面试真题

(共40分,每题10分)

1、读入三个整数,把这三个整数按照由大到小的顺序输出。

2、中国的个税计算方法:

     问题描述:按2011年9月1日起我国调整的个人所得税征收办法,起征点为3500元,超出部分按以下7级计算:

     * 1  超过0至1500 税率3%     速算扣除数0

     * 2  超过1500元至4500元的部分      税率10%     速算扣除数105

     * 3  超过4500元至9000元的部分      税率20%     速算扣除数555

     * 4  超过9,000元至35,000元的部分        税率25%     速算扣除数1005

     * 5  超过35,000元至55,000元的部分  税率30%      速算扣除数2755

     * 6  超过55,000元至80,000元的部分  税率35%      速算扣除数5505

     * 7  超过80,000以上                    税率45%         速算扣除数13505

     * 个人所得税=(收入总额-3500)*税率-速算扣除数

     程序输出:应缴税款和税后收入

3、请说明>>与>>>之间的区别。

4、一家商场在举行打折促销,所有商品都进行8 折优惠。一位程序员把这个逻辑写成:

     short price = ...; // 先计算出原价

      short realPrice = price * 8 / 10; //再计算出打折之后的价格

     问:这段代码是否正确?如果正确,假设price 为100,那计算之后的结果是多少?如果不正确,如何修改?

 

 

答案解析:

 1、

       int max = 0, mid = 0, min = 0;

                     System.out.println("请输入第一个数:");

                     int a = newScanner(System.in).nextInt();

                     System.out.println("请输入第二个数:");

                     int b = newScanner(System.in).nextInt();

                     System.out.println("请输入第三个数:");

                     int c = new Scanner(System.in).nextInt();

                     if (a > b&& a > c) {

                         max =a;

                         if (b> c) {

                            mid = b;

                             min = c;

                            System.out.println(max+"   "+mid+"    "+min);

                         }else {

                            mid = c;

                            min = b;

                            System.out.println(max+"   "+mid+"    "+min);

                         }

                     } else {

                         if (b> a && b > c) {

                            max = b;

                            if (a > c) {

                                 mid = a;

                                min = c;

                                System.out.println(max+"   "+mid+"    "+min);

                            } else {

                                mid = c;

                                min = a;

                                System.out.println(max+"   "+mid+"    "+min);

                            }

                         }else {

                            max = c;

                            if (a > b) {

                                mid = a;

                                min = b;

                                System.out.println(max+"   "+mid+"    "+min);

                            } else {

                                mid = b;

                                min = a;

                                System.out.println(max+"   "+mid+"    "+min);

                            }

                         }

                     }

2、

       Scanner sc = new Scanner(System.in);

                      double dsalary,dtax=0,dnetincome=0;

                      double dvalue;

                      double drate,doffset;

                     System.out.println("请输入您本月的收入总额:");

                      dsalary  =sc.nextDouble();

                      dvalue=dsalary-3500;

                      if(dvalue<=0){

                          System.out.println("您不用纳税,谢谢!");

                      }else{

                          if(dvalue<=1500){

                               drate=0.03;

                                doffset=0;

                          }else if(dvalue<=4500){

                               drate=0.1;

                               doffset=105;

                          }else if(dvalue<=9000){

                                drate=0.2;

                               doffset=555;

                          }else if(dvalue<=35000){

                               drate=0.25;

                               doffset=1005;

                          }else if(dvalue<=55000){

                               drate=0.3;

                               doffset=2755;

                          }else if(dvalue<=80000){

                               drate=0.35;

                                doffset=5505;

                          }else{

                               drate=0.45;

                               doffset=13505;

                          }

                          dtax=dvalue*drate-doffset;

                          dnetincome=dsalary-dtax;

                          System.out.println("您本月应缴个人所得税"+dtax+"元,税后收入为"+dnetincome+"元");

                  }

3、java中的位运算符:

              >>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;

              >>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0。

              表达式为:

              result = exp1 >>exp2;

             result = exp2>>> exp2;

              表示把数exp1向右移动exp2位。

              例如:

              res = 20 >>2; 

              20的二进制为 00010100,右移2位后为 0000 0101,则结果就为 res =5;

              res = -20 >> 2;

              -20的二进制为其正数的补码加1,即 1110 1011,右移2位后为 1111 1100,结果为 res = -6;

              而对于>>>符号而言:

              res = 20 >>>2; 的结果与 >> 相同;

              res = -20 >> 2;

              -20的二进制为 11101011,右移2位,此时高位补0,即 0011 1010,结果为 res = 58;

              补充:

              << 是与>>对应的左移运算符,表示将exp1向左移动exp2位,在低位补0。其实,向左移动n位,就相当于乘以2^n。

              左移没有<<<运算符

4、不正确,因该改成

              double price = 100;

              double realPrice = price*/10;

byte,short,int作用算,最终结果都是int类型。而price是short类型,8和10都是int类型,所以他们运算的结果是int类型,而接收运算结果的变量realPrice是short类型,int类型的值赋值给short变量,会损失精度,需要强制类型转换。

最新资讯更多+
内容推荐更多+
在线课堂
猜你喜欢