java常见面试题总结归类

1、基础 - 常见的集合框架的类

Collection:

  • List
    • ArrayList
    • LinkedList
    • Vector
  • Set
    • HashSet
    • TreeSet

Map:

  • HashMap
  • ConcurrentHashMap

2、基础 - 问区别

  • ==与equals的区别
  • ArrayList与LinkedList的区别
  • ArrayList、LinkedList、Vector的区别
  • HashMap与HashTable的区别
  • String、StringBuffer、StringBuilder的区别

3、基础 - 问线程安全

  • HashMap和HashTable,哪个是线程安全的?
  • StringBuffer、StringBuilder,哪个是线程安全的?
  • HashMap与ConcurrentHashMap,哪个是线程安全的?为什么?

4、基础 - 问 扩容

  • HashMap 如何扩容?
  • ArrayList 如何扩容?

5、基础 - 问 源码实现

  • Set是如何添加元素的?
  • Set如何遍历元素?
  • HashMap是如何put元素的?相同key的添加如:map.put("a", "1"); map.put("a", "2");最后a的value是几?为什么?
  • HashMap如何遍历元素?
  • ConcurrentHashMap的并发度是多少?
  • ArrayList 如何遍历元素?

6、基础 - 问 存储(数据)结构

  • HashMap的存储机构
  • ConcurrentHashMap的存储结构
  • ArrayList的存储结构

7、基础 - 问 实现原理

  • HashMap的实现原理
    • HashMap线程不安全的原因是?
  • ConcurrentHashMap的实现原理
    • ConcurrentHashMap在jdk1.7和1.8分别有什么不同?(jdk1.8后ConcurrentHashMap去掉了分段锁,而改为使用synchronized+CAS+Node+Unsafe实现)

8、基础 - 锁 基本概念

  • synchronized是可重入锁吗?jdk1.8后有什么变化?
    • synchronized放在类、静态方法、普通方法上 都有什么不同?(类锁和对象锁)
  • Lock 是如何实现锁的?
    • synchronized和Lock有何区别?(从实现上说。Lock的实现是AQS)
  • 了解AQS吗?(内部是CAS)
  • 了解CAS吗?
  • 了解volatile吗?
  • 讲以下公平锁和非公平锁。

9、基础 - 锁 - AQS

  • AQS的数据结构是什么?
  • AQS的原理是什么?
  • AQS的队列是阻塞式的吗?为什么?

10、基础 -  线程

  • 创建线程有几种方式?
  • 熟悉ThreadLocal吗?ThreadLocal的内部结构是怎样的?
  • ThreadLocal会引发内存泄漏吗?为什么?
  • wait()、sleep() 的区别?(会不会释放锁?)

11、基础 - 线程 - 并发工具

  • JUC包了解吗?你熟悉哪些JUC下的类?
  • CountDownLatch 了解吗?

12、基础 - 线程 - 线程池

  • 说说线程池的几个核心参数?
  • 线程池是怎么工作的?(工作原理或者机制)
  • 线程池的阻塞队列是有限的还是无限的?为什么?
  • 拒绝策略有几种?默认的拒绝策略是什么?
  • ThreadExecutorServie 了解吗?
  • 说下如何实现 线程安全的单例模式

13、高级 - 框架 - spring及springboot

  • Spring的bean是如何加载的?IOC容器加载bean的过程?
  • 什么是控制反转?什么是DI?
  • Spring的bean是单例的还是多例的?
  • @Autowired和@Resource有何区别?@Resource是如何进行装配的?
  • spring 事务的传播特性了解吗?说说。
  • 你自定义过springboot starter吗?
  • springboot是如何启动的?启动时需要注意什么?

14、高级 - 数据库 - mysql

  • Oracle与mysql 有何不同?
  • 了解mysql存储引擎吗?了解哪些?说说
  • mysql是如何优化的?
  • 了解mysql的优化器吗?了解CBO、RBO吗?
  • 了解聚簇索引和非聚簇索引吗?有何区别?
  • B-Tree索引和B+tree索引的区别?
  • mysql的隔离级别有哪些?默认的是隔离级别是什么?
  • mysql explain分析sql语句的执行计划时,几个性能参数了解吗?说说
  • mysql慢查询怎么解决?
  • mysql 的锁机制了解吗?简单说下
  • 数据库崩溃了,如何恢复?Undo日志与Redo日志
  • 设计sql索引:给定一张表,表里含有A、B、C、D及其他字段,常用的查询场景有where条件会有
A C 
AB  
 BCD
  CD
AB D

 

 

 

 

 

问该表的索引如何设计?

  • 问是否走sql索引:有一张表person(id, name, age, phone),索引(age, phone),问以下语句会不会走索引
select * from person where phone = '120';

15、高级 - 分布式锁的实现

  • redis如何实现分布式锁?
  • zookeeper如何实现分布式锁?
  • mysql如何实现分布式锁?

16、高级 - 微服务 SpringCloud

  • 说下SpringCloud的几个核心组件?
  • 知道API网关是做什么的?
  • 你们用什么做服务发现组件?
  • 服务消费者是否需要注册到服务发现组件?
  • 简单说下Feign组件?
  • 为什么使用Feign而不使用RestTemplate?
  • 使用Feign是如何发现服务的?
  • 使用Feign第一次请求失败了,什么原因?如何解决?
  • 了解Feign的源码吗?(其实掌握Feign的几个核心的API就可以,以便自定义一些东西,如:自定义并开启日志)

17、高级 - 消息中间件

  • 熟悉rabbitmq吗?
  • 熟悉kafka吗?
  • (聊你熟悉的组件)为什么选择kafka?kafka有什么优点?
  • 会搭建kafka集群吗?(不明白面试官问这种问题的目的)
  • 使用消息中间件你们发生过消息丢失吗?怎么解决的?
  • 消息重复,又如何解决?
  • 如何保证消息的一致性?
  • kafka只用来当作消息中间件吗?

18、高级 - Redis

  • redis 如何实现做分布式锁(jedis setnx+lua、redisson)
  • redis为什么那么快?
  • 说说你了解的redis常规复制架构
    • Dual Master复制架构, master - master(双主,一主负责写,一主负责读)
    • 级联复制架构 master - slaves - slaves...(一主多从,从之间又分多层,从服务器的级联问题容易出现低延迟)
    • Dual Master 与级联复制架构结合 master - master - slaves -slaves(一主负责写,一主负责同步到其他从 也负责读,解决了写主的压力,也解决了从服务之间的低延迟问题)
  • 了解reddis的持久化吗?(AOF和RDB)分别说说
  • redis是集群做过吗?
    • 请求过来时redis集群是如何确定那个redis节点接收的?(redis节点上有一个key,根据这个key计算得出是哪个redis节点接收请求)。

19、高级 - 数据库 - 分库分表技术

  • 了解分库分表吗?简单说说
  • 横向 - 分表,垂直 - 分库

20、高级 - JVM

  • 说下jvm的内存组成、内存模型?
  • 了解垃圾回收机制吗?说说
  • 垃圾回收的依据是什么?或者怎么垃圾回收的?或者垃圾回收的算法?
  • 垃圾回收器你了解哪些?你们工作中常见的垃圾回收器是什么?

21、高级 - 分布式理论

  • 了解CAP吗?简单说下。
  • 了解2PC、3PC吗?
  • 了解Paxos算法吗?

22、高级 - zookeeper?

  • zookeeper属于CAP中的哪两者?(AP,不具备强一致性)
  • zookeeper是什么框架?或者问zk是干嘛的?
  • zk使用哪种协议?
  • zk有哪几种节点类型?
  • zk对节点的watch监听通知是永久的吗?
  • zk的部署方式?集群中的机器角色有哪些?集群最少要几台?
  • 集群如果有3台机器,挂掉一台集群还能工作吗?挂掉两台呢?
  • 集群支持动态添加机器吗?
  • zk的选举过程?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值