2020 年 Java 面试题集锦(金九银十)

1,310 阅读6分钟

前言:

马上到今年的金九银十了,又是跳槽的好季节,准备跳槽的同学都摩拳擦掌准备大面好几场, 为大家准备了精选的面试题。

本套Java面试题大全总共分为以下这六个模块:

  • Java基础面试题
  • 多线程面试题
  • Redis面试题
  • 数据结构与算法
  • Java异常面试题
  • JVM面试题

一、Java基础面试题

1、&和&&的区别?

2、int和 Integer 有什么区别?(基本数据类型有哪些?)(String不是基本数据类型)

3、String、StringBuffer、 StringBuilder 的区别?

4、String 类的常用方法都有那些?

5、String 字符串修改实现的原理?

6、两个对象的 hashCode() 相同,则 equals() 也一定为 true 吗?

7、解释下什么是面向对象?面向对象和面向过程的区别?

8、Java 是否支持多继承?

9、什么是构造函数?什么是构造函数重载?

10、Java 的泛型是如何工作的 ? 什么是类型擦除 ?

11、什么是泛型中的限定通配符和非限定通配符 ?

12、Java 中的 IO 流的分类?

二、多线程面试题

1、并发编程三要素?

2、实现可见性的方法有哪些?

3、多线程的价值?

4、创建线程的有哪些方式?

5、创建线程的三种方式的对比?

6、线程的状态流转图

7、Java线程具有五中基本状态

8、什么是线程池?有哪几种创建方式?

9、四种线程池的创建

10、线程池的优点?

11、常用的并发工具类有哪些?

12、CyclicBarrier和CountDownLatch的区别

13、synchronized的作用?

14、volatile关键字的作用

15、什么是CAS

16、CAS的问题

17、什么是Future?

18、什么是AQS

19、AQS支持两种同步方式:

20、ReadWriteLock是什么

21、FutureTask是什么

22、synchronized和ReentrantLock的区别

23、什么是乐观锁和悲观锁

24、线程B怎么知道线程A修改了变量

25、synchronized、volatile、CAS比较

26、sleep方法和wait方法有什么区别?

27、ThreadLocal是什么?有什么用?

28、为什么wait()方法和notify()/notifyAll()方法要在同步块中被调用

29、多线程同步有哪几种方法?

30、线程的调度策略

32、Linux环境下如何查找哪个线程使用CPU最长

33、Java死锁以及如何避免?

34、死锁的原因

35、怎么唤醒一个阻塞的线程

36、不可变对象对多线程有什么帮助

37、什么是多线程的上下文切换

38、如果你提交任务时,线程池队列已满,这时会发生什么

39、Java中用到的线程调度算法是什么

40、什么是线程调度器(Thread Scheduler)和时间分片(Time Slicing)?

41、什么是自旋

42、线程类的构造方法、静态块是被哪个线程调用的

43、同步方法和同步块,哪个是更好的选择?

44、Java线程数过多会造成什么异常?

三、Redis面试题

1、redis常见性能问题和解决方案:

2、mySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据

3、请用Redis和任意语言实现一段恶意登录保护的代码,限制1小时内每用户Id最多只能登录5次。具体登录函数或功能用空函数即可,不用详细写出。

4、为什么redis需要把所有数据放到内存中?

5、redis的并发竞争问题如何解决?

6、redis事物的了解CAS(check-and-set 操作实现乐观锁 )?

7、redis持久化的几种方式

8、redis的缓存失效策略和主键失效机制

9、Redis集群方案什么情况下会导致整个集群不可用?

10、说说Redis哈希槽的概念?

四、数据结构与算法:

1、常见的几大排序及查找算法及其时间复杂度?

2、求数组中最长连续序列长度

3、在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序, 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

4、两个栈实现一个队列。(美团、小米) 扩展:两个队列如何实现一个栈?

5、链表反转(单项链表的反转和双向链表的反转)

6、给Map排序---按照key的字母后按照格式[k1=v1:k2=v2]输出(阿里旅行)

五、Java异常面试题:

1、Error 和 Exception 区别是什么?

2、运行时异常和一般异常(受检异常)区别是什么?

3、JVM 是如何处理异常的?

4、throw 和 throws 的区别是什么?

5、final、finally、finalize 有什么区别?

6、NoClassDefFoundError 和 ClassNotFoundException 区别?

7、try-catch-finally 中哪个部分可以省略?

8、try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?

9、类 ExampleA 继承 Exception,类 ExampleB 继承ExampleA?

10、常见的 RuntimeException 有哪些?

11、Java常见异常有哪些?

六、JVM面试题:

1、Java内存区域

  • 说一下 JVM 的主要组成部分及其作用?
  • 说一下 JVM 运行时数据区?
  • 深拷贝和浅拷贝?
  • 说一下堆栈的区别?
  • 队列和栈是什么?有什么区别?

2、HotSpot虚拟机对象探秘

  • 对象的创建
  • 为对象分配内存
  • 处理并发安全问题
  • 对象的访问定位

3、内存溢出异常

Java会存在内存泄漏吗?请简单描述

4、垃圾收集器

  • 简述Java垃圾回收机制
  • GC是什么?为什么要GC
  • 垃圾回收的优点和原理。并考虑2种回收机制
  • 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
  • Java 中都有哪些引用类型?
  • 怎么判断对象是否可以被回收?
  • 在Java中,对象什么时候可以被垃圾回收
  • JVM中的永久代中会发生垃圾回收吗
  • 说一下 JVM 有哪些垃圾回收算法?
  • 说一下 JVM 有哪些垃圾回收器?
  • 详细介绍一下 CMS 垃圾回收器?
  • 新生代垃圾回收器和老年代垃圾回收器都有哪些?有什么区别?
  • 简述分代垃圾回收器是怎么工作的?

5、内存分配策略

简述java内存分配与回收策率以及Minor GC和Major GC

  • 对象优先在 Eden 区分配
  • 大对象直接进入老年代
  • 长期存活对象将进入老年代

6、虚拟机类加载机制

  • 简述java类加载机制?
  • 描述一下JVM加载Class文件的原理机制
  • 什么是类加载器,类加载器有哪些?
  • 说一下类装载的执行过程?
  • 什么是双亲委派模型?

7、JVM调优

  • 说一下 JVM 调优的工具?

  • 常用的 JVM 调优的参数都有哪些?


    我是提莫

    一个节操泛滥,一身凛然正气,刚正不阿的Java程序员



``` 上述问到的面试题答案&最新2020整理收集的一些面试题(都整理成文档),有需要的可以关注公众号:JavaTimo 回复:2020 希望对大家有所帮助,有用的话点赞给我支持! ```