
前言在过 2 个月即将进入9月了然而面对今年的大环境而言跳槽成功的难度比往年高了很多很明显的感受就是对于今年的 java 开发朋友跳槽面试无论一面还是二面都开始考验一个 Java 程序员的技术功底和基础。对源码解读和核心原理理解也是成了加分项特别是对 Java 的一些核心基础知识点掌握的不够或者没有体系方向的朋友面试也成了一个苦恼的事情。不论是校招还是社招都避免不了各种面试、笔试如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的我这个“有章可循”说的意思只是说应对技术面试是可以提前准备。我其实特别不喜欢那种临近考试就提前背啊记啊各种题的行为非常反对我觉得这种方法特别极端而且在稍有一点经验的面试官面前是根本没有用的。建议大家还是一步一个脚印踏踏实实地走。今天在这分享目前国内公司 Java 面试常问的问题包括 JVM、常用的算法和数据结构redis 缓存分布式Spring微服务等。正所谓知己知彼只有体系知识巩固面对不断更新的技术才能快速掌握同时在面试、工作中也更能脱颖而出1000 道高频常问 Java 体系面试问题Java 集合 22 题ArrayList 和 Vector 的区别。说说 ArrayList,Vector, LinkedList 的存储性能和特性。快速失败 (fail-fast) 和安全失败 (fail-safe) 的区别是什么hashmap 的数据结构。HashMap 的工作原理是什么?Hashmap 什么时候进行扩容呢List、Map、Set 三个接口存取元素时各有什么特点Set 里的元素是不能重复的那么用什么方法来区分重复与否呢? 是用 还是 equals()? 它们有何区别?两个对象值相同 (x.equals(y) true)但却可有不同的 hash code这句话对不对?heap 和 stack 有什么区别。Java 集合类框架的基本接口有哪些HashSet 和 TreeSet 有什么区别HashSet 的底层实现是什么?LinkedHashMap 的实现原理?为什么集合类没有实现 Cloneable 和 Serializable 接口什么是迭代器 (Iterator)Iterator 和 ListIterator 的区别是什么数组 (Array) 和列表 (ArrayList) 有什么区别什么时候应该使用 Array 而不是 ArrayListJava 集合类框架的最佳实践有哪些Set 里的元素是不能重复的那么用什么方法来区分重复与否呢是用 还是 equals()它们有何区别Comparable 和 Comparator 接口是干什么的列出它们的区别Collection 和 Collections 的区别。JVM 与调优 21 题Java 类加载过程描述一下 JVM 加载 Class 文件的原理机制?Java 内存分配。GC 是什么? 为什么要有 GC简述 Java 垃圾回收机制如何判断一个对象是否存活或者 GC 对象的判定方法垃圾回收的优点和原理。并考虑 2 种回收机制垃圾回收器的基本原理是什么垃圾回收器可以马上回收内存吗有什么办法主动通知虚拟机进行垃圾回收Java 中会存在内存泄漏吗请简单描述深拷贝和浅拷贝。System.gc() 和 Runtime.gc() 会做什么事情finalize() 方法什么时候被调用析构函数 (finalization) 的目的是什么如果对象的引用被置为 null垃圾收集器是否会立即释放对象占用的内存什么是分布式垃圾回收DGC它是如何工作的串行serial收集器和吞吐量throughput收集器的区别是什么在 Java 中对象什么时候可以被垃圾回收简述 Java 内存分配与回收策率以及 Minor GC 和 Major GC。JVM 的永久代中会发生垃圾回收么Java 中垃圾收集的方法有哪些什么是类加载器类加载器有哪些类加载器双亲委派模型机制并发编程 28 题Synchronized 用过吗其原理是什么你刚才提到获取对象的锁这个“锁”到底是什么如何确定对象的锁什么是可重入性为什么说 Synchronized 是可重入锁JVM 对 Java 的原生锁做了哪些优化48为什么说 Synchronized 是非公平锁49什么是锁消除和锁粗化49为什么说 Synchronized 是一个悲观锁乐观锁的实现原理又是什么什么是 CAS它有什么特性乐观锁一定就是好的吗跟 Synchronized 相比可重入锁 ReentrantLock 其实现原理有什么不同那么请谈谈 AQS 框架是怎么回事儿请尽可能详尽地对比下 Synchronized 和 ReentrantLock 的异同。ReentrantLock 是如何实现可重入性的除了 ReetrantLock你还接触过 JUC 中的哪些并发工具请谈谈 ReadWriteLock 和 StampedLock。如何让 Java 的线程彼此同步你了解过哪些同步器请分别介绍下。CyclicBarrier 和 CountDownLatch 看起来很相似请对比下呢Java 线程池相关问题Java 中的线程池是如何实现的创建线程池的几个核心构造参数线程池中的线程是怎么创建的是一开始就随着线程池的启动创建好的吗既然提到可以通过配置不同参数创建出不同的线程池那么 Java 中默认实现好的线程池又有哪些呢请比较它们的异同如何在 Java 线程池中提交线程什么是 Java 的内存模型Java 中各个线程是怎么彼此看到对方的变量的请谈谈 volatile 有什么特点为什么它能保证变量对所有线程的可见性既然 volatile 能够保证线程间的变量可见性是不是就意味着基于 volatile 变量的运算就是并发安全的请对比下 volatile 对比 Synchronized 的异同。请谈谈 ThreadLocal 是怎么解决并发安全的很多人都说要慎用 ThreadLocal谈谈你的理解使用 ThreadLocal 需要注意些什么Spring25 题微服务 58 题SpringBoot,SpringCloudDubboNetty10 题BIO、NIO 和 AIO 的区别NIO 的组成Netty 的特点Netty 的线程模型TCP 粘包/拆包的原因及解决方法了解哪几种序列化协议如何选择序列化协议Netty 的零拷贝实现Netty 的高性能表现在哪些方面NIOEventLoopGroup 源码网络网络 7 层架构TCP/IP 原理TCP 三次握手/四次挥手HTTP 原理传输流程HTTP 状态CDN 原理Redis什么是 redis?Reids 的特点Redis 支持的数据类型Redis 是单进程单线程的虚拟内存Redis 锁读写分离模型数据分片模型Redis 的回收策略使用 Redis 有哪些好处redis 相比 memcached 有哪些优势4redis 常见性能问题和解决方案MySQL 里有 2000w 数据redis 中只存 20w 的数据如何保证 redis 中的数据都是热点数据 245Memcache 与 Redis 的区别都有哪些Redis 常见的性能问题都有哪些如何解决Redis 最适合的场景ZookeeperKafkaPs由于篇幅限制笔记无法全部为大家展示出来就以截图主要内容的形式让大家参考啦需要完整的朋友在文末获取全部目录及答案展示其中数据结构我分开整理了写在末尾一些建议和行业愿景文章写到这里差不多可以停笔了但是又好像还想说点什么或许是对同行的你一些小建议也或许是对整个行业的一些愿景。近几年来铺天盖地而来的“程序员 35 岁”制造了不少年龄焦虑试问自己被公司裁员被社会淘汰真的是年龄导致的吗大多数还是与自己能力相关在我接触到的认知里互联网公司 35 岁以上的技术经理技术大牛仍有不少。实际上无论你是什么行业能力不过关都会被淘汰而避免被淘汰的唯一办法坚持学习。所以最后希望同为代码献身的我们不负初衷不畏困难拥抱发展