Java面经1

Java基础

1、为什么重写equals还要重写hashcode
1)需要保证hashcode不同,equals一定不同;equals相同,hashcode一定相同。
对于Set、Hash集合,首先判断hashcode是否相等,来作为是否是equals的必要条件来加速判断(比较hashcode(int),比equals而言快很多),若不重写hashcode方法,当equals为相等对象时,hashcode不同,会导致加入Set和Hash集合的对象不能被read。
2、说一下map的分类和常见的情况
HashTable、HashMap、ConcurrentHashMap
3、Object若不重写hashCode()的话,hashCode()如何计算出来的?
本地方法、类似于内存地址
4、==比较的是什么?
地址
5、若对一个类不重写,它的equals()方法是如何比较的?
用Object的,比较地址
6、java8新特性
1)lambda
2)元空间
3)接口新增default方法,集合foreach,兼容
7、说说Lamda表达式的优缺点。
1)代码量少了,可读性降低
2)不止一个抽象方法的时候无法使用
8、一个十进制的数在内存中是怎么存的?
二进制、补码
9、为啥有时会出现4.0-3.6=0.40000001这种现象?
用二进制无法精确的表示小数。BigDecimal
10、Java支持的数据类型有哪些?什么是自动拆装箱?
整型:byte(8bit)、char(0~216)、short(-215 ~ 215-1)、int(32bit)
11、什么是值传递和引用传递?
值传递:基本数据类型
引用传递:对象
12、数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList?
Array:支持基本数据类型
ArrayList:对Array的封装、会自动扩展数组
除非要创建基本类型的数组以及追求效率,否则都用ArrayList。
13、你了解大O符号(big-O notation)么?你能给出不同数据结构的例子么?
O(n) 复杂度(时间、空间),基于要操作的数据的数量
14、String是最基本的数据类型吗?
不是,char[]
15、int 和 Integer 有什么区别
int基本数据类型、Integer包装类型。
自动装箱:jvm对int类型的数据使用Integer.valueOf(),自动装箱成Integer类型
自动拆箱:jvm对Integer的类型使用intValue(),自动拆箱成int类型
16、String 和StringBuffer的区别
String:char[] length和当前的字符串长度一致,不会扩展字符串长度。是一个不可变的类,线程安全的。如果对字符串进行改变,则相当于重新生成一个char[]。
StringBuffer:char[] 会预留16个长度,会自动扩展长度;线程安全的。
17、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
new String(str.getBytes(“ISO-8859-1”), “GBK”) //ISO-8859->GBK,try
19、&和&&的区别?
&是位运算符也可以作为boolean符,但不会短路运算,
&&是boolean的运算符、短路运算
20、在Java中,如何跳出当前的多重嵌套循环?
可以为循环命名,break:XX。或者用个flag变量。
21、你能比较一下Java和JavaSciprt吗?
JavaScirpt:嵌入Web 页面中的基于对象和事件驱动的解释性语言,无法独立运行,解释性编程语言,其源代码不需经过编译,由浏览器解释执行
Java:面向对象的、经过编译、需要JVM。
22、简述正则表达式及其用途。
用作字符串格式校验,比如电话号码和email
23、Java中是如何支持正则表达式操作的?
String类提供了支持正则表达式操作的方法,包括:matches()、replaceAll()、replaceFirst()、split();
Pattern、Matcher(提供详细信息)。
1)Pattern.matcher(reg,input);//不能重用Patter
2)Pattern p=Pattern.compile(reg);
Matcher m=p.matchers(input);
boolean result=m.matchs();

关键字

1、介绍一下Synchronized锁,如果用这个关键字修饰一个静态方法,锁住了什么?如果修饰成员方法,锁住了什么?
synchronized是一个可重入锁,对对象加锁,实现是通过为对象生成一个monitor,将对象的阻塞的monitor加入等待队列。
静态方法:锁住这XX.Class这个对象
成员方法:锁住实例化之后的这个对象
2、介绍一下volatile?
保证了程序的一致性和顺序性。不会重排指令,对volatile对象的读和写均从主内存操作,而不会通过工作内存。
3、锁有了解嘛,说一下Synchronized和lock
synchronized可重入锁,通过jvm实现,jvm为每个对象均生产了对象头,在申请锁的时候生成monitor,通过对monitor的申请和释放实现锁。
lock的是java中的一个接口,通过AQS实现锁。
AQS实现了同步的队列,通过volatile关键字表示头尾节点与是否阻塞的状态,链表。
4、讲一讲Java里面的final关键字怎么用的?
修饰变量,表示初始化之后不可以被改变。
修饰方法,表示不可以被重写。
修饰类,表示不可以被继承。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章