1、java中++和--的前缀和后缀有什么区别
在前,先自增/自减 ,再运算;
在后,先运算,在自增/自减。
2、java的基本数据类型有哪些,分别占多少内存
byte(1字节),short(2字节),int(4字节),long(8字节),float(4字节),double(8字节),
boolean(4字 节),char(2字节)
3、java中有哪些循环,有什么区别
for while do..while 如果已知循环次数,for循环比较适合,不知循环次数,用wilie循环
4、continue和break有什么区别
前者是跳出本次循环,break是结束循环
5、short s = s + 1 和 short s += 1 有什么区别?
前者s是short类型,后者是int类型,运算过程中自动强转为int类型,前者两次运算,后者一次运算
6、&&和&,||和|有什么区别
& 逻辑与,&& 短语与,左右条件都成立才成立,&左边条件不符合适合也执行右边选项,&&与不会;
| 逻辑或,|| 逻辑或,左右条件一边成立就成立,|左边条件不符合适合也执行右边选项,||不会;
7、讲讲遍历map的几种方法?
普通的foreach循环,使用keySet()方法,遍历key
把所有的键值对装入迭代器中,然后遍历迭代器
分别得到key和value
entrySet()方法
8、HashMap的存储原理?
一维数组+单向链表+红黑树,通过key的hashcode计算下标,判断是否有数据,没有数据直接存放,有数据调用key的equals进行比较,如果相等新值覆盖旧值,不等放在后面,形成单向链表,链表长度超过8转化为红黑树
9、抽象类的接口的区别?
a、接口使用interface关键字,抽象类使用abstract关键字
b、接口只能有常量,抽象类可以有变量
c、接口没有构造方法,抽象类有
d、接口中抽象方法只能是public,抽象类可以是其他
e、接口可以多实现,抽象类中只能单继承
f、接口中有默认方法,抽象类没有
g、抽象类有普通方法,接口只有默认方法,静态方法,抽象方法
10、HashMap\Hashtable\ConcurrentHashMap的区别
a、hashmap是非线程安全的,hashtable线程安全的,concurrenthashmap是hashmap的子类,也是线程安全的
b、hashmap性能高于hashtable,concurrenthashmap性能高于hashtable,hashtable锁整个集合,concurrenthashmap将集合分多段锁
c、hashmap能接受空键跟值,hashtable不能
11、解释下事务的ACID、事务并发有哪些问题,隔离级别有哪些
a、原子性:要不全部成功要不全部失败
一致性:系统从一个一致性的状态转移到另一个一致性的状态
隔离性:在事务提交之前,不允许把该事务对数据的任何改变提交给其他事务
持久性:事务一旦提交,将永久保存在数据库中
b、脏读,事务a读取到事务B已修改但未提交的事务
丢失修改,两事务同时修改同一数据,后面事务覆盖前面
不可重复读,一次事务多次读取数据的数据不一致
幻读,一次事务多次读取数据多出不存在数据
12、== 和 equals 的区别是什么?
==如果比基础数据类型,比的是值,如果比引用数据类型,比的是地址
.equals默认比值,string重写了.equals地址,比的是地址
13、java 中 IO 流分为几种?
字节流跟字符流,字节流分为inputstream和outputstream,字符流分为reader流和writer流
14、Collection 和 Collections 有什么区别?
前者是接口,后者是工具包
15、List、Set、Map 之间的区别是什么?
list集合是有序的、可重复、可随机访问的,set集合是不可重复、不可随机访问的
map集合是键值对结构,键不可重复,通过键访问
16、HashMap 和 Hashtable 有什么区别?
a、hashMap和hashtable数据结构跟用法相似
b、hashmap是非线程安全的,hashtable是线程安全的
c、hashmap性能高与hashtable,hashmap能接受空键跟值,hasptable不能
17、ArrayList 和 LinkedList 的区别是什么?
用法差不多,数据结构不同,优缺点不同,arraylist访问速度快,插入删除慢,linkedlist插入删除快,不需要移动数据,只用修改前后指针,访问慢,一个个遍历
18、迭代器 Iterator 是什么?
Iterator接口主要方法bollean hasNext()判断是否有下一个 T next()返回当前数据 可迭代,用于返回迭代器foreach循环中的对象,必须实现该接口
19、ArrayList 和 Vector 的区别是什么?
数据结构都是数组,使用方法相同
ArrayList是非线程安全,Vector线程安全,方法上有synchronized关键字,ArrayList性能高于Vector Vector扩容是两倍,可以设置
20、什么是反射?
反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意个对象,都能够调用它的任意一个方法。在java中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。
21、什么是 java 序列化?什么情况下需要序列化?
将java对象转化为二进制数据或文件的过程
22、为什么要使用克隆?如何实现对象克隆?
对象的拷贝需要使用克隆,如果想对一个对象进行处理,又想保留原有的数据进行接下来的操作,就需要使用克隆
浅克隆通过clone方法克隆出现的对象,实现Cloneable接口,重写克隆方法
深克隆通过反序列化实现
23、深拷贝和浅拷贝区别是什么?
浅克隆是增加了一个指针指向了已存在的地址,如果原地址改变,浅克隆出现的对象也随之改变
深克隆是增加一个指针并申请一个新的内存,使这个增加的指针指向新的内存
24、throw 和 throws 的区别?
throw抛出异常,用在方法中
throws声明异常,向上抛出,不处理异常,交给上一级处理,一般用在方法声明上
25、常见的异常类有哪些?
runtimeExcetion,NullPointerExcetion,Excetion,ClassNotFoundExcetion,NumberFormatExcetion
26、重写和重载的区别
重写放生在父子关系中,重载发生在同类中;
重写要求方法名相同,参数列表相同,重载是方法名相同,参数列表\参数类型\参数数量不同
27、ArrayList的扩容机制
当数据个数超过数组的初始长度后,ArrayList集合会自动扩容,新容量是原本容量的1.5呗,创建新数组,将原先的数据复制到新数组
28、hashmap是怎么扩容的,为什么是2的冥
因为Hashmap计算存储位置时,使用了(n - 1) & hash。只有当容量n为2的幂次方,n-1的二进制会全为1,位运算时可以充分散列,避免不必要的哈希冲突,所以扩容必须2倍就是为了维持容量始终为2的幂次方。
29、讲一下对面向对象的了解
面向对象是一种思想,一切皆为对象,贴近人的思维,便于大型项目的设计和管理。
面向对象分为封装,继承,多态。
封装: 封:信息隐藏,属性私有化,提供get和set对其访问,提高数据安全性。
装:将属性和方法包装到类中统一管理。
继承: 子类继承父类的属性和方法。
作用:提高代码复用性,维护性。
应用:设计系统时,多个类出现重复的属性和方法,考虑定义父类中。
多态:对于同一方法根据对象类型的不同进行不同实现,提高程序的灵活性,编写更通用的 代码,将父类引用指向子类对象。
实现:1.子类继承父类,2.子类重写父类方法,3.子类对象赋值给父类引用。
应用:将方法的参数定义为父类的类型,运行时传入子类的对象。