Java面试题目汇总

239 阅读11分钟

Java基础与集合

java 的基础知识点,主要围绕在集合类和多线程等:ArrayList、LinkedList、HashSet、HashpMap的数据结果,以及如何扩容、以及 ConcurrentHashMap 相关的多线程安全等。

  • Integer 和 int 有啥区别,integer 中有哪些特殊的函数?

  • 讲一下一个变量从产生到结束所经历的过程,讲一下字符串常量的过程?

  • 通过反射,谈到了方法区,然后类加载机制?

  • List Set Map 底层使用什么实现的?有哪些典型实现?

  • ArrayList、linkedlist、hashset区别。ArrayList 是否会越界?hashset 存的数是有序的?

  • HashMap 实现原理,ConcurrentHashMap 实现原理,Hashtable 区别,在性能上的区别?以及这种差异形成的原因,以及各自优劣势

  • HashMap 中的 get()方法是如何实现的?

  • HashMap 可以用在哪些场景?

  • HashMap 扩容是怎么扩容的,为什么是 2 的幂次?

  • concurrenthashmap 为什么线程安全,采用了什么措施应对高并发

  • 红黑树,为什么允许局部不平衡?

  • hashmap 和 concurrenthashmap 的 size 方法怎么实现的?

  • jdk1.8 concurrenthashmap 的新的特性,有没有看过源码?

  • 说一下 hashcode 的作用?

  • 你重写过 hashcode 和 equals 么,要注意什么

  • 假设现在一个学生类,有学号和姓名,我现在 hashcode 方法重写的时候,只将学号参与计算,会出现什么情况?往 set 里面 put 一个学生对象,然后将这个学生对象的学号改了,再 put 进去,可以放进set 么?并讲出为什么

  • object 类你知道的?

  • Nio 和 IO 有什么区别

  • BIO、NIO(如何实现的)、AIO

JUC、多线程、并发

状态流转、多线程的实现,以及与高并发的区别等。

  • volatile、synchronized、lock 的区别?

  • synchronized 的实现原理?Volatile 能保证原子性吗?为什么?

  • synchronized 和锁的区别,什么情况下使用 synchronized 和 ReentrantLock

  • reentrantlock的实现

  • ThreadLocal 了解吗?

  • 什么情况下使用 Runnable 和 Thread 创建线程,Runnable 和 Callable 的区别?

  • 线程的五态?转化过程?

  • 线程方法中的异常如何处理,副线程可以捕获到吗?

  • 多线程下Java 线程间怎么实现同步,notify()与 notifyAll()的区别?

  • 多线程状态图,状态如何流转?

  • 如何实现线程调度算法?

  • 有哪几种常用的线程池?对应的好处,如何用?

  • 线程池优点,参数,如果我想实现 newSingleThreadPoll,应该怎么配置,构造方法传什么参数?

  • 线程池的参数,每个参数解释一遍,然后面试官设置了每个参数,给了个线程,让描述出完整的线程池执行的流程?

  • 线程池的设计

  • 线程池如何做负载均衡

  • 线程池的参数有什么意义

  • 变着法的问了一大堆线程池的知识(主要考对应的参数)

  • 多线程和高并发有什么区别?

  • 高并发下有哪些常用的技术解决方案,举三个高并发场景设计例子

  • 线程安全(阻塞同步,非阻塞同步,无同步)

  • 讲一下线程安全问题产生的原因?

  • 高并发情况下,我们系统是如何支撑大量的请求的?

  • 高并发情况,系统的优化方案有哪些,以及优先级排序?

数据库

数据库端的优化方案(需要提前了解)。

  • MySQL 事务是什么?四大特性,四大隔离级别

  • 讲一下数据库的隔离等级

  • 讲一下数据的 ACID,什么是一致性,什么是隔离性?

  • ACID CAP BASE 理论

  • Mysql 的隔离级别,每个隔离级别是如何解决

  • Mysql 要加上 nextkey 锁,语句该怎么写?

  • 说一下 MVCC

  • MySQL 与 MongoDB 的区别,海量数据的存储

  • mysql 用的什么存储引擎,这个存储引擎用的什么数据结构 ,有哪些优缺点,怎么使用?

  • 数据库引擎 Innodb 和 myisam 区别

  • 死锁,死锁原因

  • 页锁、乐观锁、悲观锁?

  • mysql 死锁,怎么解决,如果不要求执行顺序,死锁怎么解决?

  • 乐观锁如何保证线程安全?

  • 数据库的悲观锁和乐观锁应用场景

  • 讲一下乐观锁和悲观锁?

  • 乐观锁是怎么保证一致性的?

  • 脏读和幻读是什么?一个表一千个列值为 true 和 false,写 sql 查询 有 300 个列值为 true 的行。

  • MySQL 的索引

  • SQL 优化,常用的索引?

  • 复合索引是如何实现的?

  • 说一聚簇索引和非聚簇索引的有什么不同

  • 聚集索引和非聚集索引的区别?

  • 数据库索引 主键和唯一索引有什么区别

  • 索引失效条件,什么时候该建立索引?

  • 实践中如何优化 MySQL:SQL 语句及索引的优化、数据库表结构的优化、系统配置的优化、硬件的优化

  • SQL 慢查询的优化方案,索引和表的优化方案

  • 数据库性能调优如何做,数据库端的常用优化策略?

  • 数据库分库分表需要怎样来实现?

  • 分库分表和读写分离如何设计

缓存

作为分布式缓存的主力,基本也是 BAT 每次必考,重点是 Redis 的数据结构、内存、 算法、持久化,以及与别的缓存 memcached 的优劣势。

  • Redis,持久化框架
  • Redis 的数据结构
  • Redis 是基于内存的么
  • Redis 的 list zset 的底层实现
  • Redis:作为分布式缓存的主力,基本也是 BAT 每次必考,重点是 Redis 的数据结构、内存、 算法、持久化,以及与别的缓存 memcached 的优劣势;
  • 缓存框架,例如 Redis、Memcached 之间的区别,优劣势比较
  • 问了 redis 的一些问题,项目中有(扩容,失效 key 清理策略等)
  • 常用 NOSQL,有做过比较?
  • 什么情况会出现雪崩,以及如何应对?
  • 负载均衡的原理
  • Redis 的持久化?有哪些方式,原理是什么?

框架

Spring 框架问得是最多的,BAT 非常喜欢问,重点掌握

  • spring IOC的原理,没有无参构造函数能实例化吗?有参构造函数注入?(xml 配置)autowired 如何实现?
  • AOP 实现原理:动态代理
  • IOC AOP各有什么优点?
  • Spring 的 aop 有哪些实现方式
  • 动态代理的实现方式和区别
  • Spring 的 bean 的作用域?(比如:singleton,prototype 等)
  • spring 当中事物的隔离级别
  • Springmvc 请求流程
  • Spring boot

设计模式

  • 常用的设计模式介绍:单例模式、装饰者模式等
  • 手写单例

微服务

  • 消息中间件有哪些?他们之间的优劣势?
  • 微服务和 SOA 的区别,优劣势?
  • SpringClound 的基本架构设计
  • Dubbo 和 SpringClound 的区别在哪里,优劣势?
  • dubbo 和 springcloud 的区别,以及各自对应的使用场景?
  • RPC 过程
  • 微服务架构是什么,它的优缺点?
  • 服务注册中心宕机了怎么办?
  • 微服务还有其他什么组件
  • 分布式架构与微服务的关系

分布式

常用的分布式架构设计方案:单点登录、分布式缓存、存储、消息的选型。最好能提前了解深入一个类似秒杀这样的项目,如果面试官问到类似的项目,你能把设计思路讲出来,这对你的面试结果是很大的加分项

  • 分布式 session 的共享方案有哪些,有什么优劣势?
  • 分布式架构设计哪方面比较熟悉?
  • 讲讲你对 CDN 的了解,与分布式缓存和本地缓存的区别?
  • 负载均衡有接触过哪些开源框架,优劣势是什么?
  • 如果让你来设计秒杀系统,你的设计思路是什么,为什么要这样设计?
  • 主要高并发和分布式架构设计
  • 如何设计单点登录,单点登录的原理
  • 大型高并发网站如何做性能优化:Web 性能、数据库性能、应用服务器性能等。
  • 分布式系统原理:CAP,最终一致性,幂等操作等
  • 集群如何同步会话状态

网络

TCP 的三次握手等网络都必问,重点掌握网络协议

  • TCP,UDP 区别,为什么可靠和不可靠
  • 一次 HTTP 请求的全过程,包括域名解析、定位主机等
  • TCP 三次握手
  • http 和 https 的区别,tcp 握手过程
  • TCP 三次握手,为什么三次握手?
  • 网络方面有 osi 七层,tcp/ip 五层,分别有哪些协议及作用
  • tcp 的流量控制和拥塞控制

JVM

  • java 内存模型
  • JVM 的内存分配、几个常见的垃圾回收算法以及原理、还有对应的 JVM 优化参数需要牢记。
  • 介绍你实践的性能优化案例,以及你的优化思路
  • JVM 垃圾回收算法手写冒泡
  • 讲一下 GC?
  • 说一个你对 JVM 优化的实际案例,包括实际步骤和方法
  • OOM 内存泄漏,什么情况下会出现,如何排查
  • JVM 的调优参数?(-Xmn,-Xms 等具体参数设置)
  • JVM 内存分区?(主存,工作内存,堆,栈。。。。)
  • 为什么要用老年代和新生代?
  • 新生代进入老生代的情况?
  • 新生代的分区?
  • 讲一下 JVM
  • 讲一下 JVM 的分代回收以及具体算法
  • 讲一下 JVM 的垃圾收集器,G1 和 CMS 有啥区别?
  • JVM 的垃圾回收机制和垃圾收集器
  • JVM,垃圾回收机制,内存划分等
  • jvm 性能调优都做了什么?
  • Java 的内存模型,垃圾回收

数据结构&算法

  • 说说一致性 Hash 算法
  • 垃圾回收算法
  • 排序算法的复杂度,快速排序非递归实现
  • 栈和队列
  • 海量数据过滤,黑名单过滤一个 url?
  • B+树和 B-树的区别?
  • 讲一下堆以及堆排序
  • 说一下 B+tree 和二叉搜索树的区别?说一下二叉搜索树和 AVL 树、红黑树之间的差别
  • 给你两个文件(字符串形式的)如何找出他们之间的不同地方?
  • 你刚刚说的能怎么优化?
  • 给你 50 亿行字符串,机器 4G 内存(只能一台机器),找出重复次数最多的那行字符串?(以行为单位,每行不超过 10 个字符)
  • 设计一个算法,实现两个 10g 大文件在 10m 的内存中将两个大文件中重复的放进第三个文件
  • 快速排序的平均复杂多少?最坏情况是什么?
  • 两个 10G 的文件,里面是一些 url,内存只有 1G,如何将这两个文件合并,找到相同的 url?
  • 1000 个多并发线程,10 台机器,每台机器 4 核的,设计线程池大小。
  • 代码题:两个有序数组,数组中存在重复数字,合并成一个有序数组,去除重复数字
  • 讲一下稳定的排序算法和不稳定的排序算法
  • 讲一下快速排序的思想
  • Leeetcode 原题 22,Generate Parentheses,给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果

CI/CD

  • Docker 有使用过和了解吗?Docker 和 JVM 的区别是什么?
  • Docker 的基本架构和使用场景
  • Linux怎么查看系统负载?
  • Cpu load 的参数如果为 4,描述一下现在系统处于什么情况
  • Linux,查找磁盘上最大的文件的命令
  • Linux,如何查看系统日志文件

面试流程问题

  • 自我介绍
  • 谈一个你觉得你学到最多的项目,使用了什么技术,挑战在哪里?
  • 项目介绍?
  • 项目参与的核心设计有哪些?
  • 遇到的最大困难是什么?怎么解决的?
  • 你觉得你能怎么优化这个项目?
  • 自我介绍
  • 项目介绍
  • 怎么管理项目成员
  • 当意见不一致时,如何沟通并说服开发成员,并举个例子
  • 怎么保证项目的进度
  • 个人的职业规划是什么
  • 你遇到的最大问题或者是困难是什么
  • 你如何看待阿里
  • 你能为阿里带来什么
  • 你的优缺点是什么

面试总结:

  1. 技术基础必须扎实:算法、数据结构、操作系统等,蚂蚁金服面试对技术的基础非常重视, 基础扎实的同学有利于在前两轮突出重围。
  2. 技术宽度:主要集中在高并发、多线程、分布式架构,大以及常用中间件(缓存等)的选型 和比较。
  3. 技术原理深入:重点还是提前准备好 JVM、多线程高并发这块。
  4. 参与的项目总结:你需要清楚你所做项目的关键细节、优化、特点、原理。
  5. 很多所用第三方库&中间件等的原理,即使你不知道,也要有自己的想法能够说出如何代 替实现,比如单点登录的替代方案。
  6. 最好,提前准备一个大数据访问,比如 pv 扩大 1000 倍,你的架构或者技术方案应对措施。
  7. 最后,千万不要倒在 HR 面试环节,避重就轻是重点,特别是优点和缺点,如果问到你的 规划是什么,请记得一定告诉 HR 你想成为一名优秀的技术。