【面试虐菜】—— JAVA面试题(2)

1 String = 与 new 的不同

使用“=”赋值不一定每次都创建一个新的字符串,而是从“字符串实例池”中查找字符串。使用“new”进行赋值,则每次都创建一个新的字符串

2 String与StringBuffer

String类是不可变类,字符串一旦初始化后,就不能被改变。而StringBuffer类是可变类,字符串值可以呗改变。常常在实际应用中看到累死这样的代码:String s=new(“hello”);s+=”world”,这两句代码首先创建一个字符hello,然后将world追加到hello结尾并重新赋值给变量s。然后,这个过程实际上是这样的:首先创建一个StringBuffer对象,然后用StringBuffer类的append方法追加字符串,最后对StringBuffer对象调用toString方法合成字符串返回。可见,使用+号连接字符串时,本质上是使用了可变的StringBuffer类,经变动肯定性能效率受到影响,所以建议需要追加字符串时,可以考虑直接使用StringBuffer类。参考答案:String类是不可变类,即字符串值一旦初始化后就不可能改变。StringBuffer是可变字符串类,类似String的缓冲区,可以修改字符串的值

3 StringBuffer 与 StringBiulder的区别

StringBuffer是线程安全的字符串缓冲,而StringBuilder不是线程安全的。

4 包装器类型?

包装类器包括Byte、Short、Integer、Long、Float、Double、Character、Boolean等类,主要用来对byte、short、integer、long、float、double、character、boolean这八种基本数据类型进行包装,使其称为引用类型。

5 JAVA参数传递

解析:值传递时编写应用时不可避免的操作。例如某方法声明形式是public void f(int x){},写方法是,必须为其传递一个int类型的实际参数,如f(10)。又如public  void g(Employee)。那么使用该方法时,必须为其传递一个Employee类型的实际参数,例如g(new Employee())。所以,对于初级程序员来说,了解Java语言的值传递规则非常重要。Java语言是本类型传递的值,例如f(10),仅仅把10复制给形式参数x,是值的拷贝。而引用类的传递时引用,即虚地址,例如g(new Employee())是把实际参数的虚地址传递给形式参数e,也就是说实际参数和形式参数的虚地址相同,物理上是同一个对象。参考答案:基本数据类型传递的是值,引用类型传递的是引用,即虚地址。

6 static修饰属性或者方法

static修饰属性或方法后,属性和方法不在属于某个特定的对象,而是所有共享,也可以说是static成员不依赖某个对象,在类加载时就被初始化。Static修饰的属性或方法,可以直接使用类名调用,而不用先实例化对象再调用。 

7 == 操作符的作用

解析:实际编程中,==是非常常用的操作符。很多初级程序员会使用这样的代码if(s==”save”0{},结果会发现,即使当字符串s的值为save时,if条件依然不能被执行。是==在比较引用类型时,比较的是两个对象的虚地址,而不是内容。要比较两个对象的内容是否相同,往往需要使用equal方法,例如if(s.equals(“save”)){}。==比较基本类型时,将比值的二进制是否相等,例如(x==0.5){}。值得注意的是,与空指针null值进行比较,往往用==进行,例如if(s==null||s.equals(“”)),表示如果字符串是空指针或者空串。 参考答案:==可以用来比较基本类型或者引用类型。比较基本类型时,==用来比较二进制的值,比较引用类型时,用来比较对象的虚地址。

8 && 与 & 的不同

解析:实际编程中,常常需要使用“与”或者“或”的逻辑。其中&&和&存在一定区别&&可能发生各路问题,例如if(s!=null&&s.length()==6)中,如果要的值为null,那么第一表达式的值为false,返回值肯定是false,不会计算第二个表达式的值,这就是短路。然而使用&,例如if(s!=null&s.length()==6),假设s的值为,null,返回值肯定是false,但是会判断第二个表达式的值,将发生空指针异常。实际工作中,经常使用&&操作符。 
参考答案:&&会发生短路问题,当第一个表达式的值为false时,将直接返回结果为false而不会判断第二个表达式的值。而&不会发生短路问题,即使第一个表达式的值是false,会判断第二个表达式的值

9 依赖 与 关联 的关系

解析:关联关系和依赖关系是非常常见的两种关系,二者的区别也很明显,程序员了解二者的区别能够更深入的理解面向对象的思想。 
参考答案:依赖关系是一种瞬时关系,A依赖B,指的是A的某个行为的参数是B的类型,也就是说,A要想实现这个行为,必须依赖B的实例,A关联B,是一种长久的关系。B作为A的属性存在,只要实例化一个A的对象,就会为这个A的对象实例化一个B的对象,作为它的属性使用,可以在A中任何需要使用B的地方使用B。 

10 JAVA的继承

解析:继承是面向对象语言的一大特征,主要作用是重复使用,子类通过继承父类,能够重复使用父类的属性和方法。指的注意的是,有两个策略都可使实现重复使用,一个是关联,一个是继承,实际编程中,关联用的更多。因为子类继承父类后,相当于父类中的细节将暴露给子类。初级程序员一定不要随意使用继承,避免滥用继承。 参考答案:继承主要为了能够重复使用父类中的成员。Java语言中的继承是单继承,也就是说一个类最多只能继承一个父类。 

11 super的作用

解析:使用一些IDE生成代码时,常常会在构造方法中见到super这个关键字。顾名思义,super是和父类有关的一个关键字,熟悉super的用法对熟练掌握继承很有必要。 

参考答案:如super():表示调用父类中的每一参考的构造方法:又如super(10);表示调用父类中的具有一个整型参数的构造方法。第二种用法是在子类中调用父类中的成员,如super.f();意思是调用父类中的f()方法。

12 final的作用

final修饰符是一个用途非常广泛的修饰符,可以修饰类,方法,以及属性。 

参考答案:final类是不能够被继承的类,称为终极类,如String类就是final类,不能有子类。final修饰方法后,是终极方法,不能被子类覆盖,但是可以被子类继承使用。final类不能被继承,final方法不能被覆盖,final属性不能被改变

13 object类的作用,都有什么方法。

解析:Object类是一个非常重要的类,是所有类的父类,包括数组在内,也就是对一个Java类,不管是API中定义的,还是自定义的类,都直接或间接的继承了Object类。所以,如果有一个方法f(Object o),那么可以传递给这个方法任意一个类的对象,包括%%%%。因为所有对象都可以说是Object类型。 
参考答案:Object类是多有类的直接或间接的父类

常用方法:toString()  equals finalize()

14 Object类的equals与hashcode方法

解析:在Object类中,equals方法比较对象的引用值,也就是只有物理上是同一对象的两个引用,在使用equals方法返回true。hashCode方法返回一个对象的内在地址的十六进制值。由于Object类是所有类的父类,所以任意类中都拥有这两个方法,并都可以进行覆盖。尤其是操作Set,Map对象时集合元素类的equals方法和hashCode方法非常必要,因为Set和Map判断元素是否重%%%是依靠这两个方法进行。一般的原则是:如果存在X和Y两个对象,调用X.equals(Y)相同时,那么调用hashCode方法返回值也应该相同;如果X.equals(Y)返回false时,那么调用hashCode方法返回值可能相同,也可能不同。值得注意的是,只要你覆盖了equals方法,一定%%%则覆盖hashCode 方法。在实际工作中,很多IDE环境都支持覆盖equals和hashCode 方法。 

参考答案:Oject类中的equals方法用来比较两个引用值,hashCode用来返回引用的内地址的十六进制数值。在Set以及Map集合中,判断两个元素是否重复时,往往需要使用这两个方法。这两个方法往往被子类覆盖,覆盖的规则是:如果存在x和y两个对象,调用x.equals(y)返回true时,那么调用hashCode方法的返回值也该相同;如果x.equals(y)返回false时,那么调用hashCode方法返回的值可能相同,也可能不同。

15 接口与抽象类

解析:接近欧的概念是一个设计层面的概念,初级程序员往往不会自己定义接口,但是会使用接口,理解接口的概念非常必要。接口定义了实现类的规范,即what to do的部分,所有实现类必须按照这个规范进行实现。 
参考答案:接口的特点是不能定义变量(只能定义静态常量static final 修饰,博友说JDK8已经修正,这个没有尝试,期待参考),而且所有方法都是抽象方法。而抽象类中可以有变量,也不强制必须有抽象方法

16 类的继承与接口的实现

解析:类继承父类与类实现接口,本质上其实是一样的。都是将父类或者接口作为模板,在这个模板上进行扩展或者重写。程序员在实际编程中,常常需要继承父类或者实现接口。 
参考答案:类继承父类只是单继承,也就是一个子类最多只有一个父类;而类实现接口可以多实现,就是一个子类可以同时实现多个接口,并覆盖所有接口中的所有抽象方法。

17 comparable接口的作用

解析:comparable接口是在实际编程中常常使用的接口,该接口定义了comareTo(Object o)方法,用来定义对象的比较逻辑。这个接口常常在其他API中会强制使用,例如Arrays类的sort(Object[])方法,就强制数组元素必须实现Comparable接口,与这个接口类似的 另外一个接口是Comparator。  
参考答案:Comparable接口定义了compareTo(Object o)方法,可以用来实现对象的比较逻辑,这个接口常常在其他API中强制使用,用来规范对象的比较逻辑

本文转自博客园xingoo的博客,原文链接:【面试虐菜】—— JAVA面试题(2),如需转载请自行联系原博主。

时间: 2024-07-28 21:17:32

【面试虐菜】—— JAVA面试题(2)的相关文章

【面试虐菜】—— JAVA面试题(1)

今天参加笔试,里面有设计模式,和一些基础题! 印象最深的是:什么不是Object的函数,我蒙的finalize,哎,无知! 还问了,接口与抽象类的不同,还有多线程的实现方式!下面基本都有. 另外还问了,观察者模式,设计模式,我一点不会,看来要下功夫了! 1.  面向对象编程的三大特性是什么,请简要阐述 (1).继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继 承了原始类的特性,新类称为原始类

【面试虐菜】—— JAVA面试题(3)

1 throws与throw的区别 解析:throws和throw是异常处理时两个常见的关键字,初级程序员常常容易正确理解throw和throws的作用和区别,说明已经能比较深入理解异常处理.Throw用来抛出异常,如果执行了throw语句,程序将发生异常,进入到异常处理机制.Throws用来声明异常,说明这个方法可能会发生某些类型的异常,那么编译器将强制在调用这个方法的时候处理异常.API中的很多方法都使用了throws声明了异常,所以使用这些方法时编译器会提示需要处理异常.   参考答案:t

【面试虐菜】—— MongoDB知识整理

为什么我们要使用MongoDB? 特点: 高性能.易部署.易使用,存储数据非常方便.主要功能特性有: 面向集合存储,易存储对象类型的数据. 模式自由. 支持动态查询. 支持完全索引,包含内部对象. 支持查询. 支持复制和故障恢复. 使用高效的二进制数据存储,包括大型对象(如视频等). 自动处理碎片,以支持云计算层次的扩展性 支持Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++语言的驱动程序,社区中也提供了对Erlang及.NET等平台的驱动程序. 文件存

【面试虐菜】—— 常用SQL语句

创建表 create table emp( id decimal, name char(10), age decimal) 删除表 DROP TABLE EMP 插入默认值 CREATE TABLE EMP( Id decimal NOT NULL, Name char(10) NOT NULL, Age decimal NOT NULL DEFAULT 18) 添加列 ALTER TABLE EMP ADD COLUMN Comments char(50) NOT NULL DEFAULT '

【面试虐菜】—— Oracle中CHAR、VARCHAR的区别

1.CHAR. CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取的时候可能要多次用到trim(). 2.VARCHAR. 存储变长数据,但存储效率没有CHAR高.如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的.VARCHAR类型的实际长度是它的值的实际长度+1.为什么"+1"呢?这一个

【面试虐菜】—— Oracle知识整理《收获,不止Oracle》

普通堆表不足之处:     表更新有日志开销     表删除有瑕疵     表记录太大检索较慢     索引回表读开销很大     有序插入难有序读出 DELETE产生的undo最多,redo也最多,因为undo也需要redo保护 全局临时表: 1 高效删除记录 基于事务的全局临时表commit或者session连接退出后,自动删除 基于回话的全局临时表在退出回话后自动删除 2 针对不同的会话数据独立,不同的session访问全局临时表,看到的结果不同 全局临时表在程序的一次调用执行过程中,需要

【面试虐菜】—— Apache知识整理

Apache性能调优1 Apache 部分: 1. 移除不用的模块. 2. 使用 mod_disk_cache NOT mod_mem_cache . 3. 扁平架构配置mod_disk_cache. 4. 安装恰当的Expires, Etag, 和 Cache-Control Headers . 5. 将缓存放在独立的磁盘 6. 使用管道日志替代直接记录 7. 将日志放在不同的磁盘 8. 使用 mod_gzip/mod_deflate . 9. 将HostnameLookups关闭. 10.

java 面试-java面试题金山实习生

问题描述 java面试题金山实习生 .输入4个数,构成两个区间,输出他们的整数交集区间.例如:1,10 , 5 , 15.输出[5,10]:写出思路和代码 解决方案 /** * 前提 a<=b c<=d * * @param a * @param b * @param c * @param d * @return */ public static String getResult(int a, int b, int c, int d) { String result = ""

java 面试题大全,求大神们帮助一下~~~~

问题描述 java 面试题大全,求大神们帮助一下~~~~ java 面试题大全,求大神们帮助一下~~~~java 面试题大全,求大神们帮助一下~~~~java 面试题大全,求大神们帮助一下~~~~java 面试题大全,求大神们帮助一下~~~~java 面试题大全,求大神们帮助一下~~~~java 面试题大全,求大神们帮助一下~~~~ 解决方案 求啥,百度上有的是,还带答案 解决方案二: http://pan.baidu.com/s/1kTxbjt9 百度文库 解决方案三: 同意楼上的,去百度上搜