java 面试--常见面试题(上)
一般java的面试要涉及到以下几个内容:java基础知识,多线程,JVM,网络,数据结构,算法,分布式系统,设计题,数据库,常用的中间件,zk,缓存redis,消息中间件等。现在我们就基于这些内容分模块的看下常见的问题总结。
一.Java基础
1. Java创建一个类的方法有几种?
2. Java中== 和equals的区别是什么?
3. 序列化的作用是什么?常见的序列化方法是什么?Java自带的序列化是怎么实现的?
4. 解释下重载和重写的区别?
5. 有了解过java的异常机制么?请结合项目描述一下你是怎么处理异常的?是否会自定义异常?
6. Object类有去了解么?该类有哪些常用的方法,分别是怎么实现的?
7. java的hashcode和equals方法的作用?什么时候会用到?
8. String是一个基本类型么?那java的基本类型有哪些?String和stringBuffer和stringBuilder的区别是什么?
9. String str="i"与 String str=new String("i")一样吗?不同点主要在哪里呢?
10. 抽象类和接口的区别?抽象类一定要有抽象函数么?接口定义的变量一定是常量么?接口中可以定义函数的实现么?
11. final、static关键字有了解,在java中的作用。抽象类可以使用final修饰么?
12. final,finally,finalize分别是什么?
13. Java的IO流有了解过,实现一个按行读取数据的方式。
14. Java的反射原理是什么?Getclass和classforName的区别是什么?
15. 如何实现一个list类型的深拷贝?Java的clone接口的作用是什么?
16. Java的泛型的作用是什么?
17. Java的注解有了解,其底层的实现原理是什么?怎么定义一个注解?
18. Java中两个类的关系有多少种?有了解过设计模式么?
19. Java的collection有几种?Collection和collections的区别是什么?
20. ArrayLsit、LinkedList和vector的区别?它们是线程安全的么?如果想要线程安全应该要怎么实现?
21. HashMap扩容机制?hashMap是线程安全的么?它和hashtable的区别是什么?hashMap key和value可以是null么?Hashmap的扩容一定是2^n么?1.8版本的优化点在哪里?什么时候链表转换为红黑树?什么时候红黑树转换为链表?Hashmap的get和put方法是怎么实现的?
22. Queue中poll和remove方法的区别是什么?
23. Iterator是什么?和splitIterator的区别是什么?
24. ArrayList中怎么一边遍历一边删除?
25. Treemap 和linkedHashMap有什么作用?其实现的原理是什么?
26. HashSet的实现原理有了解?
27. 静态内部类和内部类的区别是什么?为什么内部类可以访问外部类?
28. 从安全性上说说java权限关键字private,protected,default,public的区别?
29. 面向对象的概念是什么?Java的多态怎么实现?
30. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
二.多线程
1. Volatile的作用是什么?底层是怎么实现的?缓存的一致性协议是什么?有没有了解过内存屏障?
2. Synchronized 的原理有了解?和reentryLock的区别是什么?锁升级是指什么?
3. 并发和并行的概念有了解?Java实现并发的方式有几种?
4. 线程和进程的概念?守护线程是干什么的?常见的守护线程有哪些?
5. Java怎么创建一个线程,native关键字的作用是什么?Thread类中绝大部分的方法是native的,有了解过怎么实现的么?
6. Runnable和callable分别是什么?Future的作用是什么?
7. 线程的状态有哪些?是怎么转换的?Jvm怎么查看线程的运行状态?
8. Sleep和wait的区别?Notify和notifyall的区别是啥?
9. AQS的源码有了解过?怎么实现一个公平锁和非公平锁?共享和非共享?
10. Condition的源码有了解么?什么是等待队列,什么是同步队列?
11. 多线程的三个基本特性是什么?Java是怎么实现原子性,有序性,一致性呢?
12. Thread 类中的start和run方法的区别是什么?
13. Threadlocal有了解过?其使用在哪些场景?ThreadlocalMap的key 和value是什么?怎么保证内存不会泄露
14. Java的CAS是怎么实现的?Atomic包中的atmoicinteger 和atmoicintegerFiledUpdater 的区别是什么?分别在什么场景下使用?
15. Java的线程池是怎么实现的?其原理是什么?线程池怎么设计核心线程数和最大线程数,拒绝策略怎么选择?怎么优雅关闭一个线程池?
16. 了解死锁么?怎么防止死锁?
17. ConcurrenthashMap的put方法?其扩容过程有了解过?
18. Java安全的阻塞队列有哪些?分别提供了什么功能?
19. Java中提供了哪些线程安全的队列?
20. Fork-join框架有了解过?ParallelStream有使用过?
21. 简述一下JMM,as-if-serial语义、happens-before模型?
三.JVM
Jvm是高级java程序员必备知识,了解jvm有利于了解java运行的情况,并分析出现的各种复杂问题。Jvm的面试一般会问垃圾回收器,双亲委派模型,线网问题定位,类加载过程。
1. JVM 的内存模型描述一下?
2. 什么情况下会发生堆溢出?什么情况下会发生栈溢出?
3. JVM内存为什么要分成新生代,老年代,持久代。新生代中为什么要分为Eden和Survivor?
4. JVM 是怎么从新生代到老年代?一个完整的GC流程是怎样的?
5. 简述一下垃圾回收器?说下各自的优缺点?有了解过cms和G1么?能详细说明一下么?
6. 简述下垃圾回收算法?为什么新生代使用复制算法?
7. 简述一下类加载过程,重点说明一下双亲委派模型,怎么破坏双亲委派模型?Tomat是怎么破坏的呢?
8. 说说你了解的jvm参数和其作用?
9. Java的四种引用有了解么?引用队列怎么使用?作用是什么?
10. 怎么打出一个线程的堆栈信息?如果内存过高怎么分析?如果cpu过高怎么定位?