其实复盘完了之后发现蚂蚁金服项目也没有问的太深入,为什么我感觉挺坑呢淦,仔细想了一想可能是关于操作方面问的比较多把~。

蚂蚁这个三轮都过了,但是感觉不稳,拒了

一面

Java

1. Jvm的内存结构

jar包和final static在哪

2. 双亲委派

自己new一个java.lang.String有什么影响

如果是实现双亲委派模型的类加载则直接报错,如果自己的类加载器的话也会报错,因为Jvm规定了只能有Bootstrap加载java.*包

自定义类加载器

3. G1的优点

适合低延迟

DB

4. MySQL的隔离级别

RU,RC,RR,S

5. Redis的sort set

如何对set进行排序

通过跳表

set有什么操作

6. 找出所有成绩大于80的学生SQL

1
select id from student group by id having min(score) > 80

数据结构和算法

7. 数组和链表的区别

8. LeetCode只出现一次的数字

项目

9. 防止脚本秒杀的方案

refer,动态锁,黑名单,xss,cxsf,https,动态url,开始前一分钟输入验证码

10. 如何增加TPS

11. 如何防止Redis的库存不能少于0

如何防止集群对Redis的并发操作:使用Redis的事物或者分布式锁

12. 如何实现分布式锁

使用redis和zookeeper实现

13. Redis删锁过期怎么办

不让它过期,可以定时发送心跳,如果业务还在执行就为锁加上时间

14. Redis的IO模型

15. IO多路复用

16. Redis为什么单线程

17. Redis有保证原子操作的机制吗

redis的事物操作(但是redis的事物应该是保证了隔离性和一致性,没有保证原子性)

比赛

这是唯一一次面试问到比赛的,问了两个比赛获胜的原因

星环

  1. 采用合适的时间预测模型,时间和人流关联,PPT,方案
  2. 强网杯

二面

Java

1. Java接触多久了

2. 生产者消费者模式的实现方式

3. Condition和notify的区别

4. ConcurrentHashMap的原理

5. 本地变量存在哪里

6. volatile如何保证可见性

7. 工作内存和主内存的存储方式

8. JDK看过哪些源码

9. String类的char[]编码方式

UTF-16

DB

10. MySQL的存储结构

11. B+树的优点

项目

12. 数据库方面如何优化

13. 数据库如何保持不会超买

加锁和MQ

14. 集群如何并发操作单台Redis

利用redis的事物和单线程

15. 如何补库存

删Redis-补MySQL-删Redis

两台Tomcat补库存后发生覆盖怎么办

每台tomcat使用sync对删除和标记加锁

三面

支付宝是前天晚上9点半我在洗jio的时候电话打过来的,足以看出支付宝这边福报程度,P9大佬这个点还在加班,我吐。而且不预约是蚂蚁金服一贯的传统。这次面试应该也是过了,又面临着支付宝和阿里金融两难的选择境地。

1. 项目中为什么要用Nginx

用nginx做反向代理和负责均衡

2. Nginx为什么可以做负载均衡

一般来说公网延迟高,客户端与nginx之间的请求连接走公网,nginx先把这些请求缓存住,等这些请求数据全部完成之后nginx再向内网服务器请求,降低公网网络延迟成本,同时也降低一个连接占用服务端程序的时间。

因为tcp不一定一次就能把全部数据传输完毕,所以一个连接可能需要等待很久才能把所有需要的数据都传输完毕,而这样的空闲连接如果都直接连接到服务器上的话,会加重服务器负担,而nginx在这方面做了很大的优化,可以承载更多的连接,空闲连接也不会占据太多内存,所以nginx作为反向代理能降低上游服务器的负载。
Nginx提升网站性能的原因

Nginx比tomcat好在哪里?

主要有三个技术方面,master-worker进程模型,nio,协程机制

3. 正向代理和反向代理

正向代理隐藏真实客户端,反向代理隐藏真实服务端。

我们常说的反向代理其实也就是在tomcat后面做集群的时候,nginx隐藏了服务端的集群,这便是反向代理

而正向代理其实就是nginx向后台服务器隐藏了client端的browser,app,h5等等的请求,这便是正向代理

4. 两阶段提交

5. 4个任务,线程池参数为2,2,4,如何执行