V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
melonzzz
V2EX  ›  职场话题

[咱也不敢问系列]菜鸡的蚂蚁全挂面经

  melonzzz · 2019-04-25 15:53:45 +08:00 · 19965 次点击
这是一个创建于 2038 天前的主题,其中的信息可能已经有所发展或是发生改变。

说说自己的体验吧,经验的关系,能得到的面试不多,不过还是很幸运的能被大佬挑上简历,而且渣渣还能面俩部门,贼带劲儿.自己比较菜啊,简直就是在拿大厂刷经验,也发现了自己很多很多不会的东西.虽然挂了,但还是坚定了自己奔大厂的决心,福报啥的 emmm...后话了,继续加油~
PS: 蚂蚁的效率挺高的,反馈很快(隔天通知下一面或者通知你 GG 的邮件)...

加粗:求和大佬一起讨论所有的问题,找找正确答案

蚂蚁金服财富事业群一面

  1. TreeSet/HashSet 区别
  2. HashMap 如何解决冲突,扩容机制
  3. ConcurrentHashMap 如何做到高并发的
  4. 线程池平常怎么用
  5. 多个线程等待到某一节点然后统一放行有几种实现方式?
  6. 数据库索引结构
  7. select * from t where a=? and b>? order by c limit 0,100 如何加索引
  8. 什么是聚簇索引和非聚簇索引
  9. 介绍下 Fescar/了解 CAP 吗?redis 里的 CAP 是怎样的?
  10. 如何理解幂等?项目中接口的幂等是如何做的?
  11. 算法题:两个有序的 list,求交集

蚂蚁金服财富 二面(两次电话面试)

第一次电面
  1. 解释下乐观锁悲观锁
  2. JVM 判断对象是否回收?
  3. 反射能获得类里面方法的名称吗?参数名称呢?参数类型呢?
  4. 动态代理的实现方式?CgLib 和 jdk 的代理有什么区别?
  5. 分布式锁有哪些主流实现方式?redis 和 zk 锁有什么区别?
  6. ThreadLocal 作用是什么?说下用法
  7. 设计秒杀系统要考虑哪些点? 数据预热,CDN 缓存,超卖问题,流量削峰
  8. 从性能角度上如何保证秒杀系统稳定? 觉得应该是预热,削峰,库存扣减的操作放到缓存,减少数据库的访问
  9. A,B 系统转账如何保证分布式数据一致性?
  10. 你有什么想问的?
第二次电面
  1. 简单介绍下自己的近况
  2. 对 kafka 了解吗?Rocketmq 事务性消息怎么实现的?
  3. 假设事务提交的消息丢了,没有发到 broker 上面,会怎么处理?
  4. 分布式事务一致性如何保证?
  5. 二阶段提交解释下,如果本地事务超时会怎样处理?一阶段都可以 commit,二阶段的时候协调器发送全局提交的消息,这个时候消息发送失败了会怎么处理?
  6. TCC 对异常流是如何操作的?
  7. 为什么要看开源代码?
  8. 最终一致性如何实现的?
  9. 有没有遇到过死锁?
  10. A 往 B 转钱,B 往 A 转钱,同时的会死锁吗?如何解决死锁?
  11. 设计一个全局唯一流水号? ​ https://tech.meituan.com/2019/03/07/open-source-project-leaf.html
  12. 设计幂等方案防止重复提交? ​ 进页面的时候生成一个 token,请求带 token 过来,校验 token
  13. 大数相加
  14. 工厂方法模式一般如何实现?
  15. 单例模式
  16. 其他的设计模式
  17. 再答一下上次的秒杀系统
  18. 写金融类的系统有什么需要关注的地方?
  19. 非功能性的设计关注那些? ​ 其实想问你日志规范,代码规范之类的
  20. 你有什么想问的?

蚂蚁三面

  1. 如何提前发现你的数据有问题,而不是等到用户反馈才知道?

  2. 如何防止超卖?

  3. 为什么要用 Redis?为什么没有用 db? 数据量不小,查一次耗时长

  4. 有没有 QPS?(没有统计过指标)

  5. 如何部署?(阿里云采购)

  6. 发生过丢消息的情况吗?为什么会丢失? rocket 保证消息不丢失

  7. 项目的过程中哪个点比较难?

  8. 项目中为什么要用 ThreadLocal 去做租户的隔离?

  9. 项目有什么缺点?

  10. 100 亿行数据,每个数字 32 位,取最小的的数字

  11. 有没有碰到特别难的事情,如何解决的?

  12. 业界中间件有什么了解吗?讲一个你深度理解原理的.

  13. 高并发的问题有遇到过吗?分布式锁是排他的,如何提升存储效率? ​ 遇到的不多,但如果请求比较多的话会用分布式锁来解决,这么说也不对.应该是递进关系的,后面就给自己挖坑了 ​ 分布式锁是排他的,如何提升存储效率,应该是吞吐量的意思吧

  14. 有遇到过很大的流量吗? ​ 没有

  15. 描述产生一次 fullGC 的整个过程 ​ fullGC 解析

  16. 平时通过什么来提升自己 ​ 通过博客 /技术书籍

  17. 你有什么问题? (您觉得我的短板在于?) ​ 没有互联网的思维,不会估算系统容量就往上发,这怎么能行,数据双写如何保证一致 ​

蚂蚁金服国际事业群一面

头一天约了时间,第二天准时打电话过来了,整体下来偏基础,发现自己 JVM 相关菜的一笔,要好好补补,重新看一遍深入理解 java 虚拟机了

  1. 简单介绍下自己和项目 blablabla....

  2. 你觉得项目里最大的挑战是什么? 答得项目的设计和推动

  3. 为什么选择用 rocketmq? 公司推的呗

  4. 对 rocketmq 的了解?基本原理 发布订阅,服务注册,消息丢失的情况(几种情况:producer down,broker down,consumer down)

  5. 消息如何顺序? 单一队列,多队列分区顺序

  6. rocketmq 事务消息,producer 如果 down 掉,事务无法提交这种情况 https://github.com/apache/rocketmq/blob/master/docs/cn/design.md

  7. rocketmq 是强一致性还是弱一致性

  8. 消息重复如何解决?可以在中间件层解决吗?MQ 体系协议了解吗? 业务层幂等,中间件层 kafka 有做过这个处理,不了解

  9. ThreadLocal 是怎样的概念?如何实现线程隔离的?基于这个原理有没有更加优化的方式? ​ 这个优化让我懵逼了

  10. 线程池用 ThreadLocal 有什么问题?有什么思路来让业务方不去关注 ThreadLocal 的 set ​ ThreadLocal 在线程复用的时候值可能不是最新的,需要每次都 set

  11. 你说你用过 dubbo,那看过 netty 源码吗?
    ​ 不好意思没有....(那你回去看一下 netty 里的 FastThreadLocal,对 threadLocal 有优化) ​ https://blog.csdn.net/TheLudlows/article/details/85267651

  12. 讲讲 dubbo 的基本原理

  13. JVM 调优?
    ​ 没做过,说了下公司的一些 JVM 参数

  14. 频繁 YGC 如何排查?
    ​ 支支吾吾半天....

  15. 换个问题,为什么会发生 YGC?

  16. 如果知道哪些对象需要被回收?
    ​ GCROOT

  17. GCROOT 有哪些?

  18. 栈和堆有什么区别?

  19. 什么时候会压栈?

  20. 程序都是线程在执行,线程和栈和堆的关系? ​ 懵逼了,后来发现是想问,栈线程私有,堆公共,一时没想起来

  21. HashMap 如何实现?为什么会变红黑树呢?如何扩容?为什么是两倍?什么时候会用到位运算?
    ​ hashmap 到处都是位运算,居然只答出来一个扩容的,脑残 ​ indexFor 取位置的时候也是用的位运算 h&length-1 ​ 有提到扩容的问题.扩容两倍的原因,也是为了取模可以通过上面这个&操作来做提升性能,%据说慢十倍,咱也不知道,咱也不敢问 ​ https://blog.csdn.net/u014532901/article/details/78936283

  22. 你有什么想问的?

第 1 条附言  ·  2019-04-25 22:16:41 +08:00
大佬的建议和大家一起共勉,加油鸭~

https://www.v2ex.com/t/558746
126 条回复    2019-05-06 12:11:06 +08:00
1  2  
mortonnex
    1
mortonnex  
   2019-04-25 15:57:52 +08:00
感谢分享
aimaodeyuer
    2
aimaodeyuer  
   2019-04-25 16:05:16 +08:00   ❤️ 1
恐怖如斯
m3dull
    3
m3dull  
   2019-04-25 16:06:13 +08:00
厉害
chenqh
    4
chenqh  
   2019-04-25 16:07:25 +08:00 via Android
bat 面试,恐怖如斯
hyuka
    5
hyuka  
   2019-04-25 16:07:57 +08:00 via iPhone
有点好奇所有问题都是面试完全记下来了?
cxtrinityy
    6
cxtrinityy  
   2019-04-25 16:08:10 +08:00 via Android
怎么记住所有面试题的!!!
melonzzz
    7
melonzzz  
OP
   2019-04-25 16:08:47 +08:00   ❤️ 3
@cxtrinityy 都是电面,我都录音了.hahaha
melonzzz
    8
melonzzz  
OP
   2019-04-25 16:09:16 +08:00
@hyuka 电话录音了,这样也能知道自己哪里答得不好
hwding
    9
hwding  
   2019-04-25 16:26:06 +08:00
学习了。
sc13
    10
sc13  
   2019-04-25 16:26:26 +08:00 via Android
@melonzzz 录音牛逼
dovme
    11
dovme  
   2019-04-25 16:27:11 +08:00
请问楼主几年经验?
niceworld
    12
niceworld  
   2019-04-25 16:27:21 +08:00
感谢分享
coffeSlider
    13
coffeSlider  
   2019-04-25 16:28:54 +08:00
吓到了
coffeSlider
    14
coffeSlider  
   2019-04-25 16:43:45 +08:00
频繁 YGC 如何排查?

这个想问的是频繁 Full GC 吧?
JRay
    15
JRay  
   2019-04-25 16:46:33 +08:00
这一堆问题,有点懵
lekai63
    16
lekai63  
   2019-04-25 16:47:16 +08:00 via iPhone
算不算公开泄露公司机密?
我没 1000 万
melonzzz
    17
melonzzz  
OP
   2019-04-25 16:50:29 +08:00
@coffeSlider 就是频繁 YGC 或者说 YGC 时间很长如何排查
melonzzz
    18
melonzzz  
OP
   2019-04-25 16:50:37 +08:00
@dovme 一年
melonzzz
    19
melonzzz  
OP
   2019-04-25 16:51:37 +08:00
@lekai63 网上一堆面经咋能是泄密呢
mashoushan1989
    20
mashoushan1989  
   2019-04-25 16:54:51 +08:00
你这是面试的哪个级别?
mandy0119
    21
mandy0119  
   2019-04-25 16:56:26 +08:00
我面的时候也差不多。 阿里云平台的,不过 2 面之后没有接到过了或者挂了的通知。 都快一个月了,应该是挂了。
huhujin
    22
huhujin  
   2019-04-25 17:01:30 +08:00
我喷一下,这些面试题是也都是套路.大部分是没有必要的,一般业务都遇不到.能讲清一两点,完整的生态清楚已经不错了.
lnpangliang8
    23
lnpangliang8  
   2019-04-25 17:04:08 +08:00 via Android
@melonzzz 本科一年??本科一年拿这个砸人当你是超人?
cxtrinityy
    24
cxtrinityy  
   2019-04-25 17:06:26 +08:00 via Android
厉害厉害,一年,我不是服务端的,不过非服务端特定的问题感觉我现在也勉强差不多答出来,5 年经验了😓
LongV2
    25
LongV2  
   2019-04-25 17:09:18 +08:00
楼主是社招还是实习啊?
784015858
    26
784015858  
   2019-04-25 17:11:58 +08:00
这肯定社招啊,一年。。。。这是招大佬吧
melonzzz
    27
melonzzz  
OP
   2019-04-25 17:12:29 +08:00
@LongV2 社招一年
melonzzz
    28
melonzzz  
OP
   2019-04-25 17:13:33 +08:00
@mashoushan1989 没有级别之分,看面试官评级的,不过社招基本上都是 P6 起,我也没想着能过...
graysheeep
    29
graysheeep  
   2019-04-25 17:14:36 +08:00
不吹不黑 我只会单例模式那个题
bzi
    30
bzi  
   2019-04-25 17:15:52 +08:00
不愧是大厂,恐怖如斯
vance
    31
vance  
   2019-04-25 17:15:55 +08:00
还好,有些问题要深入的话要仔细研究下源码和原理
melonzzz
    32
melonzzz  
OP
   2019-04-25 17:18:10 +08:00
@vance 没错.分布式这块对我来说是硬伤,还有那个秒杀啊流水号这种设计...
2010
    33
2010  
   2019-04-25 17:18:41 +08:00
@melonzzz 去年面完之后说我算法有很大的进步空间(自我认为算法像屎一样,之后反复研读了算法导论至今,失去了对算法的自信,,,
melonzzz
    34
melonzzz  
OP
   2019-04-25 17:19:08 +08:00
@lnpangliang8 现在本科应届的哥们儿一个比一个 6 惭愧的很,大学光顾着玩了
melonzzz
    35
melonzzz  
OP
   2019-04-25 17:21:06 +08:00
@2010 同感,算法头疼,但是我发现了,真的要是把剑指 offer 刷完了,还是能应付应付的,问我的算法题,后来一看剑指 offer 上都有,但我就是没准备过
vance
    36
vance  
   2019-04-25 17:24:32 +08:00
@melonzzz 秒杀这些网上很多答案,其实都是差不多原理的,流水号可以看下 snowflake 之类的算法
zhanao1994
    37
zhanao1994  
   2019-04-25 17:25:24 +08:00 via Android
好吓人,顶不住
melonzzz
    38
melonzzz  
OP
   2019-04-25 17:26:31 +08:00
@huhujin 如果说小公司问这些东西我觉得很智障,但是一定体量之后这些问题是真的可能遇见的
melonzzz
    39
melonzzz  
OP
   2019-04-25 17:28:14 +08:00
@vance 对,流水号这个看了美团开源的 leaf,是个不错的流水号生成的开源原项目.也是用的 snowflake
Shook
    40
Shook  
   2019-04-25 17:29:03 +08:00
你录音了?
hun2008hun
    41
hun2008hun  
   2019-04-25 18:13:14 +08:00
能同时面蚂蚁金服 2 个部门??
zhuawadao
    42
zhuawadao  
   2019-04-25 18:30:41 +08:00
我慌了。
l00t
    43
l00t  
   2019-04-25 18:38:34 +08:00
这难度问一年的,真的没问题么……
woyixinyiyi
    44
woyixinyiyi  
   2019-04-25 18:46:13 +08:00   ❤️ 3
蚂蚁金服财富事业群一面,我当面试题做了很多不会的 求指点

1,TreeSet/HashSet 区别
TreeSet 使用的是 treeMap,看是传入了比较器 comportor,如果没传入,看 key 是否实现了 comparable 接口
区别在 treeset 是拍好按照 key 排序的,hashset 使用的是 hashmap 没有排序

2,HashMap 如何解决冲突,扩容机制
hashmap,是根据 hash 函数取模定位到一个数组索引,如果该地方有值,那么久以链表( 1.8 红黑树)的显示存放数据,
扩容设计到扩容因子,好像默认的是 0.75*当前数组的大小,大于这个值就需要扩容了。原数组长度乘 2

3,ConcurrentHashMap 如何做到高并发的
jdk1.7 好像是根据分 segment 来实现的,部分 key 归到一个 segment,没看 1.7 的源码
jdk1.8
在初始化 table 的时候,第一个进入的线程使用 cas 把 sizeCtl 设置为-1,其他线程发现 sizeCtl 的值小于 0,就放弃时间片,知道 table 初始化完成
存放值 put,当数组对于值为空,(n-1)&定位到数组下标,如果当前数组对于的值为 0 的时候 cas 放入即可,
不为空,使用 synchronize 锁头结点,也就是理论上吧 map 的同步锁最多有,扩容因子乘以数组大小了


4,线程池平常怎么用
new 线程池呗,还能怎么用,自己写?结合到自己项目就是
executorService = new ThreadPoolExecutor(4, 6, 10, TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(maxCheckNumber) ,new ThreadFactory() {
AtomicInteger atomicInteger = new AtomicInteger(0);
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(r,"checker-thread-"+atomicInteger.incrementAndGet());
if (t.isDaemon())
t.setDaemon(false);
if (t.getPriority() != Thread.NORM_PRIORITY)
t.setPriority(Thread.NORM_PRIORITY);
return t;
}
},new ThreadPoolExecutor.DiscardPolicy());
背景,线上是 4 核心 8g 内存的机器,然后这个是定时查询第三方接口的线程池。
初始化 4 个核心线程,最大为 6,存活时间 10s,设置一个定长的队列,然后命名线程名称,由于是查询任务,任务多久扔掉。

5,多个线程等待到某一节点然后统一放行有几种实现方式?
项目中久使用到了基于 CountDownLatch 的闭锁,基于 aqs 实现,维护一个 state,new 的时候初始化好线程数量,
然后线程执行的时候执行到 await 的时候,就把这个线程塞到一个双向队列中就完了,countdown 的时候用 cas 吧 state 减掉 1,为 0 就让哥哥的双向队列中的线程开始执行

6,数据库索引结构
mysql 常用 b+

7,select * from t where a=? and b>? order by c limit 0,100 如何加索引
如果是我建的话 index ( a,b,c )
根据 ab 查询到的数据,已经把 c 进行了排序了。。。

8,什么是聚簇索引和非聚簇索引
聚簇索引,mysql 的 innodb 使用的主键是聚簇索引,数据放在叶节点,数据是按照索引顺序排列的,索引和数据在一起。
如果非主键索引查询,也就是辅助索引,根据索引里面的值满足的话,可以不用回表,如果不满足,需要取出主键,在来回表使用主键查询。

非聚簇索引 myisam 索引文件和数据分开

9,介绍下 Fescar/了解 CAP 吗?redis 里的 CAP 是怎样的?
fescar 什么鬼,原谅我没听过,面试官你帮忙普及普及呗,
redis 里的 CAP 是怎样的 你要为什么呀
10,如何理解幂等?项目中接口的幂等是如何做的?
就是多次调用方法或者接口,除第一次执行外正确返回外,其他调用不会影响结果,
支付中的回调,先判断订单状态,未处理,则该状态,其他就不就行处理

11,算法题:两个有序的 list,求交集
嗯我 两层 for 循环 o(m*n),就问你怕不怕。
怕?
listm,listn
两个集合各设置一个指针 依次移动,每次都移动最小集合那边的指针 ,的一个值和另外一个比较,相等保存
Laodaige
    45
Laodaige  
   2019-04-25 18:50:33 +08:00
瑟瑟发抖 感觉自己啥都不会
melonzzz
    46
melonzzz  
OP
   2019-04-25 18:51:09 +08:00 via Android
@woyixinyiyi 那个算法,m.遍历,去 n 里二分查,效率应该 mlogn.
fescar 是阿里今年开源的分布式事务解决方案,我简历里写了,所以才问的。
5 也可以用 cyclicBarrier 吧,天然适用
melonzzz
    47
melonzzz  
OP
   2019-04-25 18:51:59 +08:00 via Android
@l00t 有问题他也这么问了啊🌚
melonzzz
    48
melonzzz  
OP
   2019-04-25 18:53:34 +08:00 via Android
@hun2008hun 所以说比较幸运,刚好有 hr 找我,就又怼了一轮
melonzzz
    49
melonzzz  
OP
   2019-04-25 18:53:56 +08:00 via Android
@Shook 违法?
mio4
    50
mio4  
   2019-04-25 18:56:53 +08:00
感觉和校招难度差不多?
eamon666
    51
eamon666  
   2019-04-25 19:00:26 +08:00   ❤️ 1
@woyixinyiyi
7,select * from t where a=? and b>? order by c limit 0,100 如何加索引
如果是我建的话 index ( a,b,c )
根据 ab 查询到的数据,已经把 c 进行了排序了。。。

这个你理解有问题,他是考察你的最左匹配原则 正确答案应该是 acb 或者 cab.
Bryan0Z
    52
Bryan0Z  
   2019-04-25 19:05:32 +08:00 via Android
实习投的蚂蚁金服,一面问题差不多…
melonzzz
    53
melonzzz  
OP
   2019-04-25 19:09:40 +08:00 via Android
@eamon666 我最近看的时候说加了范围之后后面查询不走索引,自己又试了一下发现也走,不明所以
melonzzz
    54
melonzzz  
OP
   2019-04-25 19:11:28 +08:00 via Android
@Bryan0Z
@mio4
没错,套路基本一致
eamon666
    55
eamon666  
   2019-04-25 19:13:15 +08:00
@melonzzz 是这样的 范围会用到一部分 但是接下来绝对会用到了。
sagaxu
    56
sagaxu  
   2019-04-25 19:15:57 +08:00 via Android
这个全答上来要 P8 了
commonsstring
    57
commonsstring  
   2019-04-25 19:20:25 +08:00
大佬牛逼!
WordTian
    58
WordTian  
   2019-04-25 19:22:53 +08:00 via Android
看完问题,瑟瑟发抖
就能答上来几个
2589595915
    59
2589595915  
   2019-04-25 19:27:11 +08:00 via iPhone
看都看不懂……我还是老老实实做外包吧
woyixinyiyi
    60
woyixinyiyi  
   2019-04-25 19:29:16 +08:00
@melonzzz 非常感谢 发出来 让大家一起成长,我没说用二分法查找,直接暴力循环
yamasa
    61
yamasa  
   2019-04-25 19:30:36 +08:00 via iPhone
马克。值得拿来警醒自己。
melonzzz
    62
melonzzz  
OP
   2019-04-25 19:30:47 +08:00 via Android
@sagaxu 答出来也就是个 P6,想太多哟兄 dei
woyixinyiyi
    63
woyixinyiyi  
   2019-04-25 19:32:09 +08:00
@eamon666
7,select * from t where a=? and b>? order by c limit 0,100 如何加索引
如果是我建的话 index ( a,b,c )
根据 ab 查询到的数据,已经把 c 进行了排序了。。。

这个你理解有问题,他是考察你的最左匹配原则 正确答案应该是 acb 或者 cab.

对数据库这块不太熟悉,有相应解决这道题的 blog 的能发的看下吗,
acb 的话个人理解只会走 索引 a
如果是 cab 的话 应该就不会走索引了吧,求指点
yamasa
    64
yamasa  
   2019-04-25 19:32:36 +08:00 via iPhone
@melonzzz p 几主要看你答道什么度吧。jvm 那几个点如果一路深挖可以讲一个小时出来。其他很多点也是一样的,视面试者水准可以一路深下去
hpeng
    65
hpeng  
   2019-04-25 19:37:56 +08:00
一年就要求这么多有点过分。
liaojl
    66
liaojl  
   2019-04-25 19:43:52 +08:00 via Android
插个眼
x7395759
    67
x7395759  
   2019-04-25 19:57:56 +08:00
厉害还是厉害啊,至少能够面到这么多
woyixinyiyi
    68
woyixinyiyi  
   2019-04-25 20:01:20 +08:00
蚂蚁金服财富 第一次电面

1,解释下乐观锁悲观锁
乐观锁就是 我不相信你正在改数据,我先记录下 版本,我更新的时候,看看版本改了没,没改我就该,改了我再试下
悲观锁,世界上虽然好人多,虽然我不害人,人也别来烦我,先把门锁了,其他的给我门外候着
2,JVM 判断对象是否回收?
周志明深入 jvm 的书中谈到了两种,引用计数法,和可达分析法(判断对象是否还有引用)

3,反射能获得类里面方法的名称吗?参数名称呢?参数类型呢?
我这边有个 controller,打印请求参数,获取到当前的方法名称,然后是参数名称,类型参数没获取,应该是也能获取的。类
spring 中有现成的类库支持,获取参数名称,貌似 jdk8 我记得好像通过一个注解可以获取?
LocalVariableTableParameterNameDiscoverer localVariableTableParameterNameDiscoverer = new LocalVariableTableParameterNameDiscoverer();
return localVariableTableParameterNameDiscoverer.getParameterNames(method);




4, 动态代理的实现方式?CgLib 和 jdk 的代理有什么区别?
cglib 是基于 asm 实现的,是创建当前类的子类来实现的。
而 jdk 的是必须要实现固定的接口。
都是在对原有的对象进行了一层封装成一个代理对象,返回的是代理对象,执行目标方法前先执行代理方法。

5,分布式锁有哪些主流实现方式?redis 和 zk 锁有什么区别?
我工作中用不到。。。
但是私下了解过,redis 可以基于 setnx,redis 的 set 和设置过期时间可以封装在函数中是原子操作,
那么问题来了?如果设置的过期时间过长,应用挂了,锁释放不了咋弄呀,设置时间过短,没执行完咋办,求打醒。
问题有来了? 如果正好主节点 a 写入,这个时候挂了并且数据没有同步到从节点,那么其他也可以获取锁,求打醒。最好回答的时候能贴出比较好的 解决 blog,thank
zk 的锁的话,工作中也没用 zookeeper,之前搭建过 demo,影响某个客户端 去创建一个带有序号的节点,如果创建成功的话,那么把当前节点绑定到上一个节点(监控上个节点的删除,),
当前线程阻塞,上个节点释放的时候通知当前这个节点的 process 方法,解除阻塞。
感觉区别在于 zk 只有一台能接受写入和删除,可能并发有问题,redis 的并发回好点。

6,ThreadLocal 作用是什么?说下用法
目前用到的是减少参数的传递,或者有什么需要是使用当前线程的数据存储,
set,get,remove,不清楚有啥其他用法了,

7,设计秒杀系统要考虑哪些点? 数据预热,CDN 缓存,超卖问题,流量削峰从性能角度上如何保证秒杀系统稳定? 觉得应该是预热,削峰,库存扣减的操作放到缓存,减少数据库的访问
貌似都是我盲点,需要继续学习?

8,A,B 系统转账如何保证分布式数据一致性?
目前我这项目中用的时候中充值模块中 充值后 给账户模块加款,类似这个模型吧

首先更改本地状态表为处理中,然后 发一个 ons 消息自己收,
如果消息发出去了没收到?,几分钟后遍历处理中的状态,走 http 请求
发了也收到了,修改状态成功,请求账户报错,ons 有确认机制,回滚这条消息,然后继续收,印象中貌似可以是收 15 次吧。
一直失败咋办,凉拌 手动处理,没遇到过还。

基于消息的事务最终一直模型,ons 有相应的 api
先发一个 prepare 消息,然后执行本地业务逻辑,如果本地一直没提交,rocketmq 定时回查,

之前也看过其他的 tcc 的解决方案,只是了解过,大概是先掉接口 先 prepare 是否能提交,能提交的话 调用所有提交接口,如果中间有失败的话,那么调用相应的 cancel 接口
一个普通的接口 要拆成 prepare,commit,cacel,想想都麻烦。。。

9
你有什么想问的?
◊我肚子饿了有什么吃的 么。
chenjian026
    69
chenjian026  
   2019-04-25 20:18:48 +08:00
看完这个整个人都不好了
xierbenq
    70
xierbenq  
   2019-04-25 20:50:52 +08:00 via iPhone
其实我觉得做个几年别太摸鱼,把这些题目刷一遍进大公司好像也不是太难。。
loryyang
    71
loryyang  
   2019-04-25 20:54:54 +08:00   ❤️ 1
我的一些建议: https://www.v2ex.com/t/558746
chiu
    72
chiu  
   2019-04-25 20:55:03 +08:00 via Android
楼主整理这么细致,前途无量
dooonabe
    73
dooonabe  
   2019-04-25 20:58:29 +08:00   ❤️ 1
写了一些问题的答案,欢迎讨论~
https://github.com/dooonabe/no-class-is-an-island/issues/3
dengtongcai
    74
dengtongcai  
   2019-04-25 21:09:45 +08:00 via iPhone
这就是现状,没得办法
liprais
    75
liprais  
   2019-04-25 21:53:33 +08:00
阿里系的面试官真敢问,分布式这块遇到较真的是直接甩脸子还是哭鼻子?
fcoolish
    76
fcoolish  
   2019-04-25 22:00:29 +08:00
我觉得不算特别难,很多校招的题目。
主要是校招结合项目经验问吧。
老哥是我上次内推过上海岗位吧,面试也看运气的,祝早日找到工作。
AltairT
    77
AltairT  
   2019-04-25 22:01:09 +08:00
老铁加油,看这些问题我也一堆不会的,继续补吧😂
kely
    78
kely  
   2019-04-25 22:05:59 +08:00
大部分都答不上来😂 已收藏
melonzzz
    79
melonzzz  
OP
   2019-04-25 22:14:45 +08:00 via Android
@AltairT 老哥最近找的咋样?
melonzzz
    80
melonzzz  
OP
   2019-04-25 22:17:57 +08:00 via Android
@fcoolish 嗯嗯,继续努力啊!
AltairT
    81
AltairT  
   2019-04-25 22:24:35 +08:00
@melonzzz #79 找了家小公司先干着,工资还行,暂时不加班趁这机会多学点东西吧。看你这大厂面经,我也觉得还是大厂好哇,小公司很多东西很难用得到。但目前能力达不到进不去只能努力了,毕竟 P6,P7 在小公司都是技术头头了。
zy445566
    82
zy445566  
   2019-04-25 22:45:04 +08:00 via Android   ❤️ 1
@woyixinyiyi 不是 JAVA 所以 JAVA 那部分不清楚,但 MySQL 第七题你肯定打错了,这题索引是陷阱。
建 a,b,c 的组合索引,c 是无法被排序利用的。
如果非要建可用的索引必须修改 sql。增加 c 的任意查询到第一序列,然后建立 c,b,a 组合索引,实现全利用。你要不信,你可以 explain 一下。
intmax2147483647
    83
intmax2147483647  
   2019-04-25 22:50:15 +08:00
@graysheeep 哈哈哈
myself659
    84
myself659  
   2019-04-25 22:54:26 +08:00
这些内容 大部分都可以搜索到
liang7878
    85
liang7878  
   2019-04-26 00:09:40 +08:00
活到老学到老,楼主的分享给我很大启发。
qoras
    86
qoras  
   2019-04-26 00:46:57 +08:00
不算很难, 但是 lz 一年经验肯定得很优秀才会让你过
最近面试被问过大数乘法, snowflake 具体流程, lsm 树原理, 手写限流
有些算法到 hard 直接跪
autogen
    87
autogen  
   2019-04-26 01:04:10 +08:00
我 8 年 C++服务端经验,下一份工作准备面 JAVA。。。被吓到了
melonzzz
    88
melonzzz  
OP
   2019-04-26 07:24:17 +08:00 via Android
@AltairT 找着就很好,我还没找到呢🌚
melonzzz
    89
melonzzz  
OP
   2019-04-26 07:27:26 +08:00 via Android
@myself659 没错,但是面试官会深入问,所以自己还是有很多没考虑清楚的
melonzzz
    90
melonzzz  
OP
   2019-04-26 07:28:18 +08:00 via Android
@qoras 老哥面的好难啊感觉
zhang1215
    91
zhang1215  
   2019-04-26 08:28:36 +08:00
吓死了,以后去面试就刷一遍这个
lzj307077687
    92
lzj307077687  
   2019-04-26 09:09:55 +08:00
菜鸡后端被吓到了
收藏~
thinkmore
    93
thinkmore  
   2019-04-26 09:22:21 +08:00
感觉在复习下就可以去面试了...
可是我都四年了(手动狗头)
rookiewhy
    94
rookiewhy  
   2019-04-26 09:38:03 +08:00
插眼
rookiewhy
    95
rookiewhy  
   2019-04-26 09:38:31 +08:00
插眼,可以查缺补漏
huantime
    96
huantime  
   2019-04-26 09:40:09 +08:00
谢谢楼主,回去看看。
MissThee
    97
MissThee  
   2019-04-26 09:45:37 +08:00 via iPhone
感谢
enaxm
    98
enaxm  
   2019-04-26 09:51:13 +08:00
@l00t 不是,社招默认工作经验都很长的。不管你几年经验,阿里默认都按五年来问
melonzzz
    99
melonzzz  
OP
   2019-04-26 10:01:07 +08:00
@autogen c++刚得住 还怕 java?
bmy
    100
bmy  
   2019-04-26 10:07:32 +08:00
一个题我都不会
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2092 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 29ms · UTC 00:02 · PVG 08:02 · LAX 16:02 · JFK 19:02
Developed with CodeLauncher
♥ Do have faith in what you're doing.