Java 面试题全记录 多处搜集 灵魂拷问 持续更新

大佬总结的面试题纲:  https://github.com/farmerjohngit/myblog/issues/21

Hashmap 源码级掌握,扩容,红黑树,最小树化容量,hash 冲突解决,有些面试官会提出发自灵魂的审问,比如为什么是红黑树,别的树不可以吗;为什么 8 的时候树化,4 不可以吗,等等
concureentHashMap,段锁,如何分段,和 hashmap 在 hash 上的区别,性能,等等
HashTable,同步锁,这块可能会问你 synchronized 关键字 1.6 之后提升了什么,怎么提升的这些
ArrayList 优势,扩容,什么时候用
LinkedList 优势,什么时候用,和 arraylist 的区别 等等
基本类型和包装类型的区别,涉及自动装箱和拆箱,怎么做的,原理
String,StringBuffer,StringBuilder 哪个是安全的
字符串编码的区别,被问到过,我觉得比较容易被忽视的一个点
什么是泛型,怎么用泛型
static 能不能修饰 threadLocal,为什么,这道题我当时一听到其实挺懵逼的
Comparable 和 Comparator 接口是干什么的,其区别
多态的原理是什么,感觉这个很容易被问到
接口和抽象类,面试官问我是怎么理解的,我说接口对应功能,抽象类对应属性,然后面试官给我说了他的看法,说抽象类更偏向于一种模板~ 然后又交流了一下各自的想法
如何通过反射和设置对象私有字段的值
快速失败(fail-fast)和安全失败(fail-safe)的区别是什么
synchronized 的实现原理以及锁优化?    
volatile 的实现原理?
Java 的信号灯?
synchronized 在静态方法和普通方法的区别?
怎么实现所有线程在等待某个事件的发生才会去执行?
CAS ? CAS 有什么缺陷,如何解决?
synchronized 和 lock 有什么区别?
Hashtable 是怎么加锁的 ?
List,Map,Set 接口在取元素师,各有什么特点
如何线程安全的实现一个计数器
生产者消费者模式,要求手写过代码,还是要知道的
单例模式,饿汉式,懒汉式,线程安全的做法,两次判断 instance 是否为空,每次判断的作用是什么。
线程池,这个还是很重要的,在生产中用的挺多,四个线程池类型,其参数,参数的理解很重要,corepoolSize 怎么设置,maxpoolsize 怎么设置,keep-alive 各种的,阻塞队列在生产中的设置,一般设置为 0,防止用户阻塞
cyclicbarrier 和 countdownlatch 的区别,个人理解 赛马和点火箭
线程回调,这块 被问过让我设计一个 RPC,怎么实现,其实用到了回调这块的东西
sleep 和 yeild 方法有什么区别
volatile 关键字,可见性。
乐观锁和悲观锁的使用场景
悲观锁的常见实现方式:lock synchronized retreentlock
乐观锁:CAS MVCC
读写锁的实现方式,16 位 int 的前八位和后八位分别作为读锁和写锁的标志位
死锁的条件,怎么解除死锁,怎么观测死锁。
希望大家能够好好看一下反射的原理,怎么确定类,怎么调方法
RPC 框架,同步异步,响应时间,这些都被问到过,还让设计过
同步,异步,阻塞,非阻塞 最好再找一些应用场景加以理解


## JAVA 基础
1. HashMap 的源码,实现原理; JDK8 做了什么优化
2. HashMap 扩容机制,为什么都是 2 的 N 次幂
3. ArrayList 和 Vector 的区别,扩容机制等
4. CopyOnWriteArrayList 原理
5. HashSet 和 TreeSet 原理
6. ArrayBlockingQueue 和 LinkedBlockingQueue 区别
7. 集合迭代器的原理
8. 传值和传引用的区别
9. 动态代理
10. JDK8 ConcurrentHashMap 的原理

## 多线程
1. 创建多线程的方式,以及线程的状态转换
2. 线程的中断机制
3. ThreadPoolExecutor 初始化参数; Executors 静态方法
4. synchronized 的使用方式及原理
5. 偏向锁、轻量级锁、自旋锁等优化
6. ReentrantLock 的特点及 AQS 原理
7. Semaphore、CountDownLatch、CyclicBarrier 等使用
8. ThreadLocal 的原理、与 Thread 类的关系、以及内存泄漏问题
9. volatile 的原理及内存屏障相关
10. Lock 接口有哪些实现类,使用场景是什么
11. 悲观锁,乐观锁,优缺点,CAS 有什么缺陷,该如何解决
12. ABC 三个线程如何保证顺序执行
13. 生产者消费者模式的实现方式
14. 如何实现控制线程在某段时间内完成,不完成就撤销

## JVM
1. JVM 的内存区域
2. 字符串常量池相关
3. 对象的内存布局,涉及到锁的部分
4. 类加载的过程,以及双亲委派机制、自定义类加载器
5. GC 常见算法,CMS 以及 G1 的垃圾回收过程,CMS 的各个阶段哪两个是 Stop the world 的,CMS 会不会产生碎片,G1 的优势
6. 标记清除、复制和标记整理算法的理解以及优缺点
7. eden survivor 区的比例,为什么是这个比例,eden survivor 的工作过程
8. JVM 如何判断一个对象是否该被 GC,可以视为 root 的都有哪几种类型
9. 强软弱虚引用的区别以及 GC 对他们执行怎样的操作
10. Java 是否可以 GC 直接内存
11. 常用的 JVM 调优参数
12. GC 优化的步骤
13. 当出现了内存泄漏或内存溢出,怎么排错
14. CMS 和 G1 收集过程

## 数据库相关
1. 常见的数据库优化手段
2. 索引的优缺点,以及索引选择
3. B+树索引的原理
4. 数据库连接池
5. MySQL 的锁机制
6. MVCC 和 ReadView
7. InnoDB 的一些特性
8. 数据库三范式

## 计算机网络、操作系统
1. TCP,UDP 区别
2. 三次握手,四次挥手,为什么要四次挥手
3. 长连接和短连接,连接池适合长连接还是短连接
4. OSI 七层模型
5. 用户态和内核态

## 数据结构和算法
1. 红黑树、AVL 树
2. B 树、B+树
3. 排序算法
4. 一致性 Hash 算法,一致性 Hash 算法的应用
5. TopK 问题
6. 判断链表是否有环

## 缓存相关
1. redis 支持的数据类型及使用场景
2. redis 单线程为什么还那么快
3. redis 如何存储一个 String 的
4. redis 的过期策略
5. redis 的部署方式,主从,集群
6. redis 的哨兵模式,一个 key 值如何在 redis 集群中找到存储在哪
7. redis 持久化策略
8. 缓存穿透、缓存击穿、缓存雪崩问题及解决方法
9. 缓存和数据库一致性问题

## 框架相关
1. Spring 的常用注解及作用
2. Spring Bean 的生命周期
3. Spring 怎么解决单例 Bean 的循环依赖问题
4. Spring 对于 IOC 的扩展点有哪些
5. Spring AOP 的原理,及代理对象调用过程(责任链+递归调用)
6. Spring 的事务机制,及执行流程
7. Spring 使用了哪些设计模式
8. Mybatis 基于接口完成查询的过程及原理
9. Mybatis 的一级缓存和二级缓存
10. Quartz 是如何完成定时任务的;集群同步机制

## 分布式相关
1. 分布式事务的控制
2. 分布式锁如何设计
3. 分布式 session 如何设计
4. dubbo 的组件有哪些,及其作用
5. dubbo SPI 机制;远程接口调用过程
6. dubbo 支持的协议及序列化方式
7. dubbo 的负载均衡和容错策略
8. zookeeper 的 ZAB 协议工作原理
9. zookeeper 的 Watcher 机制
10. zookeeper 的 Watcher 机制
11. zookeeper 的数据存储
12. zookeeper 的负载均衡算法
13. rocketmq 的模块功能
14. rocketmq 的高可用及高性能
15. elasticsearch 的系统架构及读写过程
16. elasticsearch 在数据量很大的情况下(数十亿级别)如何提高查询效率啊
17. eureka 的相关原理,和 zookeeper 的比较


1 java 线程池的实现原理,threadpoolexecutor关键参数解释    

public ThreadPoolExecutor(int corePoolSize 核心线程数,int maximumPoolSize最大线程数,long keepAliveTime空闲时间,TimeUnit unit时间单位,BlockingQueue workQueue任务等待队列,ThreadFactory threadFactory,RejectedExecutionHandler handler拒绝策略)
        等待队列为有界时:corePoolSize先执行 满后 交给队列 满后 创建新线程执行直到maximumPoolSize也满 执行拒绝
                为无界时:corePoolSize先执行 满后 交给队列 直到系统资源耗尽 最大线程数无意义
        拒绝策略:        AbortPolicy 抛异常
                        CallerRunsPolicy 线程池未关闭情况下 调用者运行该被抛弃任务
                        DiscardOldestPolicy 丢弃最老任务 尝试再次提交
                        DiscardPolicy 丢弃无法处理的任务 
                
2 hashmap的原理,容量为什么是2的幂次  

    2的幂次-1 低位都是1 保证与操作均匀分布
3 为什么要同时重写hashcode和equals    

一是规定 二是保证equals和hashcode一致性 equals相同则hashcode一定相同
4 ConcurrentHashMap如何实现线程安全?        

1.7 Segment  分段锁   1.8 node+链表+红黑树 类似加强版hashmap 更细粒度的锁 
        取长度:1.7 连续取三次 如果三次结果不一样再加锁 1.8通过对baseCount和counterCell进行 CAS 计算,最终通过 baseCount 和 遍历 CounterCell 数组得出 size
5 介绍Java多线程的5大状态,以及状态图流转过程      

       新建(NEW)    可运行(RUNNABLE)    运行(RUNNING)    阻塞(BLOCKED)    死亡(DEAD)
介绍下Synchronized、Volatile、CAS、AQS,以及各自的使用场景
B+树和红黑树时间复杂度    logmn m是阶数 log2n
如果频繁老年代回收怎么分析解决  检查大对象 调整新生代老年代比例 调整堆大小
JVM内存模型,新生代和老年的回收机制        新生代 复制算法 浪费10%空间 老年代标记整理  新:老=1:2
mysql limit分页如何保证可靠性    

    首先获取到offset的id然后直接使用Mysql limit size来获取数据    Select * From tableName Where ID>=(  Select ID From tableName limit 90000,1  )limit 100; 

java nio,bio,aio,操作系统底层nio实现原理    
    bio:同步阻塞 一个客户端请求一个线程 不支持太多并发请求 伪异步模式 服务端运用线程池
    nio:同步非阻塞 1.7后异步非阻塞 buffer缓冲器 socketChannel通道 选择器多路复用
        buffer:三个重要变量position/limit/capaciy put/get;调用filp方法后lim=pos pos=0;warp()包裹duplicate()复制;remainin()可读长度
Spring IOC,autowired如何实现
Spring事务传播机制
线程死锁排查 jps查看pid + jstack    或在window打开 JConsole    
MySQL引擎及区别,项目用的哪个,为什么
RPC为什么用http做通信?
RPC两端如何进行负载均衡?
mycat分库分表、读写分离的实现
分布式数据如何保证数据一致性
高并发请求处理,流量削峰措施有哪些

Redis持久化RDB和AOF 的区别    rdb:保存快照 指定时间内操作多少次KEY更新或指定时间更新 dump.rdb aof:将写命令都保存在某一文件 重启时加载此文件
MQ底层实现原理
详细介绍下分布式 一致性Hash算法
nginx负载均衡的算法
Nginx 的 upstream目前支持 哪4 种方式的分配
分布式集群部署后,从应用端哪些需要怎么调整
Dubbo默认使用什么注册中心,还有别的选择吗?
mongoDB、redis和memcached的应用场景,各自优势
谈谈你性能优化的实践案例,优化思路?
两千万用户并发抢购,你怎么来设计?


一、数据结构与算法基础

  1. · 说一下几种常见的排序算法和分别的复杂度。
  2. · 用Java写一个冒泡排序算法
  3. · 描述一下链式存储结构。
  4. · 如何遍历一棵二叉树?
  5. · 倒排一个LinkedList。
  6. · 用Java写一个递归遍历目录下面的所有文件。

二、Java基础

  1. · 接口与抽象类的区别?
  2. · Java中的异常有哪几类?分别怎么使用?
  3. · 常用的集合类有哪些?比如List如何排序?
  4. · ArrayList和LinkedList内部的实现大致是怎样的?他们之间的区别和优缺点?
  5. · 内存溢出是怎么回事?请举一个例子?
  6. · ==和equals的区别?
  7. · hashCode方法的作用?
  8. · NIO是什么?适用于何种场景?
  9. · HashMap实现原理,如何保证HashMap的线程安全?
  10. · JVM内存结构,为什么需要GC?
  11. · NIO模型,select/epoll的区别,多路复用的原理
  12. · Java中一个字符占多少个字节,扩展再问int, long, double占多少字节
  13. · 创建一个类的实例都有哪些办法?
  14. · final/finally/finalize的区别?
  15. · Session/Cookie的区别?
  16. · String/StringBuffer/StringBuilder的区别,扩展再问他们的实现?
  17. · Servlet的生命周期?
  18. · 如何用Java分配一段连续的1G的内存空间?需要注意些什么?
  19. · Java有自己的内存回收机制,但为什么还存在内存泄露的问题呢?
  20. · 什么是java序列化,如何实现java序列化?(写一个实例)?
  21. · String s = new String("abc");创建了几个 String Object?

三、JVM

  1. · JVM堆的基本结构。
  2. · JVM的垃圾算法有哪几种?CMS垃圾回收的基本流程?
  3. · JVM有哪些常用启动参数可以调整,描述几个?
  4. · 如何查看JVM的内存使用情况?
  5. · Java程序是否会内存溢出,内存泄露情况发生?举几个例子。
  6. · 你常用的JVM配置和调优参数都有哪些?分别什么作用?
  7. · JVM的内存结构?
  8. · 常用的GC策略,什么时候会触发YGC,什么时候触发FGC?

四、多线程/并发

  1. · 如何创建线程?如何保证线程安全?
  2. · 如何实现一个线程安全的数据结构
  3. · 如何避免死锁
  4. · Volatile关键字的作用?
  5. · HashMap在多线程环境下使用需要注意什么?为什么?
  6. · Java程序中启动一个线程是用run还是start?
  7. · 什么是守护线程?有什么用?
  8. · 什么是死锁?如何避免
  9. · 线程和进程的差别是什么?
  10. · Java里面的Threadlocal是怎样实现的?
  11. · ConcurrentHashMap的实现原理是?
  12. · sleep和wait区别
  13. · notify和notifyAll区别
  14. · volatile关键字的作
  15. · ThreadLocal的作用与实现
  16. · 两个线程如何串行执行
  17. · 上下文切换是什么含义
  18. · 可以运行时kill掉一个线程吗?
  19. · 什么是条件锁、读写锁、自旋锁、可重入锁?
  20. · 线程池ThreadPoolExecutor的实现原理?

五、Linux使用与问题分析排查

  1. · 使用两种命令创建一个文件?
  2. · 硬链接和软链接的区别?
  3. · Linux常用命令有哪些?
  4. · 怎么看一个Java线程的资源耗用?
  5. · Load过高的可能性有哪些?
  6. · /etc/hosts文件什么做用?
  7. · 如何快速的将一个文本中所有“abc”替换为“xyz”?
  8. · 如何在log文件中搜索找出error的日志?
  9. · 发现磁盘空间不够,如何快速找出占用空间最大的文件?
  10. · Java服务端问题排查(OOM,CPU高,Load高,类冲突)
  11. · Java常用问题排查工具及用法(top, iostat, vmstat, sar, tcpdump, jvisualvm, jmap, jconsole)
  12. · Thread dump文件如何分析(Runnable,锁,代码栈,操作系统线程ID关联)
  13. · 如何查看Java应用的线程信息?

六、框架使用

  1. · 描述一下Hibernate的三个状态?
  2. · Spring中Bean的生命周期。
  3. · SpringMVC或Struts处理请求的流程。
  4. · Spring AOP解决了什么问题?怎么实现的?
  5. · Spring事务的传播属性是怎么回事?它会影响什么?
  6. · Spring中BeanFactory和FactoryBean有什么区别?
  7. · Spring框架中IOC的原理是什么?
  8. · spring的依赖注入有哪几种方式
  9. · struts工作流程
  10. · 用Spring如何实现一个切面?
  11. · Spring 如何实现数据库事务?
  12. · Hibernate对一二级缓存的使用,Lazy-Load的理解;
  13. · mybatis如何实现批量提交?

七、数据库相关

  1. · MySQL InnoDB、Mysaim的特点?
  2. · 乐观锁和悲观锁的区别?
  3. · 数据库隔离级别是什么?有什么作用?
  4. · MySQL主备同步的基本原理。
  5. · select * from table t where size > 10 group by size order by size的sql语句执行顺序?
  6. · 如何优化数据库性能(索引、分库分表、批量操作、分页算法、升级硬盘SSD、业务优化、主从部署)
  7. · SQL什么情况下不会使用索引(不包含,不等于,函数)
  8. · 一般在什么字段上建索引(过滤数据最多的字段)
  9. · 如何从一张表中查出name字段不包含“XYZ”的所有行?
  10. · MySQL,B+索引实现,行锁实现,SQL优化
  11. · Redis,RDB和AOF,如何做高可用、集群
  12. · 如何解决高并发减库存问题
  13. · mysql存储引擎中索引的实现机制;
  14. · 数据库事务的几种粒度;
  15. · 行锁,表锁;乐观锁,悲观锁

八、网络协议和网络编程

  1. · TCP建立连接的过程。
  2. · TCP断开连接的过程。
  3. · 浏览器发生302跳转背后的逻辑?
  4. · HTTP协议的交互流程。HTTP和HTTPS的差异,SSL的交互流程?
  5. · Rest和Http什么关系?大家都说Rest很轻量,你对Rest风格如何理解?
  6. · TCP的滑动窗口协议有什么用?讲讲原理。
  7. · HTTP协议都有哪些方法?
  8. · 交换机和路由器的区别?
  9. · Socket交互的基本流程?
  10. · 协议(报文结构,断点续传,多线程下载,什么是长连接)
  11. · tcp协议(建连过程,慢启动,滑动窗口,七层模型)
  12. · webservice协议(wsdl/soap格式,与rest协议的区别)
  13. · NIO的好处,Netty线程模型,什么是零拷贝

九、Redis等缓存系统/中间件/NoSQL/一致性Hash等

  1. · 列举一个常用的Redis客户端的并发模型。
  2. · HBase如何实现模糊查询?
  3. · 列举一个常用的消息中间件,如果消息要保序如何实现?
  4. · 如何实现一个Hashtable?你的设计如何考虑Hash冲突?如何优化?
  5. · 分布式缓存,一致性hash
  6. · LRU算法,slab分配,如何减少内存碎片
  7. · 如何解决缓存单机热点问题
  8. · 什么是布隆过滤器,其实现原理是? False positive指的是?
  9. · memcache与redis的区别
  10. · zookeeper有什么功能,选举算法如何进行
  11. · map/reduce过程,如何用map/reduce实现两个数据源的联合统计

十、设计模式与重构

  1. · 你能举例几个常见的设计模式
  2. · 你在设计一个工厂的包的时候会遵循哪些原则?
  3. · 你能列举一个使用了Visitor/Decorator模式的开源项目/库吗?
  4. · 你在编码时最常用的设计模式有哪些?在什么场景下用?
  5. · 如何实现一个单例?
  6. · 代理模式(动态代理)
  7. · 单例模式(懒汉模式,恶汉模式,并发初始化如何解决,volatile与lock的使用)
  8. · JDK源码里面都有些什么让你印象深刻的设计模式使用,举例看看?

十一:微服务

1、什么是微服务?

2、微服务之间是如何独立通讯的

3、springCloud和dubbo 有哪些区别?

4、springboot和springcloud,请你谈谈对他们的理解?

5、什么是微服务熔断?什么是服务降级?

6、微服务的优缺点分别是什么?说下你在项目开发中碰到的坑

7、你所知道的微服务技术栈有哪些?请列举一二

8、eureka和zookeeper都可以提供服务的注册和发现的功能,请说说两个的区别?

你可能感兴趣的:(优质文章收集,note)