1、JAVA中的几种基本数据类型是什么,各自占用多少字节。
2、String类能被继承吗,为什么。
3、String,Stringbuffer,StringBuilder的区别。
4、ArrayList和LinkedList有什么区别。
5、讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当new的时候,他们的执行顺序。
6、用过哪些Map类,都有什么区别,HashMap是线程安全的吗,并发下使用的Map是什么,他们内部原理分别是什么,比如存储方式,hashcode,扩容,默认容量等。
7、JAVA8的ConcurrentHashMap为什么放弃了分段锁,有什么问题吗,如果你来设计,你如何设计。
它摒弃了Segment(锁段)的概念,而是启用了一种全新的方式实现,利用CAS算法,段锁性能也不是很高,而CAS操作是CPU支持的操作,是一种原子操作
1、下面讲一下concurrentHashMap的结构
ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成(一个segment里面有一个hashEntry数组)。Segment是一种可重入锁ReentrantLock,在ConcurrentHashMap里扮演锁的角色,HashEntry则用于存储键值对数据。一个ConcurrentHashMap里包含一个Segment数组,Segment的结构和HashMap类似,是一种数组和链表结构
8、有没有有顺序的Map实现类,如果有,他们是怎么保证有序的。
TreeMap,有序,通过红黑树的左旋或者右旋实现有序(根节点大于他的左节点)
LinkedHashMap: 保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历的时候会比HashMap慢。key和value均允许为空,非同步的。
https://blog.csdn.net/chenssy/article/details/26668941
9、抽象类和接口的区别,类可以继承多个类么,接口可以继承多个接口么,类可以实现多个接口么。
http://www.importnew.com/12399.html
10、继承和聚合的区别在哪。
11、IO模型有哪些,讲讲你理解的nio ,他和bio,aio的区别是啥,谈谈reactor模型。
内存IO、网络IO、磁盘IO
1.阻塞IO模型:请求发起,内核缓存中没有数据请求磁盘,等待磁盘返回成功(阻塞socket、Java BIO,进程阻塞挂起不消耗cpu)
2.非阻塞IO:请求发起,内核缓存中没有数据,返回错误,进程轮询调用,消耗cpu直查询到磁盘数据并返回
3.IO复用模型:有一个select函数,它是一个文件描述的集合,对这些的文件描述符进行循环监听,当某个文件描述符就绪的时候,就对这个文件描述符进行处理(属于阻塞的IO。但是由于它可以对多个文件描述符进行阻塞监听,所以它的效率比阻塞IO模型高效) NIO
4.信号驱动IO:安装一个信号处理函数,进程继续运行并不阻塞,当IO时间就绪,进程收到SIGIO信号。然后处理IO事件。
5.异步IO模型:程序调用aio_read函数,该函数取数据,同时应用程序做其他的事情,当数据准备完毕,通知应用程序
12、反射的原理,反射创建类实例的三种方式是什么。
13、反射中,Class.forName和ClassLoader区别 。
Class.forName(className)方法,内部实际调用的方法是Class.forName(className,true,classloader);
第2个boolean参数表示类是否需要初始化, Class.forName(className)默认是需要初始化。
一旦初始化,就会触发目标对象的 static块代码执行,static参数也也会被再次初始化。
ClassLoader.loadClass(className)方法,内部实际调用的方法是 ClassLoader.loadClass(className,false);
第2个 boolean参数,表示目标对象是否进行链接,false表示不进行链接,由上面介绍可以,
不进行链接意味着不进行包括初始化等一些列步骤,那么静态块和静态对象就不会得到执行
数据库链接使用 Class.forName(className)
14、描述动态代理的几种实现方式,分别说出相应的优缺点。
15、动态代理与cglib实现的区别。
jdk动态代理是通过反射机制,生成一个实现代理接口的匿名类
16、为什么CGlib方式可以对接口实现代理。
cglib通过字节码技术,为类创建一个子类,子类中采用方法拦截技术,拦截父类中所有方法的调用,所以可以对接口实现代理
17、final的用途。
1、被final修饰的类不可以被继承
2、被final修饰的方法不可以被重写
3、被final修饰的变量不可以被改变
18、写出三种单例模式实现 。
19、如何在父类中为子类自动完成所有的hashcode和equals实现?这么做有何优劣。
20、请结合OO设计理念,谈谈访问修饰符public、private、protected、default在应用设计中的作用。
21、深拷贝和浅拷贝区别。
22、数组和链表数据结构描述,各自的时间复杂度。
23、error和exception的区别,CheckedException,RuntimeException的区别。
24、请列出5个运行时异常。
25、在自己的代码中,如果创建一个java.lang.String类,这个类是否可以被类加载器加载?为什么。
26、说一说你对java.lang.Object对象中hashCode和equals方法的理解。在什么场景下需
27、要重新实现这两个方法。
28、在jdk1.5中,引入了泛型,泛型的存在是用来解决什么问题。
可以在编译期对类型进行检查,减少运行期因为参数类型问题所引发的异常
29、这样的a.hashcode() 有什么用,与a.equals(b)有什么关系。
30、有没有可能2个不相等的对象有相同的hashcode。
有
31、Java中的HashSet内部是如何工作的。
32、什么是序列化,怎么序列化,为什么序列化,反序列化会遇到什么问题,如何解决。
33、java8的新特性。
34、java的四种引用
强引用: 如Object object = new Object() 这个Object()就是一个强引用了,如果一个对象具有强引用。垃圾回收器就不会去回收有强引用的对象
弱引用:只要垃圾回收器在自己的内存空间中线程检测到了,就会立即被回收
软引用:如果内存空间足够,那么垃圾回收器就不会回收它
虚引用:如果一个对象只具有虚引用,那么它就和没有任何引用一样,随时会被jvm当作垃圾进行回收
网友评论