其实复盘完了之后发现蚂蚁金服项目也没有问的太深入,为什么我感觉挺坑呢淦,仔细想了一想可能是关于操作方面问的比较多把~。
蚂蚁这个三轮都过了,但是感觉不稳,拒了
一面
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的事物应该是保证了隔离性和一致性,没有保证原子性)
比赛
这是唯一一次面试问到比赛的,问了两个比赛获胜的原因
星环
- 采用合适的时间预测模型,时间和人流关联,PPT,方案
- 强网杯
二面
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等等的请求,这便是正向代理