2018年的秋招来得比往年都早,这周投了蚂蚁金服内推,刚刚接到一面电话,时长22分钟,简记如下。

1、介绍实习项目(实习项目采用微服务架构,引出的问题2和3)
2、(实习项目)微服务的实现,如何做服务发布和服务发现
3、服务发现以后,服务中心还起哪些作用
4、事务四特性:ACID(原子性atomicity、一致性consistency、隔离性isolation、持久性durability)
5、分布式数据库如何实现ACID
6、分布式ID生成器:SnowFlake算法、唯一性保证、高可用的保证(参考美团Leaf组件)
7、ArrayList和LinkedList的区别,具体应用场景
8、hashCode和equals方法
9、HashMap内部结构,散列冲突的处理(注意JDK8与之前版本实现不一样),是否线程安全
10、序列化
11、JVM内存类型(堆内存、栈帧……),堆内存类型(持久代、年老代、年轻代),GC类型(Young GC、Full GC)、GC算法(串行,并行,G1……)、GC方法(引用计数 VS 可达性分析)、GC日志
12、线程状态及转化
13、StackOverFlow发生的场景,其他OOM
14、分库分表的实现,跨库分页
15、AOP的关键概念,代理模式(JDK动态代理和CgLib代理)
16、常见加密算法

Update

距一面仅过去两天,遂接到二面电话(事实上昨天就打了一次电话,但约的今天面试)。二面用时1小时27分钟,应该算是比较长的了,时间关系,简单整理一下问到的问题。

项目类:

  1. 介绍最近的一个项目
  2. 如何从PRD转换成设计
  3. UML图的使用

架构类:

  1. 服务部署的方案设计,单机QPS多少,计划布几台机器,如何评估
  2. 分布式系统数据一致性的保证,有无预防(不一致的)措施
    e.g 下游系统双写失败的处理?下游双写成功后上游事务rollback的处理?
    p.s 了解分布式事务的解决方案
  3. 服务间数据同步的时效性如何保证?同步策略的选择

技术类(问题1~2有项目背景):

  1. MQ的适用场景
  2. WebSocket的适用场景,对比长连接的优势,从原理上说说两者对性能的影响
  3. MySQL两种存储引擎的差异
  4. MySQL索引的原理及实现,建立索引的注意事项
    e.g gmt_modify字段可以建索引吗?如何优化根据gmt_modify的查询性能?
  5. Redis的原理,Redis-Cluster实现HA,为什么不直接在本地做缓存
  6. HashMap的内部实现,如何put值
    e.g. 什么情况下HashMap内会出现多个相同的Key,导致内存溢出
    (面试官提示:与hashCode方法的实现有关)
  7. 自己用反射写过的工具类或者框架,为什么不能反射出方法的参数名
    p.s 方法签名的构成要件
  8. 线程的种类和创建方式,并发的控制
  9. synchronized关键字锁什么,同一个类的多个实例如何用synchronized同步
    p.s 锁 类名.class 对象
  10. 死锁的定义和避免
  11. JVM的内存模型和GC机制,常见的GC算法,分别应用在哪一块内存区域
  12. Java的引用类型,之间有哪些区别
  13. TLS握手的过程,验签的步骤
  14. volatile关键字能用于同步吗

开放型:

  1. 数据的价值,对大数据的看法
  2. 蚂蚁金服可以在哪些方面应用大数据
    p.s 答支付宝风控,多样化的规则引擎

面试官评价:
对Java基础,要知其然,知其所以然;推荐你阅读《深入理解Java虚拟机》

Update2

听这评价,十有八九呵呵了,果不其然,几小时后状态变成已回绝……