助力秋招-独孤九剑荡剑式 | Java语言&基础面试题

qaning 2019-09-13

【所有答案更新在公众号,回复 JAVAPDF 可以下载】

大数据技术与架构

点击右侧关注,大数据开发领域最强公众号!

助力秋招-独孤九剑荡剑式 | Java语言&基础面试题

By 大数据技术与架构

场景描述:整个大数据开发技术栈我们从实时性的角度来看,主要包含了离线计算和实时计算两大部分,而整个大数据生态中的框架绝大部分都是用 Java 开发或者兼容了 Java 的 API 调用,那么作为基于 JVM 的第一语言 Java 就是我们绕不过去的坎,Java 语言的基础也是我们阅读源码和进行代码调优的基础。

关键词:面试 Java基础 声明:本文总结了个人在实际工作中作为面试官面试超过百人问的一些问题,同时整理和参考了网络上大量的博客和个人网站,参考列表在文末给出,在此感谢各位前辈的付出,如果造成了侵权行为,请联系我删除。个人版权所有,未经同意,不允许转载。

如果本文对你有帮助,别说话别谢我,转发给你的同事、朋友和同学。

助力秋招-独孤九剑荡剑式 | Java语言&基础面试题

另外本文不会给答案,少数难题会给出思路,你是个程序员了,要学会自己查资料。

Java语言基础

  • final, finally, finalize 的区别
  • final 在 java 中有什么作用,如何实现的
  • Exception、Error、运行时异常与一般异常有何异同
  • 请写出5种常见到的runtime exception
  • int 和 Integer 有什么区别,Integer的值缓存范围
  • 包装类,装箱和拆箱
  • 如何将字符串反转
  • java 中操作字符串都有哪些类,它们之间有什么区别
  • String 类的常用方法都有哪些
  • String、StringBuilder、StringBuffer
  • String str="i"与 String str=new String(“i”)有什么区别吗
  • String 属于基础的数据类型吗
  • 重载和重写的区别
  • 抽象类和接口有什么区别
  • 说说反射的用途及实现
  • 说说自定义注解的场景及实现
  • == 和 equals 的区别是什么?
  • 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
  • String中hashcode是怎么实现的
  • java 中的 Math.round(-1.5) 等于多少?
  • 抽象类必须要有抽象方法吗?
  • 普通类和抽象类有哪些区别?
  • 抽象类能使用 final 修饰吗?
  • 接口和抽象类有什么区别?
  • java 中 IO 流分为几种?
  • BIO、NIO、AIO 有什么区别?
  • Files的常用方法都有哪些?

集合

  • List 和 Set 区别
  • Set和hashCode以及equals方法的联系
  • List 和 Map 区别
  • Arraylist 与 LinkedList 区别
  • ArrayList 与 Vector 区别
  • HashMap 和 Hashtable 的区别
  • HashSet 和 HashMap 区别
  • HashMap 和 ConcurrentHashMap 的区别
  • HashMap 的工作原理及代码实现,什么时候用到红黑树
  • 多线程情况下HashMap死循环的问题
  • HashMap出现Hash DOS攻击的问题
  • ConcurrentHashMap 的工作原理及代码实现,如何统计所有的元素个数
  • 手写简单的HashMap
  • 看过那些Java集合类的源码
  • Collection 和 Collections 有什么区别
  • List、Set、Map 之间的区别是什么
  • TreeMap是如何实现的
  • HashMap 的实现原理,HashSet呢
  • 数组和 List 之间如何转换
  • Queue 中 poll()和 remove()的区别
  • 哪些集合类是线程安全的
  • 迭代器 Iterator 是什么
  • Iterator 怎么使用,有什么特点
  • Iterator 和 ListIterator 有什么区别
  • 怎么确保一个集合不能被修改

并发&多线程&锁

  • 线程、进程、程序的异同
  • 守护线程及其与非守护线程的区别
  • 线程和进程的概念、并行和并发的概念
  • 创建线程的方式及实现
  • 进程间通信的方式
  • 什么是多线程上下文切换
  • Java 中用到的线程调度算法是什么
  • 什么是线程饥饿
  • 你对线程优先级的理解是什么
  • sleep、join、yield 方法有什么区别
  • ThreadLocal变量,使用注意事项
  • interrupted 和 isInterrupted 方法有什么区别
  • 线程池的实现?四种线程池?重要参数及原理?任务拒接策略有哪几种?
  • 线程池的关闭方式,有什么区别
  • 线程池如何调优,最大数目如何确认?
  • 线程状态以及API怎么操作会发生这种转换
  • Java 线程池大小为何会大多被设置成 CPU 核心数 +1
  • 什么是 Callable、Future、FutureTask ?
  • Fork/Join 框架
  • 说说 CountDownLatch、CyclicBarrier 原理和区别
  • 说说 Semaphore 原理
  • 说说 Exchanger 原理
  • ThreadLocal 原理分析,ThreadLocal为什么会出现OOM,出现的深层次原理
  • 讲讲线程池的实现原理
  • 线程池的几种实现方式
  • 线程的生命周期,状态是如何转移的
  • 一个线程连着调用start两次会出现什么情况
  • synchronized的原理,ReentraLock的原理,二者异同,哪个是公平锁
  • volatile 实现原理
  • J.U.C并发包下用过哪个类,场景是什么
  • wait方法能不能被重写,wait能不能被中断
  • 常用的避免死锁方法
  • 分段锁的原理,锁力度减小的思考
  • Condition接口及其实现原理
  • LockSupport工具
  • 什么是悲观锁、乐观锁
  • 偏向锁,轻量级锁,重量级锁
  • 锁自旋,锁削除,锁膨胀
  • Java的内存模型(注意:这里不是说JVM的模型)
  • happens-before原则
  • SynchronizedMap 和 ConcurrentHashMap 什么区别
  • 常用的并发容器,重点CopyOnWriteArrayList
  • Java 提供了哪些阻塞队列的实现,各个阻塞队列的特性
  • AtomicInteger底层实现原理
  • CAS机制会出现什么问题
  • Java 并发工具类:Semaphore、CountDownLatch、CyclicBarrier、Exchanger

JVM

  • JVM 由哪些部分组成
  • JVM运行时内存区域划分
  • 内存溢出OOM和堆栈溢出SOE的示例及原因、如何排查与解决
  • 如何判断对象是否可以回收或存活
  • 常见的GC回收算法及其含义
  • 常见的JVM性能监控和故障处理工具类:jps、jstat、jmap、jinfo、jconsole等
  • JVM如何设置参数
  • JVM性能调优
  • 类加载器、双亲委派模型、一个类的生命周期、类是如何加载到JVM中的
  • 类加载的过程:加载、验证、准备、解析、初始化
  • 强引用、软引用、弱引用、虚引用
  • Java内存模型JMM
  • JDK8 之后 Perm Space 有哪些变动? MetaSpace ⼤⼩默认是⽆限的么? 还是你们会通过什么⽅式来指定⼤⼩?
  • Java 内存堆和栈区别
  • JAVA 对象创建的过程
  • OutOfMemoryError有哪些
  • 垃圾回收机制
  • 如何判断一个对象是否已经死去
  • 常用的垃圾回收器
  • G1 和 CMS 的区别
  • 对象分配规则是怎么样的
  • 如何排查线程 Full GC频繁的问题
  • 虚拟机类加载机制
  • 双亲委派模型
  • 如何破坏双亲委托模型,哪里遇到过这种情况?(Tomcat)
  • 了解虚拟机字节码执行引擎JIT

设计模式

  • 推荐一个Github仓库:
  • https://github.com/tim-chow/DesignPattern
  • 常见的设计模式
  • 设计模式的的六大原则及其含义
  • 常见的单例模式以及各种实现方式的优缺点,哪一种最好
  • 单例模式的9种写法(闭着眼睛写不出来的去面壁)
  • 设计模式在实际场景中的应用
  • Spring中用到了哪些设计模式
  • MyBatis中用到了哪些设计模式
  • 你项目中有使用哪些设计模式
  • 说说常用开源框架中设计模式使用分析
  • 动态代理很重要

Mysql

  • 数据库索引原理,什么是全文索引,全文索引中的倒排索引是什么原理
  • 数据库最佳左前缀原则是什么
  • 数据库的三大范式
  • 悲观锁和乐观锁的原理和应用场景
  • 左连接、右连接、内连接、外连接、交叉连接、笛卡儿积等
  • 一般情况下数据库宕机了如何进行恢复(什么是Write Ahead Log机制,什么是Double Write机制,什么是Check Point)
  • 什么是redo日志、什么是undo日志
  • 数据库中的隔离性是怎样实现的
  • 原子性、一致性、持久性又是如何实现的
  • 什么是组合索引,组合索引什么时候会失效
  • 数据库死锁如何解决
  • MySQL并发情况下怎么解决(通过事务、隔离级别、锁)
  • MySQL中的MVCC机制是什么意思,根据具体场景,MVCC是否有问题
  • MySQL数据库的隔离级别,以及如何解决幻读
  • MySQL 索引使用的注意事项
  • DDL、DML、DCL分别指什么
  • explain命令
  • 数据库事物ACID(原子性、一致性、隔离性、持久性)
  • 事物的隔离级别(读未提交、读已提交、可重复读、可序列化读)
  • 脏读、幻读、不可重复读
  • 说说分库与分表设计
  • 分库与分表带来的分布式困境与应对之策(如何解决分布式下的分库分表)
  • 说说 SQL 优化之道
  • MySQL遇到的死锁问题、如何排查与解决
  • 存储引擎的 InnoDB与MyISAM区别,优缺点,使用场景
  • 索引类别(B+树索引、全文索引、哈希索引)、索引的原理
  • 什么是自适应哈希索引(AHI)
  • 为什么要用 B+tree作为MySQL索引的数据结构
  • 聚集索引与非聚集索引的区别
  • 遇到过索引失效的情况没,什么时候可能会出现,如何解决
  • MySQL 主从复制的流程是怎么样的?如何保证复制过程中数据一致性?如何解决主从复制的延时性?
  • MySQL备份方式
  • limit 20000 加载很慢怎么解决
  • 选择合适的数据存储方案
  • 基于Mysql的分布式ID的设计方案
  • 常见的数据库优化方案,在你的项目中数据库如何进行优化的

Netty

  • BIO、NIO、AIO的概念区别和联系
  • Netty是什么?使用场景?
  • Netty 如何实现高性能

(线程模型、堆外内存、内存池设计、队列优化、并发能力、降低锁竞争、内存泄露检测)

  • Netty的高可靠性
  • Netty的高扩展性
  • Netty的核心组件
  • Reactor模型
  • 线程模型
  • TCP粘包/拆包的原因和解决办法
  • 支持的序列化协议
  • Netty的零拷贝
  • Netty是怎么解决原生的 NIO 存在 Epoll Bug
  • Netty空闲检测
  • Netty如何实现重连
  • Netty自己实现的 ByteBuf 有什么优点
  • Netty如何实现内存管理
  • Netty的内存泄露检测?是如何进行实现的
  • 说说你读过Netty哪些源码

参考文章列表:

https://www.jianshu.com/p/1acdfac2b4e4

https://www.jianshu.com/p/ac6b889e73c5

https://www.jianshu.com/p/aa7afeba9368

https://blog.csdn.net/sufu1065/article/details/88051083

欢迎点赞+收藏+转发朋友圈素质三连

助力秋招-独孤九剑荡剑式 | Java语言&基础面试题

助力秋招-独孤九剑荡剑式 | Java语言&基础面试题

文章不错?点个【在看】吧!

相关推荐