帮你解决Java面试,不要再错过了

前言:

最近几年公司的大小招聘,社招、校招都有参与,遇到过许多厉害的,也遇到过很多职场小白。看着有些同学基础浮夸、做着重复的项目也没有任何总结沉淀,自我介绍完全不知道在说啥等等诸如此类的现状,如果你还在东拉西扯不知所云,或是对面试官问的问题答非所问,基本在面试官心里已经给你 Pass 掉了,想想自己也是从那个层次一步步走上路的,也经历了许多坎坷,于是根据我的面试经验整理出一套面试题来跟大家分享一下,希望能帮助大家找到一份满意的工作。

Java基础面试

Java深入面试

Java必问面试

  • 多线程
  • 设计模式

Java框架面试

  • Spring
  • Spring Boot/Spring Cloud
  • MyBatis

分布式系统基础中间件面试

  • Zookeeper
  • Redis
  • ActiveMQ
  • MySQL

JVM面试题

数据结构算法

其他面试技巧与总结

正文:

Java基础

  • java中==和equals和hashCode的区别
  • int、char、long各占多少字节数
  • int与integer的区别
  • 探探对java多态的理解
  • String、StringBuffer、StringBuilder区别
  • 什么是内部类?内部类的作用
  • 抽象类和接口区别
  • 抽象类的意义
  • 抽象类与接口的应用场景
  • 抽象类是否可以没有方法和属性?
  • 接口的意义
  • 泛型中extends和super的区别
  • 父类的静态方法能否被子类重写
  • 进程和线程的区别
  • final,finally,finalize的区别
  • 序列化的方式
  • Serializable 和Parcelable 的区别
  • 静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?
  • 静态内部类的设计意图
  • 成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中的应用
  • 谈谈对kotlin的理解
  • 闭包和局部内部类的区别
  • string 转换成 integer的方式及原理

Java深入面试

  • 哪些情况下的对象会被垃圾回收机制处理掉?
  • 讲一下常见编码方式?
  • utf-8编码中的中文占几个字节;int型几个字节?
  • 静态代理和动态代理的区别,什么场景使用?
  • Java的异常体系
  • 谈谈你对解析与分派的认识。
  • 修改对象A的equals方法的签名,那么使用HashMap存放这个对象实例的时候,会调用哪个equals方法?
  • Java中实现多态的机制是什么?
  • 如何将一个Java对象序列化到文件里?
  • 说说你对Java反射的理解
  • 说说你对Java注解的理解
  • 说说你对依赖注入的理解
  • 说一下泛型原理,并举例说明
  • Java中String的了解
  • String为什么要设计成不可变的?
  • Object类的equal和hashCode方法重写,为什么?

Java必问面试

线程、多线程和线程池

  • 开启线程的几种方式?
  • 线程和进程的区别?
  • 为什么要有线程,而不是仅仅用进程?
  • run()和start()方法区别
  • 如何控制某个方法允许并发访问线程的个数?
  • 在Java中wait和seelp方法的不同;
  • 谈谈wait/notify关键字的理解
  • 什么导致线程阻塞?
  • 线程如何关闭?
  • 讲一下java中的同步的方法
  • 数据一致性如何保证?
  • 如何保证线程安全?
  • 如何实现线程同步?
  • 两个进程同时要求写或者读,能不能实现?如何防止进程的同步?
  • 线程间操作List
  • Java中对象的生命周期
  • Synchronized用法
  • synchronize的原理
  • 谈谈对Synchronized关键字,类锁,方法锁,重入锁的理解
  • static synchronized 方法的多线程访问和作用
  • 同一个类里面两个synchronized方法,两个线程同时访问的问题
  • volatile的原理
  • 谈谈volatile关键字的用法
  • 谈谈volatile关键字的作用
  • 谈谈NIO的理解
  • synchronized 和volatile 关键字的区别
  • synchronized与Lock的区别
  • ReentrantLock 、synchronized和volatile比较
  • ReentrantLock的内部实现
  • lock原理
  • 死锁的四个必要条件?
  • 怎么避免死锁?
  • 对象锁和类锁是否会互相影响?
  • 什么是线程池,如何使用?
  • Java的并发、多线程、线程模型
  • 谈谈对多线程的理解
  • 多线程有什么要注意的问题?
  • 谈谈你对并发编程的理解并举例说明
  • 谈谈你对多线程同步机制的理解?
  • 如何保证多线程读写文件的安全?
  • 多线程断点续传原理
  • 断点续传的实现

Java框架面试

  • 什么是Spring框架?
  • 列举一些重要的Spring模块?
  • 谈谈自己对于Spring IOC和AOP的理解
  • Spring AOP和AspectJ AOP有什么区别?
  • Spring中的bean的作用域有哪些?
  • Spring中的单例bean的线程安全问题了解吗?
  • Spring中的bean生命周期?
  • 说说自己对于Spring MVC的了解?
  • Spring MVC的工作原理了解吗?
  • Spring框架中用到了哪些设计模式
  • @Component和@Bean的区别是什么
  • 将一个类声明为Spring的bean的注解有哪些?
  • Spring事务管理的方式有几种?
  • Spring事务中的隔离级别有哪几种?
  • Spring事务中有哪几种事务传播行为?
  • 最佳实践中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?
  • Mybatis是如何进行分页的?分页插件的原理是什么?
  • 简述Mybatis的插件运行原理,以及如何编写一个插件。
  • Mybatis执行批量插入,能返回数据库主键列表吗?
  • Mybatis动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理不?
  • Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?
  • Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别。
  • Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?
  • Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?
  • Mybatis中如何执行批处理?
  • Mybatis都有哪些Executor执行器?它们之间的区别是什么?
  • Mybatis中如何指定使用哪一种Executor执行器?
  • Mybatis是否可以映射Enum枚举类?
  • Mybatis映射文件中,如果A标签通过include引用了B标签的内容,请问,B标签能否定义在A标签的后面,还是说必须定义在A标签的前面?
  • 简述Mybatis的Xml映射文件和Mybatis内部数据结构之间的映射关系?
  • 为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?
  • 当实体类中的属性名和表中的字段名不一样 ,怎么办 ?
  • 在mapper中如何传递多个参数?
  • Mybatis动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理不?
  • Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?
  • 接口绑定有几种实现方式,分别是怎么实现的?
  • Mybatis是如何进行分页的?分页插件的原理是什么?
  • 分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。
  • 简述Mybatis的插件运行原理,以及如何编写一个插件
  • 什么是Spring Cloud?
  • 使用Spring Cloud有什么优势?
  • Spring Cloud 实现服务注册和发现的原理是什么?
  • 为什么要使用 Spring Cloud 熔断器?
  • 服务注册和发现是什么意思?Spring Cloud如何实现?
  • spring cloud 和dubbo区别?
  • 微服务之间是如何独立通讯的
  • springcloud如何实现服务的注册?
  • spring cloud 断路器的作用是什么?
  • 什么是Spring Cloud Bus?
  • 你所知道微服务的技术栈有哪些?列举一二

分布式系统基础中间件面试题

  • Zookeeper文件系统
  • 四种类型的数据节点 Znode
  • Zookeeper Watcher 机制 – 数据变更通知
  • 服务端处理Watcher实现
  • Zookeeper 下 Server工作状态
  • zookeeper是如何保证事务的顺序一致性的?
  • 分布式集群中为什么会有Master?
  • zk节点宕机如何处理?
  • zookeeper负载均衡和nginx负载均衡区别
  • Zookeeper有哪几种几种部署模式?
  • Zookeeper对节点的watch监听通知是永久的吗?为什么不是永久的?
  • chubby是什么,和zookeeper比你怎么看?
  • Redis 持久化机制
  • 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题
  • 热点数据和冷数据是什么
  • Memcache与Redis的区别都有哪些?
  • 单线程的redis为什么这么快
  • redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构
  • redis的过期策略以及内存淘汰机制【~】
  • Redis 为什么是单线程的,优点
  • 如何解决redis的并发竞争key问题
  • Redis 集群方案应该怎么做?都有哪些方案?
  • 有没有尝试进行多机redis 的部署?如何保证数据一致的?
  • 对于大量的请求怎么样处理
  • Redis 常见性能问题和解决方案?
  • 讲解下Redis线程模型
  • 为什么Redis的操作是原子性的,怎么保证原子性的?
  • Redis事务
  • Redis实现分布式锁
  • MySQL InnoDB、Mysaim的特点?
  • 乐观锁和悲观锁的区别?
  • 数据库隔离级别是什么?有什么作用?
  • MySQL主备同步的基本原理。
  • select * from table t where size > 10 group by size order by size的sql语句执行顺序?
  • 如何优化数据库性能(索引、分库分表、批量操作、分页算法、升级硬盘SSD、业务优化、主从部署)
  • SQL什么情况下不会使用索引(不包含,不等于,函数)
  • 一般在什么字段上建索引(过滤数据最多的字段)
  • 如何从一张表中查出name字段不包含“XYZ”的所有行?
  • MySQL,B+索引实现,行锁实现,SQL优化
  • Redis,RDB和AOF,如何做高可用、集群
  • 如何解决高并发减库存问题
  • mysql存储引擎中索引的实现机制;
  • 数据库事务的几种粒度;
  • 行锁,表锁;乐观锁,悲观锁

JVM面试

  • 说一下 JVM 的主要组成部分及其作用?
  • 说一下 JVM 运行时数据区?
  • 深拷贝和浅拷贝?
  • 说一下堆栈的区别?
  • 队列和栈是什么?有什么区别?
  • 对象的创建
  • 为对象分配内存
  • 处理并发安全问题
  • 对象的访问定位
  • Java会存在内存泄漏吗?请简单描述
  • 简述Java垃圾回收机制
  • GC是什么?为什么要GC
  • 垃圾回收的优点和原理。并考虑2种回收机制
  • 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
  • Java 中都有哪些引用类型?
  • 怎么判断对象是否可以被回收?
  • 在Java中,对象什么时候可以被垃圾回收
  • JVM中的永久代码会发生垃圾回收吗
  • 说一下 JVM 有哪些垃圾回收算法?
  • 说一下 JVM 有哪些垃圾回收器?
  • 详细介绍一下 CMS 垃圾回收器?
  • 新生代垃圾回收器和老年代垃圾回收器都有哪些?有什么区别?
  • 简述分代垃圾回收器是怎么工作的?
  • 简述java内存分配与回收策略以及Minor GC和Major GC
  • 对象优先在 Eden 区分配
  • 大对象直接进入老年代
  • 长期存活对象将进入老年代
  • 简述java类加载机制?
  • 描述一下JVM加载Class文件的原理机制
  • 什么是类加载器,类加载器有哪些?
  • 说一下类装载的执行过程?
  • 什么是双亲委派模型?
  • 说一下 JVM 调优的工具?
  • 常用的 JVM 调优的参数都有哪些?

数据结构

  • List,Set,Map的区别
  • List和Map的实现方式以及存储方式
  • HashMap的实现原理
  • HashMap数据结构?
  • HashMap源码理解
  • HashMap如何put数据(从HashMap源码角度讲解)?
  • HashMap怎么手写实现?
  • ConcurrentHashMap的实现原理
  • ArrayMap和HashMap的对比
  • HashTable实现原理
  • TreeMap具体实现
  • HashMap和HashTable的区别
  • HashMap与HashSet的区别
  • HashSet与HashMap怎么判断集合元素重复?
  • 集合Set实现Hash怎么防止碰撞
  • ArrayList和LinkedList的区别,以及应用场景
  • 数组和链表的区别
  • 二叉树的深度优先遍历和广度优先遍历的具体实现
  • 堆的结构
  • 堆和树的区别
  • 堆和栈在内存中的区别是什么(解答提示:可以从数据结构方面以及实际实现方面两个方面去回答)?
  • 什么是深拷贝和浅拷贝
  • 手写链表逆序代码
  • 讲一下对树,B+树的理解
  • 讲一下对图的理解

算法

  • 排序算法有哪些?
  • 最快的排序算法是哪个?
  • 手写一个冒泡排序
  • 手写快速排序代码
  • 快速排序的过程、时间复杂度、空间复杂度
  • 手写堆排序
  • 堆排序过程、时间复杂度及空间复杂度
  • 写出你所知道的排序算法及时空复杂度,稳定性
  • 二叉树给出根节点和目标节点,找出从根节点到目标节点的路径
  • 给阿里2万多名员工按年龄排序应该选择哪个算法?
  • GC算法(各种算法的优缺点以及应用场景)
  • 蚁群算法与蒙特卡洛算法
  • 子串包含问题(KMP 算法)写代码实现
  • 一个无序,不重复数组,输出N个元素,使得N个元素的和相加为M,给出时间复杂度、空间复杂度。手写算法
  • 万亿级别的两个URL文件A和B,如何求出A和B的差集C(提示:Bit映射->hash分组->多文件读写效率->磁盘寻址以及应用层面对寻址的优化)

其他面试技巧与总结

在讨论了采访阶段和常见的面试问题后,我们在此列出了一些快速面试技巧,以帮助您完成面试:

  • 准时,准时出现
  • 随时准备谈论您的成就 - 无论是个人还是专业
  • 检查您的语言并避免使用填充物
  • 浏览职位描述并找到您可以谈论的关键要求
  • 在回答之前,请仔细聆听并花些时间收集您的想法
  • 穿着和行为专业。
  • 避免打断面试官
  • 携带所有必要的文件
  • 对公司进行简要研究并了解他们的需求
  • 感谢面试官的时间,并对批评也要礼貌

到此这篇关于文章就结束了!

希望对大家有所帮助,有用的话点赞给我支持!

你可能感兴趣的:(java,开发语言,面试,jvm,docker)