欢迎光临散文网 会员登陆 & 注册

大数据基础面试题(二)

2020-06-11 16:07 作者:自学Python的小姐姐呀  | 我要投稿

67.下列说法正确的有()(多选)

A环境变量可在编译source code时指定

B.在編译程序时,所指定的环境变置不包括class path

C.javac —次可同时编译数个Java 源文件

D.javac.exe能指定编译结果要置于哪个目录(directory)

答案:BCD

分析:

环境变量一般都是先配置好再编译源文件。


68.下列标识符不合法的有()(多选)

A.new

B.$Usdollars

C.1234

D.car.taxi

答案:ACD

分析:

new是Java的关键字;

C. 数字不能开头;

D. 不能有“.”。


69.下列说法错误的有()(多选)

A.数组是—种对象

B.数组属于一种原生类

C.int number[]=(31,23,33,43,35,63)

D.数组的大小可以任意改变

答案:BCD

分析:

B. Java中的原生类(即基本数据类型)有8种,但不包括数组;

C. 语法错误,应该“{···}”,而不是“(···)”;

D. 数组的长度一旦确定就不能修改。


70.不能用来修饰interface的有()(多选)

A.private

B.public

C.protected

D.static

答案:ACD

分析:

能够修饰interface的只有public、abstract以及默认的三种修饰符。


71.下列正确的有()(多选)

A.call by value不会改变实际参数的数值

B.call by reference能改变实际参数的参考地址

C.call by reference 不能改变实际参数的参考地址

D.call by reference 能改变实际参数的内容

答案:ACD

分析:

Java中参数的传递有两种,一种是按值传递(call by value:传递的是具体的值,如基础数据类型),另一种是按引用传递(call by reference:传递的是对象的引用,即对象的存储地址)。前者不能改变实参的数值,后者虽然不能改变实参的参考地址,但可以通过该地址访问地址中的内容从而实现内容的改变。


72.下列说法错误的有()(多选)

A.在类方法中可用this来调用本类的类办法

B.在类方法中调用本类的类方法时可以直接调用

C.在类方法中只能调用本类中的类方法

D.在类方法中绝对不能调用实例方法

答案:ACD

分析:

类方法是在类加载时被加载到方法区存储的,此时还没有创建对象,所以不能使用this或者super关键字;

C. 在类方法中还可以调用其他类的类方法;

D. 在类方法可以通过创建对象来调用实例方法。


73.下列说法错误的有()(多选)

A.Java面向对象语言容许单独的过栈与函数存在

B.Java面向对象语言容许单独的方法存在

C.Java语言中的方法属于类中的成员(member)

D.Java语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同

答案:ABC

分析:

B. Java不允许单独的方法,过程或函数存在,需要隶属于某一类中;

C. 静态方法属于类的成员,非静态方法属于对象的成员。


74.下列说法错误的有()(多选)

A.能被java.exe成功运行的java class文件必须有main()方法

B.J2SDK就是Java API

C.Appletviewer.exe可利用jar选项运行.jar文件

D.能被Appletviewer成功运行的java class文件必须有main()方法

答案:BCD

分析:

B. J2SDK是sun公司编程工具,API是指的应用程序编程接口;

C. Appletviewer.exe就是用来解释执行java applet应用程序的,一种执行HTML文件上的Java小程序类的Java浏览器;

D. 能被Appletviewer成功运行的java class文件可以没有main()方法。


75.请问0.3332的数据类型是()

A.float

B.double

C.Float

D.Double

答案:B

分析:

小数默认是双精度浮点型即double类型的。


76.Java接口的修饰符可以为()

A.private

B.protected

C.final

D.abstract

答案:D

分析:

能够修饰interface的只有public、abstract以及默认的三种修饰符。


77.不通过构造函数也能创建对象么()

A是

B.否

答案:A

分析:

Java创建对象的几种方式:

(1) 用new语句创建对象,这是最常见的创建对象的方法。

(2) 运用反射手段,调用java.lang.Class或者

java.lang.reflect.Constructor类的newInstance()实例方法。

(3) 调用对象的clone()方法。

(4) 运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法。

(1)和(2)都会明确的显式的调用构造函数;(3)是在内存上对已有对象的影印,所以不会调用构造函数;(4)是从文件中还原类的对象,也不会调用构造函数。


78.存在使i+1< i的数么?

不存在bai使i + 1 < i的数

因为两边

i-i+1<0

1<0不成立。


79.接口可否继承接口?抽象类是否可实现接口?抽象类是否可继承实体类?

接口可以继承接口,抽象类可以实现接口,抽象类可以继承实体类。


80.int与Integer有什么区别?

int是java提供的8种原始数据类型之一。Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer。在JSP开发中,Integer的默认为null,所以用el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0,所以用el表达式在文本框中显示时,结果为0,所以,int不适合作为web层的表单数据的类型。

在Hibernate中,如果将OID定义为Integer类型,那么Hibernate就可以根据其值是否为null而判断一个对象是否是临时的,如果将OID定义为了int类型,还需要在hbm映射文件中设置其unsaved-value属性为0。另外,Integer提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数,Integer中还定义了表示整数的最大值和最小值的常量。


81.可序列化对象为什么要定义serialversionUID值?

SerialVersionUid,简言之,其目的是序列化对象版本控制,有关各版本反序列化时是否兼容。如果在新版本中这个值修改了,新版本就不兼容旧版本,反序列化时会抛出InvalidClassException异常。如果修改较小,比如仅仅是增加了一个属性,我们希望向下兼容,老版本的数据都能保留,那就不用修改;如果我们删除了一个属性,或者更改了类的继承关系,必然不兼容旧数据,这时就应该手动更新版本号,即SerialVersionUid。


82.写一个Java正则,能过滤出html中的< a href=”url”>title< /a>形式中的链接地址和标题.

< a\b[^>]+\bhref="([^"]*)"[^>]*>([\s\S]*?)< /a>

< a\b[^>]+\bhref="([^"]*)"[^>]*>([\s\S]*?)< /a>


83.十进制数72转换成八进制数是多少?

答: 110


84.Java程序中创建新的类对象,使用关键字new,回收无用的类对象使用关键字free正确么?

答:Java程序中创建新的类对象,使用关键字new是正确的; 回收无用的类对象使用关键字free是错误的.


85.Class类的getDeclaredFields()方法与getFields()的区别?

答:getDeclaredFields(): 可以获取所有本类自己声明的方法, 不能获取继承的方法

getFields(): 只能获取所有public声明的方法, 包括继承的方法


86.在switch和if-else语句之间进行选取,当控制选择的条件不仅仅依赖于一个x时,应该使用switch结构;正确么?

答:不正确。

通常情况下,进行比较判断的处理,switch 和if-else可以互相转换来写;if-else作用的范围比switch-case作用范围要大,但是当switch-case和if-else都可以用的情况下,通常推荐使用switch-case。

比如:

87.描述&和&&的区别。

&和&&的联系(共同点):

&和&&都可以用作逻辑与运算符,但是要看使用时的具体条件来决定。

操作数1&操作数2,操作数1&&操作数2,

操作数1&操作数2,操作数1&&操作数2,

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

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

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

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

(1)、&逻辑运算符称为逻辑与运算符,&&逻辑运算符称为短路与运算符,也可叫逻辑与运算符。

对于&:无论任何情况,&两边的操作数或表达式都会参与计算。

对于&&:当&&左边的操作数为false或左边表达式结果为false时,&&右边的操作数或表达式将不参与计算,此时最终结果都为false。

综上所述,如果逻辑与运算的第一个操作数是false或第一个表达式的结果为false时,对于第二个操作数或表达式是否进行运算,对最终的结果没有影响,结果肯定是false。推介平时多使用&&,因为它效率更高些。

(2)、&还可以用作位运算符。当&两边操作数或两边表达式的结果不是boolean类型时,&用于按位与运算符的操作。


88.使用final关键字修饰符一个变量时,是引用不能变,还是引用的对象不能变?

final修饰基本类型变量,其值不能改变。

但是final修饰引用类型变量,栈内存中的引用不能改变,但是所指向的堆内存中的对象的属性值仍旧可以改变。

例如:


89.请解释以下常用正则含义:\d,\D,\s,.,*,?,|,[0-9]{6},\d+

\d: 匹配一个数字字符。等价于[0-9]

\D: 匹配一个非数字字符。等价于[^0-9]

\s: 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]

. :匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。

*:匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。

+:匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。

|:将两个匹配条件进行逻辑“或”(Or)运算

[0-9]{6}:匹配连续6个0-9之间的数字

\d+:匹配至少一个0-9之间的数字


90.已知表达式int m[] = {0,1,2,3,4,5,6}; 下面那个表达式的值与数组的长度相等()

A.m.length()

B.m.length

C.m.length()+1

D.m.length+1

答案:B

分析:数组的长度是.length


91.下面那些声明是合法的?()

A.long l = 4990

B.int i = 4L

C.float f = 1.1

D.double d = 34.4

答案:AD

分析:B int属于整数型应该是int=4 C应该是float f=1.1f


92.以下选项中选择正确的java表达式()

A.int k=new String(“aa”)

B.String str = String(“bb”)

C.char c=74;

D.long j=8888;

答案:CD

分析:A需要强制类型转换 B String str =new String(“bb”)

93.下列代码的输出结果是


94.以下哪些运算符是含有短路运算机制的?请选择:()

A.&

B.&&

C.|D.||

答案:BD

分析:A C是逻辑与计算


95.下面哪个函数是public void example(){....}的重载函数?()

A.private void example(int m){...}

B.public int example(){...}

C.public void example2(){...}

D.public int example(int m.float f){...}

答案:AD

分析:BC定义的是新函数


96.给定某java程序片段,该程序运行后,j的输出结果为()

A.1

B.2

C.3

D.4

答案:B

分析: i++先引用后。++i 先增加后引用


97.在java中,无论测试条件是什么,下列()循环将至少执行一次。

A.for

B.do...while

C.while

D.while...do

答案:B

分析: ACD都不一定进行循环


98.打印结果:

输出结果:2

99.指出下列程序的运行结果


打印结果:

zero


100.解释继承、重载、覆盖。

继承(英语:inheritance)是面向对象软件技术当中的一个概念。如果一个类别A“继承自”另一个类别B,就把这个A称为“B的子类别”,而把B称为“A的父类别”也可以称“B是A的超类”。继承可以使得子类别具有父类别的各种属性和方法,而不需要再次编写相同的代码。在令子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功能。另外,为子类别追加新的属性和方法也是常见的做法。 一般静态的面向对象编程语言,继承属于静态的,意即在子类别的行为在编译期就已经决定,无法在执行期扩充。

那么如何使用继承呢?用extends关键字来继承父类。

如上面A类与B类,当写继承语句时, class A类 extends B类{ } 其中A类是子类,B类是父类。

英文位置不同作用不同重载overload同一个类中

在一个类里面为一种行为提供多种实现方式并提高可读性

现方式并提高可读性

重写override子类和父类间

父类方法无法满足子类的要求,子类通

过方法重写满足要求


101.什么是编译型语言,什么是解释型语言?java可以归类到那种?

计算机不能直接理解高级语言,只能理解和运行机器语言,所以必须要把高级语言翻译成机器语言,计算机才能运行高级语言所编写的程序。翻译的方式有两种,一个是编译,一个是解释。

用编译型语言写的程序执行之前,需要一个专门的编译过程,通过编译系统把高级语言翻译成机器语言,把源高级程序编译成为机器语言文件,比如windows下的exe文件。以后就可以直接运行而不需要编译了,因为翻译只做了一次,运行时不需要翻译,所以一般而言,编译型语言的程序执行效率高。

解释型语言在运行的时候才翻译,比如VB语言,在执行的时候,专门有一个解释器能够将VB语言翻译成机器语言,每个语句都是执行时才翻译。这样解释型语言每执行一次就要翻译一次,效率比较低。

编译型与解释型,两者各有利弊。前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object Pascal(Delphi)等都是编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。

JAVA语言是一种编译型-解释型语言,同时具备编译特性和解释特性(其实,确切的说java就是解释型语言,其所谓的编译过程只是将.java文件编程成平台无关的字节码.class文件,并不是向C一样编译成可执行的机器语言,在此请读者注意Java中所谓的“编译”和传统的“编译”的区别)。作为编译型语言,JAVA程序要被统一编译成字节码文件——文件后缀是class。此种文件在java中又称为类文件。java类文件不能再计算机上直接执行,它需要被java虚拟机翻译成本地的机器码后才能执行,而java虚拟机的翻译过程则是解释性的。java字节码文件首先被加载到计算机内存中,然后读出一条指令,翻译一条指令,执行一条指令,该过程被称为java语言的解释执行,是由java虚拟机完成的。


102.简述操作符(&,|)与操作符(&&,||)的区别&和&&的联系(共同点)

&和&&都可以用作逻辑与运算符,但是要看使用时的具体条件来决定。

操作数1&操作数2操作数1&&操作数2表达式1&表达式2表达式1&&表达式2

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

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

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

&和&&的区别(不同点):

(1)、&逻辑运算符称为逻辑与运算符,&&逻辑运算符称为短路与运算符,也可叫逻辑与运算符。

对于&:无论任何情况,&两边的操作数或表达式都会参与计算。

对于&&:当&&左边的操作数为false或左边表达式结果为false时,&&右边的操作数或表达式将不参与计算,此时最终结果都为false。

综上所述,如果逻辑与运算的第一个操作数是false或第一个表达式的结果为false时,对于第二个操作数或表达式是否进行运算,对最终的结果没有影响,结果肯定是false。推介平时多使用&&,因为它效率更高些。

(2)、&还可以用作位运算符。当&两边操作数或两边表达式的结果不是boolean类型时,&用于按位与运算符的操作。

|和||的区别和联系与&和&&的区别和联系类似


103.try{}里面有一个return语句,那么紧跟在这个try后的finally, 里面的语句在异常出现后,都会执行么?为什么?

在异常处理时提供 finally 块来执行任何清除操作。

如果有finally的话,则不管是否发生异常,finally语句都会被执行,包括遇到return语句。

finally中语句不执行的唯一情况中执行了System.exit(0)语句。


104.有一段java应用程序,它的主类名是al,那么保存它的源文件可以是?()

A.al.java

B.al.class

C.al

D.都对

答案:A

分析:.class是java的解析文件


105.Java类可以作为()

A.类型定义机制

B.数据封装机制
C.类型定义机制和数据封装机制

D.上述都不对

答案:C


106.在调用方法时,若要使方法改变实参的值,可以?()

A.用基本数据类型作为参数

B.用对象作为参数

C.A和B都对

D.A和B都不对

答案:B

分析:基本数据类型不能改变实参的值


107.Java语言具有许多优点和特点,哪个反映了java程序并行机制的()

A.安全性

B.多线性

C.跨平台

D.可移植

可移植


108.下关于构造函数的描述错误是()

A.构造函数的返回类型只能是void型

B.构造函数是类的一种特殊函数,它的方法名必须与类名相同

C.构造函数的主要作用是完成对类的对象的初始化工作

D.一般在创建新对象时,系统会自动调用构造函数

答案:A

分析:构造函数的名字与类的名字相同,并且不能指定返回类型。


109.若需要定义一个类域或类方法,应使用哪种修饰符?()

A.static

B.package

C.private

D.public

答案:A

110.下面代码执行后的输出是什么()

A.0 and 0

0 and 1

0 and 2

B. 1 and 0

1 and 1

1 and 2

C. 2 and 0

2 and 1

2 and 2

答案:A

111.给出如下代码,如何使成员变量m被函数fun()直接访问()

A.将private int m 改为 protected int 

B.将private int m 改为 public int m

C.将private int m 改为 static int m

D.将private int m 改为int m

答案:C


112.下面哪几个函数是public void example(){….}的重载函数()


A.public void example(int m){…}

B.public int example(int m){…}

C.public void example2(){…}

D.public int example(int m,float f){…}

答案:ABD


113.请问以下代码执行会打印出什么?

执行:C:\>java com.bjsxt.ChildClass

输出结果:?

答:

FatherClassCreate

FatherClassCreate

ChildClass Create


114.如果有两个类A、B(注意不是接口),你想同时使用这两个类的功能,那么你会如何编写这个C类呢?

答:因为类A、B不是接口,所以是不可以直接实现的,但可以将A、B类定义成父子类,那么C类就能实现A、B类的功能了。假如A为B的父类,B为C的父类,此时C就能使用A、B的功能。


115.一个类的构造方法是否可以被重载(overloading),是否可以被子类重写(overrding)?

答:构造方法可以被重载,但是构造方法不能被重写,子类也不能继承到父类的构造方法


116.Java中byte表示的数值范围是什么?

答:范围是-128至127


117.如何将日期类型格式化为:2013-02-18 10:53:10?


 

118.不通过构造函数也能创建对象吗()

A.是

B.否

分析:答案:A

Java创建对象的几种方式(重要):

(1) 用new语句创建对象,这是最常见的创建对象的方法。

(2) 运用反射手段,调用java.lang.Class或者

java.lang.reflect.Constructor类的newInstance()实例方法。

(3) 调用对象的clone()方法

(4) 运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。

(1)和(2)都会明确的显式的调用构造函数 ;(3)是在内存上对已有对象的影印,所以不会调用构造函数 ;(4)是从文件中还原类的对象,也不会调用构造函数。

(1)和(2)都会明确的显式的调用构造函数 ;(3)是在内存上对已有对象的影印,所以不会调用构造函数 ;(4)是从文件中还原类的对象,也不会调用构造函数。

119.下面哪些是对称加密算法()


A.DES

B.MD5

C.DSA

D.RSA

分析:答案:A

分析:常用的对称加密算法有:DES、3DES、RC2、RC4、AES

常用的非对称加密算法有:RSA、DSA、ECC

使用单向散列函数的加密算法:MD5、SHA

120.下面的代码段,当输入为2的时候返回值是()


A.0

B.2

C.4

D.10

答案:C

分析:result = 0 + 2 * 2;

121.以下Java代码段会产生几个对象

分析:答案: 一个对象,因为编译期进行了优化,3个字符串常量直接折叠为一个


122.Math.round(-11.2)的运行结果是。

答案: -11

分析:小数点后第一位=5

正数:Math.round(11.5)=12

负数:Math.round(-11.5)=-11

小数点后第一位<5

正数:Math.round(11.46)=11

负数:Math.round(-11.46)=-11

小数点后第一位>5

正数:Math.round(11.68)=12

负数:Math.round(-11.68)=-12

根据上面例子的运行结果,我们还可以按照如下方式总结,或许更加容易记忆:

参数的小数点后第一位<5,运算结果为参数整数部分。

参数的小数点后第一位>5,运算结果为参数整数部分绝对值+1,符号(即正负)不变。

参数的小数点后第一位=5,正数运算结果为整数部分+1,负数运算结果为整数部分。

终结:大于五全部加,等于五正数加,小于五全不加。


123.十进制数278的对应十六进制数

分析:十进制数278的对应十六进制数是116


124.Java中int.long占用的字节数分别是

分析:

1:“字节”是byte,“位”是bit ;

2: 1 byte = 8 bit ;

char 在Java中是2个字节。java采用unicode,2个字节(16位)来表示一个字符。

short 2个字节

int 4个字节

long 8个字节


125.System.out.println(‘a’+1);的结果是

分析:'a'是char型,1 是int行,int与char相加,char会被强转为int行,char的ASCII码对应的值是97,所以加一起打印98


126.下列语句那一个正确()

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

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

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

D.以上都不正确

答案:B

分析:java程序编译后会生成字节码文件,就是.class文件


127.下列说法正确的有()

A.class中的constructor不可省略

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

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

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

答案:C


128.执行如下程序代码()


A.0

B.1

C.-1

D.死循环

答案:C

do{...}while(...);语句至少执行一次


129.下列哪一种叙述是正确的()

A.abstract修饰符可修饰字段、方法和类

B.抽象方法的body部分必须用一对大括号{}包住

C.声明抽象方法,大括号可有可无

D.声明抽象方法不可写出大括号

答案:D

分析: abstract不能修饰字段。既然是抽象方法,当然是没有实现的方法,根本就没有body部分。


130.下列语句正确的是()

A.形式参数可被视为local variable

B.形式参数可被字段修饰符修饰

C.形式参数为方法被调用时,真正被传递的参数

D.形式参数不可以是对象

答案A:

分析:

A:形式参数可被视为local variable。形参和局部变量一样都不能离开方法。都只有在方法内才会发生作用,也只有在方法中使用,不会在方法外可见。

B:对于形式参数只能用final修饰符,其它任何修饰符都会引起编译器错误。但是用这个修饰符也有一定的限制,就是在方法中不能对参数做任何修改。 不过一般情况下,一个方法的形参不用final修饰。只有在特殊情况下,那就是:方法内部类。  一个方法内的内部类如果使用了这个方法的参数或者局部变量的话,这个参数或局部变量应该是final。 

C:形参的值在调用时根据调用者更改,实参则用自身的值更改形参的值(指针、引用皆在此列),也就是说真正被传递的是实参。

D:方法的参数列表指定要传递给方法什么样的信息,采用的都是对象的形式。因此,在参数列表中必须指定每个所传递对象的类型及名字。想JAVA中任何传递对象的场合一样,这里传递的实际上也是引用,并且引用的类型必须正确。--《Thinking in JAVA》


131.成员变量用static修饰和不用static修饰有什么区别?

1、两个变量的生命周期不同。

成员变量随着对象的创建而存在,随着对象的被回收而释放。

静态变量随着类的加载而存在,随着类的消失而消失。

2、调用方式不同。

成员变量只能被对象调用。

成员变量只能被对象调用。

成员变量只能被对象调用。

类名调用 :Person.country

3、别名不同。

成员变量也称为实例变量。

静态变量称为类变量。 

4、数据存储位置不同。

成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据.

静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据.


132.如果变量用final修饰,则怎样?如果方法final修饰,则怎样?

1、用final修饰的类不能被扩展,也就是说不可能有子类;

2、用final修饰的方法不能被替换或隐藏:

① 使用final修饰的实例方法在其所属类的子类中不能被替换(overridden);

② 使用final修饰的静态方法在其所属类的子类中不能被重定义(redefined)而隐藏(hidden);

3、用final修饰的变量最多只能赋值一次,在赋值方式上不同类型的变量或稍有不同:

① 静态变量必须明确赋值一次(不能只使用类型缺省值);作为类成员的静态变量,赋值可以在其声明中通过初始化表达式完成,也可以在静态初始化块中进行;作为接口成员的静态变量,赋值只能在其声明中通过初始化表达式完成;

② 实例变量同样必须明确赋值一次(不能只使用类型缺省值);赋值可以在其声明中通过初始化表达式完成,也可以在实例初始化块或构造器中进行;

③ 方法参数变量在方法被调用时创建,同时被初始化为对应实参值,终止于方法体 (body)结束,在此期间其值不能改变;

④ 构造器参数变量在构造器被调用(通过实例创建表达式或显示的构造器调用)时创建,同时被初始化,为对应实参值,终止于构造器体结束,在此期间其值不能改变;

⑤ 异常处理器参数变量在有异常被try语句的catch子句捕捉到时创建,同时被初始化为实际的异常对象,终止于catch语句块结束,在此期间其值不能改变;

⑥ 局部变量在其值被访问之前必须被明确赋值;


133.在二进制数据中,小数点向右移一位,则数据()

A.除以10

B.除以2

C.乘以2

D.乘以10

分析:可以看个例子

101.1 对应的十进制为 2^2*1 + 2^1*0 + 2^0*1 + 2^-1*1 = 5.5小数点右移一位

1011 对应的十进制为 2^3*1 + 2^2*0 + 2^1*1 + 2^0*1 = 11所以是扩大到原来的2倍


134.面向对象的特征有哪些方面?

答:面向对象的特征主要有以下几个方面:

1、抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。

2、继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段(如果不能理解请阅读阎宏博士的《Java与模式》或《设计模式精解》中关于桥梁模式的部分)。

3、封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口(可以想想普通洗衣机和全自动洗衣机的差别,明显全自动洗衣机封装更好因此操作起来更简单;我们现在使用的智能手机也是封装得足够好的,因为几个按键就搞定了所有的事情)。

4、多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。如果将对象的方法视为对象向外界提供的服务,那么运行时的多态性可以解释为:当A系统访问B系统提供的服务时,B系统有多种提供服务的方式,但一切对A系统来说都是透明的(就像电动剃须刀是A系统,它的供电系统是B系统,B系统可以使用电池供电或者用交流电,甚至还有可能是太阳能,A系统只会通过B类对象调用供电的方法,但并不知道供电系统的底层实现是什么,究竟通过何种方式获得了动力)。方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(override)实现的是运行时的多态性(也称为后绑定)。运行时的多态是面向对象最精髓的东西,要实现多态需要做两件事:1. 方法重写(子类继承父类并重写父类中已有的或抽象的方法);2. 对象造型(用父类型引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)。


135.float f=3.4;是否正确?

答:不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F;。


136.short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?

答:对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型。而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。


137.Java 有没有goto?

答: goto 是Java中的保留字,在目前版本的Java中没有使用。(根据James Gosling(Java之父)编写的《The Java Programming Language》一书的附录中给出了一个Java关键字列表,其中有goto和const,但是这两个是目前无法使用的关键字,因此有些地方将其称之为保留字,其实保留字这个词应该有更广泛的意义,因为熟悉C语言的程序员都知道,在系统类库中使用过的有特殊意义的单词或单词的组合都被视为保留字)


138.int 和Integer 有什么区别?

答:Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入不是对象的基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从JDK 1.5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。

Java 为每个原始类型提供了包装类型:

原始类型: boolean,char,byte,short,int,long,float,double

包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

简单的说,如果字面量的值在-128到127之间,那么不会new新的Integer对象,而是直接引用常量池中的Integer对象,所以上面的面试题中f1==f2的结果是true,而f3==f4的结果是false。越是貌似简单的面试题其中的玄机就越多,需要面试者有相当深厚的功力。


139.&和&&的区别?

答:&运算符有两种用法:(1)按位与;(2)逻辑与。&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true。&&之所以称为短路运算是因为,如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。很多时候我们可能都需要用&&而不是&,例如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username != null &&!username.equals(“”),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则会产生NullPointerException异常。注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。

补充:如果你熟悉JavaScript,那你可能更能感受到短路运算的强大,想成为 JavaScript的高手就先从玩转短路运算开始吧。


140.Math.round(11.5) 等于多少? Math.round(-11.5)等于多少?

答:Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后进行下取整。


由于字数限制,后续内容更加精彩,欢迎关注,整理不易,可否动动你的小手给小编来点更新的动力,希望对你们会有帮助!~

大数据基础面试题(二)的评论 (共 条)

分享到微博请遵守国家法律