让我们先来看看阿里P6招聘需求


感觉面试还是主要围绕简历来问的,所以不熟悉的东西最好不要随便写上去。项目和基础都很重要,项目中最好有难点,能够体现自己解决问题的过程和思路。


电话面:

  • 自我介绍

  • 事务的特性 ACID , 数据库的死锁发生的情景

  • 死锁的四个必要特性, 非共享, 持有并等待, 非抢占, 循环等待

  • 死锁避免 死锁预防

  • 线程的状态 , 新建,就绪,running, wait, blocked, terminated

  • sleep 和 wait 的区别, 类的不同,是否会释放持有的锁,monitor

  • JDK 可重入锁, 读写锁 , 底层 AQS,抽象队列同步器的机制

  • 悲观锁和乐观锁, 概念上,JDK 中的类, CAS的缺点, 空转,ABA问题。使用pause指令, AtomicStampedReference

  • 讲一讲Servlet, web.xml 配置路径到servlet的映射, init, service, destroy

  • 可以看一看Tomcat容器的过程 ,Connector和 Context容器两大部分。完成从socket到 request和Response对象的构造

  • SpringMVC的 dispatcher-servlet的请求解析过程

  • redis介绍, 系统中的角色,作为缓存, 分布式session服务器

  • redis的 性能,可用性,主从复制+哨兵, redis缓存访问有网络上的消耗。

  • redis事务, 分布式事务, 2PC, 本地消息表等, 3PC




阿里一面:

  • 讲一讲异常, throwable, exception, error

  • try- catch

  • 手写单例模式——很生疏,GG

  • volatile ,作用,底层, lock 前缀的指令, 多CPU的嗅探机制,多处理器下的缓存一致性协议

  • synchronized

  • JVM 内存划分, 堆内存分代

  • redis, 源码,

  • spring bean的实例化过程。——不熟悉的地方不要写上去。

  • AOP

  • 使用redis来实现单点登录,那么当单个redis节点内存不够的时候,怎么办?集群化,redis-Cluster

  • 比较偏底层



阿里二面:

  • JVM内存划分, 堆内存为什么要进行分代回收, 生命周期不同

  • redis,主从,哨兵,集群,分布式锁。

  • redis的对象类型, 每种对象类型对应的底层的数据结构,参考redis设计与实现。

  • string, list, hash, set, sortedset.

  • 每种对象都至少有2中数据结构, SDS, linkedlist, ziplist, intset, ziplist, skiplist

  • ISN, TCP协议为什么要随机初始化一个序列号——安全性, 防止和上一次会话滞留的报文冲突


阿里三面:

  • 说明一下缺页中断, 虚拟内存

  • JVM中的内存区域划分,堆的分代,为什么分代, 垃圾回收算法,垃圾回收器

  • Linux进程间的通信方式, 管道,有名管道,socket,共享内存,消息队列

  • 如何实现进程间特定场景下的高效通信, 问了存储相关的问题。

  • MySQL索引类型, 底层的数据结构

  • 手写一个双链表的插入和删除,查找方法


HR面:

  • 自我介绍

  • 项目中遇到的难点,

  • 对部门的理解

  • 个人的职业发展,城市的选择,职业方向,有没有其他公司的offer


阿里高级Java必考题与答案


答案获取方式——点击此处 即可领取