2019 阿里系 BTA JAVA 面试题


一、Java基础

集合

  • 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 而不是 ArrayList?
  • Java 集合类框架的最佳实践有哪些?
  • Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用 == 还是 equals()?它们有何区别?
  • Comparable 和 Comparator 接口是干什么的?列出它们的区别
  • Collection 和 Collections 的区别。

二、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方法后,其它线程是否可进入此对象的其方法?
  • 线程池的原理,为什么要创建线程池?创建线程池的方式?
  • 创建线程池有哪几个核心参数? 如何合理配置线程池的大小?
  • synchronized修饰的静态方法和非静态方法有什么区别?
  • 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 需要注意些什么?

三、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问题或内存溢出问题,如何定位?
  • 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 中垃圾收集的方法有哪些?
  • 什么是类加载器,类加载器有哪些?
  • 类加载器双亲委派模型机制?

五、SQL性能优化

  • 数据库三范式是什么?
  • 数据库的事务、ACID及隔离级别?
  • 不考虑事务的隔离性,容易产生哪三种情况?
  • 数据库连接池原理?
  • 什么是B-Tree?
  • 什么是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如何创建、回退以及撤销版本?
  • 常见的设计模式有哪些?
  •  

十、Netty

  • 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有哪些优势?4

  • redis常见性能问题和解决方案

  • MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据245

  • Memcache与Redis的区别都有哪些?

  • Redis 常见的性能问题都有哪些?如何解决?

  • Redis 最适合的场景

十三、其他

  • 看过哪些源代码?然后会根据你说的源码问一些细节的问题?
  •      (这里主要考察面试者是否对技术有钻研的精神,还是只停留在表面,还是背了几道面经,这个对于很多有强迫症的面试官,如果你连源码都没看过,基本上是会pass掉的!)
  • 项目中遇到了哪些比较有挑战性的问题,是如何解决的;
  •      (这个很有争议,一方面是你连一个复杂的问题都解决不了,要你过来干什么,还有就是,我的能力牛逼啊,但是公司没有业务场景让我展示啊!这个就看你遇到的面试官了)

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值