1、 JAVA 面试题总览 注 : 此文档为群主将群共享里的所有面试题 (去掉了一些 重复的和 过时的 )整理而成 。 更新日期 2017-1-20, 欢迎加入群 329019348 JAVA 基础 1. JAVA 中的几种基本数据类型是什么,各自占用多少字节。 2. String 类能被继承吗,为什么 。 3. String, Stringbuffer, StringBuilder 的区别 。 4. ArrayList 和 LinkedList 有什么区别 。 5. 讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当 new 的时候 , 他们的执行顺序 。 6
2、. 用过哪些 Map 类 ,都有什么区别, HashMap 是线程安全的吗 ,并发下使用的 Map 是什么,他们内部原理分别是什么,比如 存储方式 , hashcode,扩容 , 默认容量 等 。 7. JAVA8 的 ConcurrentHashMap 为什么放弃了分段锁,有什么问题吗,如果你来设计,你如何设计。 8. 有没有有顺序的 Map 实现类 , 如果有 , 他们是怎么保证有序的 。 9. 抽象类和接口的区别,类可以继承多个类么,接口可以继承多个接口么 ,类可以实现多个接口么 。 10. 继承和聚合的区别在哪 11. 讲讲你理解的 nio。 12. 反射的原理,反射创建类实例的三种方
3、式是什么。 13. 反射中, Class.forName 和 ClassLoader 区别 。 14. 描述动态代理的几 种实现方式,分别说出相应的优缺点。 15. 动态代理与 cglib 实现的区别 。 16. 为什么 CGlib 方式可以对接口实现代理。 17. final 的用途 。 18. 写出三种单例模式实现 。 19. 如何在父类中为子类自动完成所有的 hashcode 和 equals 实现?这么做有何优劣。 20. 请结合 OO 设计理念,谈谈访问修饰符 public、 private、 protected、 default 在应用设计中的作用。 21. 深拷贝和浅拷贝区别。
4、22. 数组和链表数据结构描述,各自的时间复杂度。 23. error 和 exception 的区别, CheckedException, RuntimeException 的区别。 24. 请列出 5 个运行时异常。 25. 在自己的代码中,如果创建一个 java.lang.String 对象,这个对象是否可以被类加载器加载?为什么。 26. 说一说你对 java.lang.Object 对象中 hashCode 和 equals 方法的理解。在什么场景下需要重新实现这两个方法。 27. 在 jdk1.5 中,引入了泛型,泛型的存在是用来解决什么问题。 28. 这样的 a.hashcode
5、() 有什么用,与 a.equals(b)有什么关系。 29. 有没有可能 2 个不相等的对象有相同的 hashcode。 30. Java 中的 HashSet 内部是如何工作的。 31. 什么是序列化,怎么序列化,为什么序列化,反序列化会遇到什么问题,如何解决。 JVM 知识 1. 什么情况下会发生栈内存溢出 。 2. JVM 的内存结构 , Eden 和 Survivor 比例 。 3. jvm 中一次完整的 GC 流程是怎样的,对象如何晋升到老年代,说说你知道的几种主要的jvm 参数 。 4. 你知道哪几种垃圾收集器,各自的优缺点,重点讲下 cms,包括 原理, 流程,优缺点 5. 垃
6、圾回收算法的实现原理。 6. 当出现了内存溢出,你怎么排错 。 7. JVM 内存模型的相关知识了解多少 , 比如重排序 , 内存屏障 , happen-before,主内存,工作内存 等。 8. 简单说说你了解的类加载器 。 9. 讲讲 JAVA 的反射机制 。 10. 你们线上应用的 JVM 参数有哪些 。 11. g1 和 cms 区别 ,吞吐量优先和响应优先的垃圾收集器选择。 12. 请解释如下 jvm 参数的含义 : -server -Xms512m -Xmx512m -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxTe
7、nuringThreshold=20 XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly。 开源框架 知识 1. 简单讲讲 tomcat 结构, 以及其 类加载器流程 。 2. tomcat 如何调优,涉及哪些参数 。 3. 讲讲 Spring 加载流程 。 4. 讲讲 Spring 事务的传播属性 。 5. Spring 如何管理事务的 。 6. Spring 怎么配置事务(具体说出一些关键的 xml 元素)。 7. 说说你对 Spring 的理解,非单例注入 的原理?它的生命周期?循环注入的原理,
8、aop 的实现原理,说说 aop 中的几个术语,它们是怎么相互工作的。 8. Springmvc 中 DispatcherServlet 初始化过程。 操作系统 1. Linux 系统下你关注过哪些内核参数,说说你知道的 。 2. Linux 下 IO 模型有几种,各自的含义是什么 。 3. epoll 和 poll 有什么区别 。 4. 平时用到哪些 Linux 命令 。 5. 用一行命令查看文件的最后五行。 6. 用一行命令输出正在运行的 java 进程 。 7. 介绍下你理解的操作系统中线程切换过程。 8. 进程和线程的区别。 多线程 1. 多线程的几种实现方式,什么是线程安全 。 2.
9、 volatile 的原理,作用,能代替锁么 。 3. 画一个 线程的 生命周期 状态图。 4. sleep 和 wait 的区别 。 5. Lock 与 Synchronized 的区别 ,讲讲 synchronized 的原理。 6. synchronized 的原理是什么 ,解释以下名词: 重排序 , 自旋锁 , 偏向锁 , 轻量级锁 , 可重入锁 , 公平锁 , 非公平锁 , 乐观锁 , 悲观锁 。 7. 用过哪些原子类,他们的原理是什么 。 8. 用过 线程池 吗 , newCache 和 newFixed 有什么区别 , 他们的原理简单概括下,构造函数的各个参数的含义 是什么 ,比
10、如 coreSize, maxsize 等。 9. 线程池的关闭方式有几种,各自的区别是什么 。 10. 假如 有一个第三方接口,有很多个线程去调用获取数据,现在规定每秒钟最多有 10 个线程同时调用它,如何做到。 11. spring 的 controller 是单例还是多例,怎么保证并发的安全 。 12. 用三个线程按顺序循环打印 abc 三个字母,比如 abcabcabc。 13. ThreadLocal 用过么, 用途是什么 , 原理是什么,用的时候要注意什么 。 14. 如果让你实现一个并发安全的链表,你会怎么做 。 15. 有哪些无锁数据结构 , 他们实现的原理是什么 。 16.
11、讲讲 java 同步机制的 wait 和 notify。 17. 多线程如果线程挂住了怎么办。 18. 单例模式下如何实现多线程。 19. countdowlatch 和 cyclicbarrier 的 内部原理和 用法,以及相互之间的差别。 20. 使用 synchronized 修饰静态方法和非静态方法有什么区别。 21. 简述 ConcurrentLinkedQueue 和 LinkedBlockingQueue 的用处和不同之处。 22. 导致线程死锁的原因?怎么解除线程死锁。 23. 非常多个线程(可能是不同机器),相互之间需要等待协调,才能完成某种工作,问怎么设计这种协调方案。 T
12、CP 与 HTTP 1. http1.0 和 http1.1 有什么区别 。 2. TCP三次握手和四次挥手的流程,为什么断开连接要 4次 ,如果握手只有两次,会出现什么 。 3. TIME_WAIT 和 CLOSE_WAIT 的区别 。 4. 说说你知道的几种 HTTP 响应码 ,比如 200, 302, 404。 5. 当你用浏览器打开一个链接的时候,计算机做了哪些工作步骤 。 6. TCP/IP 如何保证可靠性, 说说 TCP 头的结构 。 7. 如何避免浏览器缓存。 8. 简述 Http 请求 get 和 post 的区别以及数据包格式。 9. 简述 HTTP 请求的报文格式。 架构设
13、计与分布式 1. 常见的缓存策略有哪些,你们项目中用到了什么缓存系统,如何设计的 。 2. 用 java 自己实现一个 LRU。 3. 分布式集群下如何做到唯一序列号 。 4. 设计一个秒杀系统, 30 分钟没付款就自动关闭交易 。 5. 如何做一个分布式锁 。 6. 如何使用 redis 和 zookeeper 实现分布式锁?有什么区别优缺点, 分别适用什么场景。 7. 如果有人恶意创建非法连接,怎么解决。 8. 分布式事务的原理, 优缺点 , 如何使用分布式事务 。 9. 什么是一致性 hash。 10. 什么是 restful,讲讲你理解的 restful。 11. 如何设计建立和保持
14、100w 的长连接 。 12. 如何防止缓存雪崩 。 13. 解释什么是 MESI 协议 (缓存一致性 )。 14. 说说你知道的几种 HASH 算法,简单的也可以 。 15. 什么是 paxos 算法 。 16. 一个在线文档系统,文档可以被编辑,如何防止多人同时对同一份文档进行编辑更新 。 17. 线上系统突然变得异常缓慢 , 你如何查找问题 。 18. 说说你平时用到的设计模式 。 19. Dubbo 的原理 ,数据怎么流转的 。 20. 一次 RPC 请求的流程是什么 。 21. 异步模式的用途和意义。 22. 缓存数据过期后的更新如何设计 。 23. 编程中自己都怎么考虑一些设计原则
15、的,比如开闭原则,以及在工作中的应用。 24. 设计一个社交网站中的“私信”功能,要求高并发、可扩展等等。 画一下架构图。 25. MVC 模式,即常见的 MVC 框架。 26. 聊了下曾经参与设计的服务器架构。 27. 应用服务器怎么监控性能,各种方式的区别。 28. 如何设计一套高并发支付方案,架构如何设计。 29. 如何实现负载均衡,有哪些算法可以实现。 30. Zookeeper 的用途,选举的原理是什么。 31. Mybatis 的底层实现原理。 32. 请思考一个方案,设计一个可以控制缓存总体大小的自动适应的本地缓存 。 33. 请思考一个方案,实现分布式环境下的 countDow
16、nLatch。 34. 后台系统怎么防止请求重复提交。 35. 如何看待缓存的使用(本地缓存,集中式缓存),简述本地缓存和集中式缓存和优缺点。本地缓存在并发使用时的注意事项。 36. 描述一个服务从发布到被消费的详细过程。 37. 讲讲你理解的服务治理。 38. 如何做到接口的幂等性 。 算法 1. 10 亿个数字里里面找最小的 10 个 。 2. 有 1 亿个数字,其中有 2 个是重复的,快速找到它,时间和空间要最优 。 3. 2 亿个随机生成的无序整数 ,找出中间大小的值 。 4. 给 一个不知道长度的(可能很大)输入字符串,设计一种方案,将重复的字符排重。 5. 遍历二叉树 。 6. 有
17、 3n+1 个数字,其中 3n 个中是重复的,只有 1 个是不重复的,怎么找出来。 7. 写一个字符串反转函数 。 8. 常用的排序算法,快排,归并、冒泡。 快排的最优时间复杂度,最差复杂度。冒泡排序的优化方案。 9. 二分查找的时间复杂度,优势。 10. 一个已经构建好的 TreeSet,怎么完成倒排序。 11. 什么是 B+树, B-树,列出实际的使用场景。 数据库知识 1. 数据库隔离级别有哪些,各自的含义是什么, MYSQL 默认的隔离级别是是什么 。 2. MYSQL 有哪些存储引擎 , 各自 优缺点 。 3. 高并发下,如何做到安全的修改同一行数据 。 4. 乐观锁和悲观锁是什么,
18、 INNODB 的行级锁有哪 2 种,解释其含义 。 5. SQL 优 化的一般步骤是什么,怎么看执行计划,如何理解其中各个字段的含义 。 6. 数据库会死锁吗,举一个死锁的例子, mysql 怎么解决死锁 。 7. MYsql 的索引 原理 , 索引的类型有哪些, 如何创建合理的索引,索引如何优化。 8. 聚集索引和非聚集索引的区别 。 9. 数据库中 BTREE 和 B+tree 区别 。 10. Btree 怎么分裂的 , 什么时候分裂 , 为什么是平衡的 。 11. ACID 是什么 。 12. Mysql 怎么优化 table scan 的 。 13. 如何写 sql 能够有效的使用
19、到复合索引。 14. mysql 中 in 和 exists 区别。 15. 数据库自增主键可能的问题。 消息队列 1. 用过哪些 MQ,和其他 mq 比较有什么优缺点, MQ 的连接是线程安全的吗 , 你们公司的MQ 服务架构怎样的 。 2. MQ 系统的数据如何保证不丢失 。 3. rabbitmq 如何实现集群高可用。 Redis, Memcached 1. redis 的 list 结构相关的操作。 2. Redis 的数据结构都有哪些。 3. Redis 的使用要注意什么,讲讲持久化方式,内存设置,集群的 应用和优劣势 ,淘汰策略等 。 4. redis2 和 redis3 的区别,
20、 redis3 内部通讯机制。 5. 当前 redis 集群有哪些玩法,各自优缺点,场景。 6. Memcache 的原理,哪些数据适合放在缓存中。 7. redis 和 memcached 的内存管理的区别 。 8. Redis 的并发竞争问题如何解决,了解 Redis 事务的 CAS 操作吗 。 9. Redis 的选举算法和流程是怎样的 搜索 1. elasticsearch 了解多少,说说你们公司 es 的集群架构,索引数据大小,分片有多少 , 以及一些调优手段 。 elasticsearch 的倒排索引 是什么 。 2. elasticsearch 索引数据多了怎么办,如何调优,部署。 3. lucence 内部结构 是什么 。