拿下阿里、头条、滴滴的 offer 后谈谈面试经验(下)

2019-04-04 09:21:34 +08:00
 fkdz7372

在上篇文章中,说了 java 后端面试中常问的基础问题,而面试除了考察基础以外,很重要的另一部分是'经验','经验'泛指以往做过的项目、解决的问题、以及一些开放性问题。

本文主要说两点:1.项目 2.开放性问题。注意两篇文章针对都的是 java 一线研发岗位

更多文章见个人博客:https://github.com/farmerjohngit/myblog

先说点题外话,有同学对于上篇文章中有些看法:比如,xxx 的底层实现和大多数程序员日常开发几乎无关,有种应付考试的感觉。

我说说我的观点,

第一,大厂面试就是会问 jvm、中间件、数据库等原理性的问题,你要想去大厂就必须在日常中积累和在面试前准备。简单粗暴吧?

第二,挺多公司被调侃是面试时造火箭,工作时拧螺丝。这样的情况是很普遍的,那大厂为什么喜欢问这些问题?我认为原因有几点:

1.人才储备,可能你面试的岗位平时就是搬搬砖,不会涉及到有技术深度的问题,但是对于大公司而言,必须要确保当出现技术难题时是有人来解决的。 比如很多部门的并发量并不高,但是面试时也会问高并发相关的问题,其目的就是为了确保万一 QPS 高起来了,部门里的人都是有方案、有经验的。这么说应该很容易明白吧。

2.筛选人才,如果两个候选人,一个对于所有的框架都只是会使用,另一个除了会使用以外还清楚框架内部是如何实现的。如果你是面试官,你会选谁呢?

3.有技术热情的人一定会对某块领域上有过比较深入研究(可以是 jvm、中间件、数据库以及其他)

回到本文正题,先来聊聊项目。

项目

对于简历上写的项目,要从这几个方面去准备:

开放题

下面是我面试被问的比较多的场景题、系统设计方面的题,开放题跟个人经历也有关系,所以仅供参考。

分布式事务

分布式事务这块实现方案比较多,互联网公司很少用 2pc 这样的方案,一般都是保证事务的最终一致性,常用事务消息实现(以及 tcc 等)。要知道如何利用事务消息去实现最终一致性,以及事务性消息是如何实现的。

分布式事务没有一个绝对的方案,都是因业务场景的不同而不同。举个例子,电商场景中如何保证订单落库和减库存、锁券的最终一致性的(不同公司有不同方案,只是列举个我知道的)。

  1. 收到用户下单请求时,在订单库中创建一条不可见订单。

  2. 同步调用减库存接口,如失败跳转到 4

  3. 同步调用锁券接口,成功跳转到 5,失败跳转到 4

  4. 发送一条废单消息,收到消息后回库存、回券

  5. 将订单改为可见

分布式事务的问题,我面试的公司基本上都问过。

如何保证系统高可用

这个一般会结合你的项目来问,比如上游系统请求量过大、依赖的下游非核心应用挂掉、系统出问题如何及时发现等等。主要是从限流、降级、监控、报警、主从备份、容灾等角度出发

分布式锁

实现分布式锁常见方案有:利用 db 的唯一键、redis、zk 等。其中 redis 实现分布锁应该是用的最多的。关于如何用 redis 实现分布式锁可以看下这篇文章,当然更严谨的实现还是看 redis 的分布式锁官方实现:Redisson

缓存与 DB 一致性

我们经常会在 DB 和应用之间加一层 Redis 缓存,以提高查询效率,但是当数据发生更新时,如何保证缓存与 DB 的数据一致性呢?可以看看这篇文章,之后我也写写阿里是如何保证缓存一致性的。

缓存击穿

Redis 缓存穿透、缓存雪崩和缓存击穿几个问题,在网上都有比较成熟的解决方案了。比如加空 value、设置随机超时时间、加互斥锁等方式

海量数据处理

海量日志数据,提取出某日访问百度次数最多的那个 IP。

一般是 hash+归并、布隆过滤、Map Reduce 的思路

这篇文章说的很好了

限流

常见限流的方案,如令牌桶算法,可以看下我之前写的来谈谈限流-从概念到实现来谈谈限流-RateLimiter 源码分析

问题排查

一些常见线上问题比如系统的 cpu 占用过高、RT 突然飙升、频繁发生 full gc、OOM 等如何定位并解决?

这主要来自于日常的积累了,排查问题主要依赖监控、日志、常用工具( top jstack jmap jstat vmstat 等)。

End

去年底找工作找了 2 个多月,中间也经历了很多坎坷,庆幸的是最后结果还不错,也祝各位在找工作的朋友拿到满意的 offer。

9400 次点击
所在节点    职场话题
26 条回复
SwordSong
2019-04-04 09:29:48 +08:00
谢谢大佬,学习有个方向了
labulaka
2019-04-04 09:37:43 +08:00
za 赞
JimmyMo
2019-04-04 09:40:29 +08:00
好了,别说了,打一架吧
bxb100
2019-04-04 09:44:15 +08:00
很有营养,谢谢楼主
danyi
2019-04-04 09:48:36 +08:00
厉害厉害,谢谢分享
saltxy
2019-04-04 10:00:03 +08:00
大佬
qq9808
2019-04-04 10:10:34 +08:00
楼主确实很厉害
dengkj
2019-04-04 10:32:59 +08:00
楼主是硕士毕业再参加工作的嘛?
bofei
2019-04-04 12:45:55 +08:00
又见楼主 上次发的还没学完呢。。
Zephania
2019-04-04 12:46:07 +08:00
这是校招还是社招
dongisking
2019-04-04 12:51:56 +08:00
厉害,点个赞再说
Wyane
2019-04-04 13:15:54 +08:00
膜拜一下,收藏起来
eqing
2019-04-04 14:29:24 +08:00
祝好
fkdz7372
2019-04-04 14:50:49 +08:00
@dengkj 本科
hobochen
2019-04-04 14:56:42 +08:00
要是我面 Java 我一定会问泛型
wqxuan
2019-04-04 14:58:19 +08:00
谢谢楼主
em84
2019-04-04 15:14:39 +08:00
大佬厉害,要我去看这么多东西我肯定看不下去
beidou123
2019-04-04 15:43:42 +08:00
大佬有牛人朋友推荐么,我司也需要像您这么优秀的人才,发展机会不比大厂差哦!
fkdz7372
2019-04-04 19:09:31 +08:00
@bofei 加油
fkdz7372
2019-04-04 19:09:57 +08:00
@hobochen 问什么,大佬指点下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/551894

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX