美文网首页
Java面试题

Java面试题

作者: 李福来 | 来源:发表于2017-05-16 07:29 被阅读80次

集合类以及集合框架

HashMap与HashTable实现原理,线程安全性,hash冲突及处理算法;ConcurrentHashMap;

进程和线程的区别

Java的并发、多线程、线程模型;

什么是线程池,如何使用?

答:线程池就是事先将多个线程对象放到一个容器中,当使用的时候就不用new 线程而是直接去池中拿线程即可,节省了开辟子线程的时间,提高的代码执行效率。

数据一致性如何保证;
Synchronized关键字,类锁,方法锁,重入锁;

Java中实现多态的机制是什么;

如何将一个Java对象序列化到文件里;

说说你对Java反射的理解

答:Java 中的反射首先是能够获取到Java 中要反射类的字节码, 获取字节码有三种方法,
1.Class.forName(className)
2.类名.class
3.this.getClass()。然后将字节码中的方法,变量,构造函数等映射成相应的Method、Filed、Constructor 等类,这些类提供了丰富的方法可以被我们所使用。

多线程,如何实现一个ThreadLocal

ThreadLoacl,线程安全类。关于线程安全除了synchronized关键字,还有另一种方法就是ThreadLoacl,它通过为每个线程提供一个独立的变量副本,解决了变量并发访问的冲突问题。ThreadLocal比直接使用synchronized更方便,简单并且结果程序拥有更高的并发性。
java代码

1.private static final ThreadLocal threadSession = new ThreadLocal();    
2.    
3.public static Session getSession() throws InfrastructureException {    
4.    Session s = (Session) threadSession.get();    
5.    try {    
6.        if (s == null) {    
7.            s = getSessionFactory().openSession();    
8.            threadSession.set(s);    
9.        }    
10.    } catch (HibernateException ex) {    
11.        throw new InfrastructureException(ex);    
12.    }    
13.    return s;    
14.}

可以看到在getSession()方法中,首先判断当前线程中有没有放进去session,如果还没有,那么通过sessionFactory().openSession()来创建一个session,再将session set到线程中,实际是放到当前线程的ThreadLocalMap这个map中,这时,对于这个session的唯一引用就是当前线程中的那个ThreadLocalMap,而threadSession作为这个值的key,要取得这个session可以通过threadSession.get()来得到,里面执行的操作实际是先取得当前线程中的ThreadLocalMap,然后将threadSession作为key将对应的值取出。

同步的方法;

多进程开发以及多进程应用场景;

在Java中wait和sleep方法的不同

答:最大的不同是在等待时wait 会释放锁,而sleep 一直持有锁。wait 通常被用于线程间交互,sleep 通常被用于暂停执行。

synchronized 和volatile 关键字的作用

答:1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。
2)禁止进行指令重排序。

volatile 本质是在告诉jvm 当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;synchronized 则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。1.volatile 仅能使用在变量级别;synchronized 则可以使用在变量、方法、和类级别的2.volatile 仅能实现变量的修改可见性,并不能保证原子性;synchronized 则可以保证变量的修改可见性和原子性3.volatile 不会造成线程的阻塞;synchronized 可能会造成线程的阻塞。4.volatile 标记的变量不会被编译器优化;synchronized 标记的变量可以被编译器优化

服务器只提供数据接收接口,在多线程或多进程条件下,如何保证数据的有序到达;

ThreadLocal原理,实现及如何保证Local属性

String StringBuilder StringBuffer对比

java设计模式

Java如何调用c、c++语言

接口与回调

回调的原理;写一个回调demo;

泛型原理,举例说明
解析与分派;

抽象类与接口的区别;

应用场景;抽象类是否可以没有方法和属性;

静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?

修改对象A的equals方法的签名,那么使用HashMap存放这个对象实例的时候,会调用哪个equals方法

说说你对泛型的了解

Java的异常体系

如何控制某个方法允许并发访问线程的个数;

动态代理的区别,什么场景使用

相关文章

网友评论

      本文标题:Java面试题

      本文链接:https://www.haomeiwen.com/subject/wyikxxtx.html