vlambda博客
学习文章列表

java 面试--常见面试题(上)

  一般java的面试要涉及到以下几个内容:java基础知识,多线程,JVM,网络,数据结构,算法,分布式系统,设计题,数据库,常用的中间件,zk,缓存redis,消息中间件等。现在我们就基于这些内容分模块的看下常见的问题总结。

 

一.Java基础

 

1. Java创建一个类的方法有几种?

2. Java== equals的区别是什么?

3. 序列化的作用是什么?常见的序列化方法是什么?Java自带的序列化是怎么实现的?

4. 解释下重载和重写的区别?

5. 有了解过java的异常机制么?请结合项目描述一下你是怎么处理异常的?是否会自定义异常?

6. Object类有去了解么?该类有哪些常用的方法,分别是怎么实现的?

7. javahashcodeequals方法的作用?什么时候会用到?

8. String是一个基本类型么?那java的基本类型有哪些?StringstringBufferstringBuilder的区别是什么?

9. String str="i"String str=new String("i")一样吗?不同点主要在哪里呢?

10. 抽象类和接口的区别?抽象类一定要有抽象函数么?接口定义的变量一定是常量么?接口中可以定义函数的实现么?

11. finalstatic关键字有了解,在java中的作用。抽象类可以使用final修饰么?

12. final,finally,finalize分别是什么?

13. JavaIO流有了解过,实现一个按行读取数据的方式。

14. Java的反射原理是什么?GetclassclassforName的区别是什么?

15. 如何实现一个list类型的深拷贝?Javaclone接口的作用是什么?

16. Java的泛型的作用是什么?

17. Java的注解有了解,其底层的实现原理是什么?怎么定义一个注解?

18. Java中两个类的关系有多少种?有了解过设计模式么?

19. Javacollection有几种?Collectioncollections的区别是什么?

20. ArrayLsitLinkedListvector的区别?它们是线程安全的么?如果想要线程安全应该要怎么实现?

21. HashMap扩容机制?hashMap是线程安全的么?它和hashtable的区别是什么?hashMap keyvalue可以是null么?Hashmap的扩容一定是2^n么?1.8版本的优化点在哪里?什么时候链表转换为红黑树?什么时候红黑树转换为链表?Hashmapgetput方法是怎么实现的?

22. Queuepollremove方法的区别是什么?

23. Iterator是什么?和splitIterator的区别是什么?

24. ArrayList中怎么一边遍历一边删除?

25. Treemap linkedHashMap有什么作用?其实现的原理是什么?

26. HashSet的实现原理有了解?

27. 静态内部类和内部类的区别是什么?为什么内部类可以访问外部类?

28. 从安全性上说说java权限关键字privateprotecteddefaultpublic的区别?

29. 面向对象的概念是什么?Java的多态怎么实现?

30. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

 

二.多线程

 

1. Volatile的作用是什么?底层是怎么实现的?缓存的一致性协议是什么?有没有了解过内存屏障?

2. Synchronized 的原理有了解?和reentryLock的区别是什么?锁升级是指什么?

3. 并发和并行的概念有了解?Java实现并发的方式有几种?

4. 线程和进程的概念?守护线程是干什么的?常见的守护线程有哪些?

5. Java怎么创建一个线程,native关键字的作用是什么?Thread类中绝大部分的方法是native的,有了解过怎么实现的么?

6. Runnablecallable分别是什么?Future的作用是什么?

7. 线程的状态有哪些?是怎么转换的?Jvm怎么查看线程的运行状态?

8. Sleepwait的区别?Notifynotifyall的区别是啥?

9. AQS的源码有了解过?怎么实现一个公平锁和非公平锁?共享和非共享?

10. Condition的源码有了解么?什么是等待队列,什么是同步队列?

11. 多线程的三个基本特性是什么?Java是怎么实现原子性,有序性,一致性呢?

12. Thread 类中的startrun方法的区别是什么?

13. Threadlocal有了解过?其使用在哪些场景?ThreadlocalMapkey value是什么?怎么保证内存不会泄露

14. JavaCAS是怎么实现的?Atomic包中的atmoicinteger atmoicintegerFiledUpdater 的区别是什么?分别在什么场景下使用?

15. Java的线程池是怎么实现的?其原理是什么?线程池怎么设计核心线程数和最大线程数,拒绝策略怎么选择?怎么优雅关闭一个线程池?

16. 了解死锁么?怎么防止死锁?

17. ConcurrenthashMapput方法?其扩容过程有了解过?

18. Java安全的阻塞队列有哪些?分别提供了什么功能?

19. Java中提供了哪些线程安全的队列?

20. Fork-join框架有了解过?ParallelStream有使用过?

21. 简述一下JMMas-if-serial语义、happens-before模型?

三.JVM

Jvm是高级java程序员必备知识,了解jvm有利于了解java运行的情况,并分析出现的各种复杂问题。Jvm的面试一般会问垃圾回收器,双亲委派模型,线网问题定位,类加载过程。

 

1. JVM 的内存模型描述一下?

2. 什么情况下会发生堆溢出?什么情况下会发生栈溢出?

3. JVM内存为什么要分成新生代,老年代,持久代。新生代中为什么要分为EdenSurvivor

4. JVM 是怎么从新生代到老年代?一个完整的GC流程是怎样的?

5. 简述一下垃圾回收器?说下各自的优缺点?有了解过cmsG1么?能详细说明一下么?

6. 简述下垃圾回收算法?为什么新生代使用复制算法?

7. 简述一下类加载过程,重点说明一下双亲委派模型,怎么破坏双亲委派模型?Tomat是怎么破坏的呢?

8. 说说你了解的jvm参数和其作用?

9. Java的四种引用有了解么?引用队列怎么使用?作用是什么?

10. 怎么打出一个线程的堆栈信息?如果内存过高怎么分析?如果cpu过高怎么定位?