Java面试总结(一)

Java 基础:
  1. &和&&都可以用作逻辑与的运算符

&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作。

  1. Collection 和 Collections的区别

答:Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作

  1. String s = new String(“xyz”);创建了几个String Object

答:两个,一个字符对象,一个字符对象引用对象

  1. Math.round(11.5)等於多少? Math.round(-11.5)等於多少

答: Math.round(11.5)12;Math.round(-11.5)-11;round方法返回与参数最接近的长整数,参数加1/2后求其floor

  1. short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错

答:short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)short s1 = 1; s1 += 1;(可以正确编译)

  1. Java有没有goto

答:java中的保留字,现在没有在java中使用

  1. 数组有没有length()这个方法? String有没有length()这个方法

答:数组没有length()这个方法,有length的属性。String有有length()这个方法

  1. Overload和Override的区别。

Overloaded的方法是否可以改变返回值的类型
方法的重写Overriding和重载Overloading是Java多态性的不同表现。果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型

  1. error和exception有什么区别

答:error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况

  1. List, Set, Map是否继承自Collection接口

答: List,Set是,Map不是
在这里插入图片描述

  1. Set 和 List 的特点跟区别?

(1) List:

  1. 是有序的 Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引来访
    问 List 中的无素,这类似于 Java 的数组。 2)凡是可以操作索引的方法都是 List 接口特有方法。
    (2) Set:
  2. 接口存储一组唯一,无序的对象(存入和取出的顺序不一定一致)。 2) 操作数据的方法与 List 类似,Set 接口不存在与索引相关的方法。
  1. 构造器Constructor是否可被override

答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading

  1. 是否可以继承String类

答:String类是final类故不可以继承

  1. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后

答:会执行,在return前执行

  1. 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对

答:不对,有相同的hash code

  1. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递

答:是值传递。Java 编程语言只有值传递参数。

  1. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上

答:witch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich

  1. char型变量中能不能存贮一个中文汉字?为什么?

答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的

  1. float型float f=3.4是否正确?

答:不正确。精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4

  1. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?

答:可以。必须只有一个类名与文件名相同。

  1. List、Map、Set三个接口,存取元素时,各有什么特点?

答:List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。

  1. 说出一些常用的类,包,接口,请各举5个

答:常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer
常用的包:java.lang java.awt java.io java.util java.sql
常用的接口:Remote List Map Document NodeList

  1. 多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
同步的实现方面有两种,分别是synchronized,wait与notify

  1. Sting与StingBuffer的区别。

答:Sting的长度是不可变的,StingBuffer的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法

  1. Java 的跨平台是通过什么实现的?

通过在不同平台上安装相应的 Java 虚拟机实现的;虚拟机可以将字节码文件(class)解释成相应平台的机器 语言并执行。

  1. public class 的类名必须跟文件名保持一致吗?

public class 的类名必须跟文件名保持一致

  1. 一个 Java 源文件可以写多个 class 吗?编译后,会不会生成多个 class 文件?

一个 Java 源文件可以写多个 class 编译后会生成多个 class 文件

  1. 标识符能不能使用汉字开头?为什么?

可以,字母的含义包括:英文、汉字等(不建议大家使用汉字来定义标识符)

  1. byte,short,int,long 类型,分别占用几个字节?表数范围多大?

byte: 1个字节 -128~127
short: 2个字节 -215~215-1
int: 4个字节 -231~231-1
long: 8 个字节 -263~263-1
float:4 个字节
double:8 个字节

  1. 字符型变量几个字节? 这种写法对不? char c = “d”;

字符型变量占 2 个字节 写法不对,应该为 char c=‘d’;

  1. 布尔型变量占用空间是一位还是一个字节?

布尔型变量占一位

  1. 这种写法好不好? if(b==true)

不好,但是正确的写法。为了避免不小心写错成 if(b=true),一般程序员都直接写为 if(b)

  1. 类名的命名规则是? 方法名、变量名的命名规则是否一致? 常量的命名规则是?

类的命名规则:每个英文单词的首字母都大写 方法名、变量名的命名规则:第一个单词首字母小写,从第二个单词后,每个单词的首字母大写 常量的命名规则:字母全部大写

  1. 引用类型是占用几个字节?

引用数据类型占 4 个字节,用于存储对象的引用

  1. 算术运算符中类型提升是怎么回事?

a+b 返回什么类型? int a=3; long b=3;

  1. 关系运算符中,能不能这么写:“1<a<3”?

不能,应该写为 a>1&&a<3

  1. int 能否自动转换成 byte,short,char? 是否有一定条件才能转换?

不能 需要强制类型转换

  1. long 能自动转换成 int 吗?long 能自动转换成 float 吗?

Long 不可以自动转成 int long 可以自动转成 float

  1. 强制类型转换中,是否可能发生数据丢失?

可能发生数据丢失

  1. 布尔类型能否自动转换为 int? 如果不能,简述理由。

不能 因为类型不匹配

  1. switch 中的表达式的结果需要是什么类型?

byte,char,short,int jdk1.5 加入了枚举 jdk1.7 加入了 String

  1. 循环中,break 的作用是?continue 的作用是?

break 用于强行退出循环,不执行循环中剩余的语句
continue 用于跳过本次循环, 不执行 continue 后的语句, 继续下一次循环

  1. 方法的定义中,return 是否必须?它有什么作用?

不是必须
return 语句终止方法的运行并指定要返回的数据

  1. Java 中,参数的传递使用值传递还是引用传递?

值传递

  1. String 类的 trim()方法是什么作用?

返回字符串的副本,去掉字符串前后的空格

  1. StringBuffer 和 StringBuilder 的联系是?区别是?

StringBuffer 和 StringBuilder 都是可变字符序列,底层数组结构都是 char 类型的数组 区别:
StringBuffer:jdk1.0 版,线程安全,但是效率低
StringBuilder:jdk1.5 版,线程不安全,但是效率高

  1. System.currentTimeMillis()表示什么意思?

    返回以毫秒为单位的当前时间

  2. File 类的方法 mkdir 跟 mkdirs,有什么区别?

mkdir:只能在已经存的目录中创建文件夹
mkdirs:可以在不存的目录中创建文件夹

  1. 说出 ArrayLIst、LinkedList、Vector 的区别。

ArrayList、LinkedList 两者都实现了 List 接口,都具有 List 中元素有序、不唯一的特点。
ArrayList 实现了长度可变的数组,在内存中分配连续空间。遍历元素和随机访问元素的效率比较高;
LinkedList 采用链表存储方式。插入、删除元素时效率比较高

  1. 我有一些数据,需要频繁的查询,插入和删除操作非常少,并且没有线程之间的共 享,使用 List 下面的哪个实现类好一些?

ArrayList。ArrayList 实现了长度可变的数组,在内存中分配连续空间。遍历元素和随机访问元素的效率 比较高。

  1. equals 返回 true,hashcode 一定相等吗?

是的。

  1. HashSet 和 TreeSet 的区别
    HashSet:
    (1) 存储结构:采用 Hashtable 哈希表存储结构 (2) 优缺点:
    优点:添加速度快,查询速度快,删除速度快
    缺点:无序
    TreeSet
    (1) 存储结构: 采用二叉树的存储结构
    (2) 优缺点: 优点:有序(排序后的升序)查询速度比 List 快 (按照内容查询)
    缺点:查询速度没有 HashSet 快.

  2. Map 中,key 能否重复?如果重复,会有什么现象?

key:无序,唯一;
添加重复的 key 不报错,会把之前重复的 key 覆盖了。

  1. Set 和 Map 的集合类名称相似,有没有内在的联系?

HashMap 和 HashSet 这些集合类采用的是哈希表结构,需要用到 hashCode 哈希码和 equals 方法。

  1. Collection 和 Collections 有什么区别?

Collection 是 Java 提供的集合接口,存储一组不唯一,无序的对象。它有两个子接口 List 和 Set。
Java 中还有一个 Collections 类,专门用来操作集合类 ,它提供一系列静态方法实现对各种集合的搜索、排序、线程安 全化等操作。

  1. Vector 和 ArrayList 的区别和联系

实现原理相同,功能相同,都是长度可变的数组结构,很多情况下可以互用
两者的主要区别如下

  1. Vector 是早期 JDK 接口,ArrayList 是替代 Vector 的新接口
  2. Vector 线程安全,ArrayList 重速度轻安全,线程非安全
  3. 长度需增长时,Vector 默认增长一倍,ArrayList 增长 50%
  1. Hashtable 和 HashMap 的区别联系

实现原理相同,功能相同,底层都是哈希表结构,查询速度快,在很多情况下可以互用
两者的主要区别如下

  1. Hashtable 是早期 JDK 提供的接口,HashMap 是新版 JDK 提供的接口
  2. Hashtable 继承 Dictionary 类,HashMap 实现 Map 接口
  3. Hashtable 线程安全,HashMap 线程非安全
  4. Hashtable 不允许 null 值,HashMap 允许 null 值
  1. word 文档能使用字符流操作吗?为什么?

不能。因为 word 文档不是纯文本文件,除了文字还包含很多格式信息。不能用字符流操作。可以用字节流操 作。

  1. 流对象使用完后,一般要调用 close 方法关闭,释放资源。 这种做法对吗?

对。因为绝大多数流对象都打开了底层操作系统的 IO,如果不手动关闭,底层操 作 系统资源会一直使用,造成资源浪费,最终造成宕机。

  1. InputStream 和 OutputStream 基本特点是?

二者都是【字节】输入输出流的抽象父类。以字节为单位处理数据,每次读取/写入一个字节。适合处理
二进制文件,如音频、视频、图片等。实现类有 FileInputStream 和 FileOutputStream 等

  1. Reader 和 Writer 的基本特点是?

二者都是【字符】输入输出流的抽象父类。以字符为单位处理数据,每次读取/写入一个字符。适合处理 文本文件。实现类有 FileReader 和 FileWriter 等。

  1. FileInputStream 和 FileOutputStream 的基本作用是?

二者都是【字节】输入输出流的实现类,其抽象父类是 InputStream 和 OutputStream。以字节为单位
处理数据,每次向/从指定文件读取/写入一个字节。适合处理二进制文件,如音频、视频、图片等。

  1. FileReader 和 FileWriter 的作用是?

二者都是【字符】输入输出流的实现类,其抽象父类是 Reader 和 Writer。以字符为单位处理数据,每次向/从指定文件读取/写入一个字符。适合处理文本文件。

  1. BufferInputStream 和 BufferedOutputStream 的特点是?

BufferInputStream 和 BufferedOutputStream 分别是【缓冲】字节输入输出流,还有【缓冲】字符输入输出流
(BufferReader 和 BufferedWriter)。 缓冲流是处理流,它不直接连接数据源/目的地,而是以一个节点流为参数,在节点流的基础上,提供一些简单操作。
先说不带缓冲的流的工作原理吧:它读取到一个字节/字符,就向用户指定的路径写出去,读一个写一个,所以就慢了。 带缓冲的流的工作原理:读取到一个字节/字符,先不输出,等凑足了缓冲的最大容量后一次性写出去,从而提高了工作 效率
优点:减少对硬盘的读取次数,降低对硬盘的损耗。

  1. unicode 字符集是几个字节表示一个字符?为什么需要 utf-8?

Unicode 字符集中 2 个字节表示一个字符。

  1. 说说:sleep、yield、join 方法的区别。

sleep():在指定时间内让线程暂停执行,进入阻塞状态。
在指定时间到达后进入就绪状态。线程调用 sleep()方法时,释放 CPU 当不释放对象锁(如果持有某个
对象的锁的话)。
join(): 当前线程等待调用此方法的线程执行结束再继续执行。如:在 main 方法中调用 t.join(),那 main
方法在此时进入阻塞状态,一直等 t 线程执行完,main 方法再恢复到就绪状态,准备继续执行。 yield(): 调用该方法的线程暂停一下,回到就绪状态。所以调用该方法的线程很可能进入就绪状态后马
上又被执行。

  1. wait、notify、notifyAll 是在 Object 类中定义的方法吗?作用分别是什么?

wait(),notify(),notifyAll()不属 于 Thread 类,而是属于 Object 类,也就是说每个对象都有 wait(),notify(),notifyAll()的功能。因为每个对像都有锁,锁是每个对像的基 础,而 wait(),notify(),notifyAll()都是跟锁有关的方法

  1. wait 方法被调用时,所在线程是否会释放所持有的锁资源? sleep 方法呢?

wait:释放 CPU,释放锁; sleep:释放 CPU,不释放锁。

  1. 谈谈对java多态的理解

同一个消息可以根据发送对象的不同而采用多种不同的行为方式,在执行期间判断所引用的对象的实际类型,根据其实际的类型调用其相应的方法。
作用:消除类型之间的耦合关系。实现多态的必要条件:继承、重写(因为必须调用父类中存在的方法)、父类引用指向子类对象

  1. final,finally,finalize的区别
  1. final:变量、类、方法的修饰符,被final修饰的类不能被继承,变量或方法被final修饰则不能被修改和重写。
  2. finally:异常处理时提供finally块来执行清除操作,不管有没有异常抛出,此处代码都会被执行。如果try语句块中包含return语句,finally语句块是在return之后运行;
  3. finalize:Object类中定义的方法,若子类覆盖了finalize()方法,在在垃圾收集器将对象从内存中清除前,会执行该方法,确定对象是否会被回收。
  1. 序列化Serializable 和Parcelable 的区别
  1. 序列化:将一个对象转换成可存储或可传输的状态,序列化后的对象可以在网络上传输,也可以存储到本地,或实现跨进程传输;
  2. 为什么要进行序列化:开发过程中,我们需要将对象的引用传给其他activity或fragment使用时,需要将这些对象放到一个Intent或Bundle中,再进行传递,而Intent或Bundle只能识别基本数据类型和被序列化的类型。
  3. Serializable:表示将一个对象转换成可存储或可传输的状态。
  4. Parcelable:与Serializable实现的效果相同,也是将一个对象转换成可传输的状态,但它的实现原理是将一个完整的对象进行分解,分解后的每一部分都是Intent所支持的数据类型,这样实现传递对象的功能。
  5. 区别:Serializable在序列化时会产生大量临时变量,引起频繁GC。Serializable本质上使用了反射,序列化过程慢。Parcelable不能将数据存储在磁盘上,在外界变化时,它不能很好的保证数据的持续性。
  6. 选择原则:若仅在内存中使用,如activity\service间传递对象,优先使用Parcelable,它性能高。若是持久化操作,优先使用Serializable
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值