java面试总结(一)--java基础

java基础

1、java基本数据类型包括byte、int、char、long、float、double、boolean和short。(四类八种)
2、final、finally、finalize的区别:
final为修饰符,被final修饰的类不能被继承,被final修饰的方法不能被重写,被final修饰的变量只能被赋值一次(作为常量);
finally在异常处理时必然会执行;
finalize为每个object都有的方法,在垃圾回收器执行清理之前都会调用此方法。
3、StringBuilder和StringBuffer的区别?
StringBuffer的方法被synchronized修饰,是线程安全的。
4、HashTable和HashMap的区别:
底层都是哈希算法
HashTable线程安全,效率低,不能存储null键和null值;
HashMap线程不安全,效率高,允许存储null键和null值。
5、重载和重写:
重载是指在同一个类中,方法名相同,参数列表(个数、类型)不同的情行;
重写是指子父类中,子类定义了一个与父类一模一样的方法(参数列表,返回值均相同)。
6、java中有三种移位运算符
<< :左移运算符,num << 1,相当于num乘以2;
>>: 右移运算符,num >> 1,相当于num除以2;
>>>:无符号右移,忽略符号位,空位都以0补齐
7、说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢;
Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差;
LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
8、Collection 和 Collections的区别
Collection是集合类的上级接口,继承与他的接口主要有Set 和List;
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操
9、常见的集合
单列集合:List,Set
双列集合:Map
常见实现类:
List——ArrayList、LinkedList、Vector
Set——HashSet、TreeSet
Map——HashMap、HashTable
10、泛型的作用
泛型使编译器可以在编译期间对类型进行检查以提高类型安全,减少运行时由于对象类型不匹配引发的异常。
11、获取字节码对象的方式
通过Object类的getClass()方法获取
通过类名调用属性class来获取
通过Class类的静态方法forName()来获取
12、==和equals的区别:
基本数据类型只能用==比较;
引用数据类型中==比较的是地址值,equals没有重写的情况下也是比较地址值,如果重写了就是比较具体的值了
13、序列化与反序列化:
序列化:指把堆内存中的 Java 对象数据,通过某种方式把对象存储到磁盘文件中或者传递给其他网络节点(在网络上传输)。
反序列化:把磁盘文件中的对象数据或者把网络节点上的对象数据,恢复成Java对象模型的过程。
对象必须实现Java.lang.Serializable 接口,通过对象输出流或输入流进行序列化或反序列化操作,如果某些数据不需要做序列化,可在字段面前加上transient修饰
14、迭代器并发修改异常
当使用迭代器遍历集合的时候,使用了集合中的 增加/删除 方法,导致并发修改异常;
使用Iterator的子接口ListIterator来实现向集合中添加
15、运行时异常与一般异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
16、xml解析的两种方式:
dom解析将文档一次性加载到内存中形成dom树,文件太大容易造成内存溢出;
sax解析是逐行进行解析,对大文件读取效率高,但只能读取不能修改(dom可随意修改)
17、反射机制是什么?
java运行时动态的创建类的对象,并调用其参数或者方法的机制
常见例子:JDBC加载数据库驱动
18、native方法是什么?
非java代码实现的方法
19、Java的访问权限修饰符
public所有的类都可以访问
protected同一包内的类及所以子类可以访问
默认同一包内的类可以访问
private当前类可以访问
20、接口和抽象类的区别
(1)抽象类要被继承,接口要被实现
(2)接口中的方法都是抽象的,抽象类中可以有非抽象方法
(3)接口中定义的变量只能是静态的公共的常量,抽象类中的变量是普通的变量
(4)抽象类中可以没有抽象方法
21、java 中 IO 流分为几种
Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。Java中其他多种多样变化的流均是由它们派生出来的
22、BIO、NIO、AIO 有什么区别
BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。
NIO:Non IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。
AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。
23、try catch finally,try里有return,finally还执行么?
会执行,并且finally的执行早于try中的return
finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值