一.java基础 什么是字符串常量池? String为什么是不可变的? String s = new String("xyz");究竟产生了几个对象,从JVM角度谈谈? String拼接字符串效率低,你知道原因吗? 你真的了解String的常见API吗? Java中的subString()真的会引起内存泄露么? 浅析Java中的final关键字? 浅析Java中的static关键字? 你对Java中的volatile关键字了解多少? i++是线程安全的吗?如何解决线程安全性? 从字节码角度深度解析 i++ 和 ++i 线程安全性原理? 请谈谈什么是CAS? 从源码角度看看ArrayList的实现原理? 手写LinkedList的实现,彻底搞清楚什么是链表? Java中方法参数的传递规则? Java中throw和throws的区别是什么? 重载和重写的区别? 手写ArrayList的实现,在笔试中如何过关斩将? finally语句块你踩过哪些坑? 为什么重写equals方法需同时重写hashCode方法? equals() 与 == 的区别? StringBuffer和StringBuilder的区别,从源码角度分析? 你知道HashMap的数据结构吗? 为何HashMap的数组长度一定是2的次幂? HashMap何时扩容以及它的扩容机制? HashMap的key一般用字符串,能用其他对象吗? HashMap的key和value都能为null么?如果key能为null,那么它是怎么样查找值的? HashMap是线程安全的吗?如何实现线程安全? 从源码角度分析HashSet实现原理? HashTable与HashMap的实现原理有什么不同? String方法intern() 你真的会用吗? 什么是自动拆装箱? String.valueOf和Integer.toString的区别? Java 的反射中,Class.forName 和 ClassLoader 的区别? 二、Java多线程 线程的生命周期包括哪几个阶段? 多线程有几种实现方式? 请谈谈什么是进程,什么是线程? 启动线程是用start()方法还是run()方法? 说说线程安全问题,什么实现线程安全,如何实现线程安全? sychronized和Lock的区别? sleep()和wait()的区别? 深入分析ThreadLocal的实现原理? 你看过AbstractQueuedSynchronizer源码阅读吗,请说说实现原理? 谈谈对synchronized的偏向锁、轻量级锁、重量级锁的理解? 通过三种方式实现生产者消费者模式? JVM层面分析sychronized如何保证线程安全的? JDK层面分析sychronized如何保证线程安全的? 如何写一个线程安全的单例? 通过AQS实现一个自定义的Lock? ThreadLocal什么时候会出现OOM的情况?为什么? 为什么wait, notify 和 notifyAll这些方法不在thread类里面? 你真的理解CountDownLatch与CyclicBarrier使用场景吗? 出现死锁,如何排查定位问题? notify和notifyAll的区别? 线程池启动线程submit和execute有什么不同? SimpleDateFormat是线程安全的吗?如何解决? 请谈谈ConcurrentHashmap底层实现原理? 使用synchronized修饰静态方法和非静态方法有什么区别? 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其方法? 线程池的原理,为什么要创建线程池?创建线程池的方式? 创建线程池有哪几个核心参数? 如何合理配置线程池的大小? 三、Java Web 什么是Servlet,Servlet生命周期方法? 什么Session和Cookie,它们之间有什么联系? JSP的八个隐含对象有哪些? JSP的四个域对象的作用范围? Post和Get请求的区别? 转发和重定向有什么区别? JSP自定义标签,如何实现循环打印功能? Http1.0和Http1.1的区别是什么? 拦截器与过滤器的区别? 四、JVM面试题 JVM内存区域如何划分? JVM堆中对象是如何创建的? JVM对象的结构? JVM垃圾回收-如何判断对象是否是垃圾对象? JVM垃圾回收算法有哪些? JVM垃圾收集器有哪些? JVM内存是如何分配的? 从一道面试题分析类的加载过程? JVM双亲委派机制? JVM可以作为GC Root的对象有哪些? 请写出几段可以导致内存溢出、内存泄漏、栈溢出的代码? 哪些情况会导致Full GC? 频繁GC问题或内存溢出问题,如何定位? 五、SQL性能优化 数据库的事务、ACID及隔离级别? 不考虑事务的隔离性,容易产生哪三种情况? 数据库连接池原理? 什么是B-Tree? MySQL数据库索引结构? 什么是索引?什么条件适合建立索引?什么条件不适合建立索引? 索引失效的原因有哪些?如何优化避免索引失效? MySQL如何启动慢查询日志? MySQL如何使用show Profile进行SQL分析? 一条执行慢的SQL如何进行优化,如何通过Explain+SQL分析性能? 什么是行锁、表锁、读锁、写锁,说说它们各自的特性? 什么情况下行锁变表锁? 什么情况下会出现间隙锁? 谈谈你对MySQL的in和exists用法的理解? MySQL的数据库引擎有哪些,如何确定在项目中要是用的存储引擎? count(*)、count(列名)和count(1)的区别? union和union all的区别? 六、Spring框架 Spring的IOC和AOP机制? Spring中Autowired和Resource关键字的区别? 依赖注入的方式有几种,各是什么? Spring容器对Bean组件是如何管理的? Spring容器如何创建? Spring事务分类? Spring事务的传播特性? Spring事务的隔离级别? Spring的通知类型有哪些? 七、SpringMVC框架 SpringMVC完整工作流程,熟读源码流程? SpringMVC如何处理JSON数据? SpringMVC拦截器原理,如何自定义拦截器? SpringMVC如何将请求映射定位到方法上面?结合源码阐述? SpringMVC常见注解有哪些? SpringMVC容器和Spring容器的区别? SpringMVC的控制器是不是单例模式,如果是,有什么问题,怎么解决? 八、MyBatis框架 MyBatis中#和$的区别? MyBatis一级缓存原理以及失效情况? MyBatis二级缓存的使用? MyBatis拦截器原理? 看过MyBatis源码吗,请说说它的工作流程? 九、Java高级部分 Dubbo负载均衡策略? Dubbo中Zookeeper做注册中心,如果注册中心集群都挂掉,发布者和订阅者之间还能通信么? Dubbo完整的一次调用链路介绍? 请说说SpringBoot自动装配原理? 有用过SpringCloud吗,请说说SpringCloud和Dubbo有什么不一样? 什么是WebService,如何基于WebService开发接口? 谈谈项目中分布式事务应用场景? 使用Redis如何实现分布式锁? 请谈谈单点登录原理? Tomcat如何优化? 后台系统怎么防止请求重复提交? Linux常见命令有哪些? 请说说什么是Maven的依赖、继承以及聚合? Git暂存区和工作区的区别? Git如何创建、回退以及撤销版本? 常见的设计模式有哪些?