大家好,我是二哥呀。
周五的时候,有球友私信说,华为的 HR 打了电话,说 11 月会陆续开奖,问我这算是泡出来了吗?
我给他的回复说,按照往常的习俗,这算是保温电话,离发小奖状还有一段时间。虽然不算是板上钉钉,但至少稳了一手。
这里也简单给大家普及一下华为保温电话的内容,我放在了《Java 面试指南》专栏中,通常包含:
①、你手头上的 offer 情况,有没有开奖,薪资大概多少?
华子之所以问这个,一是想了解你的市场竞争力,看看其他公司给你开了多少,评估你的价值。
二是想知道你有没有其他选择,判断你对华为的意愿有多强。
三是试探你的薪资预期,看看能不能以更低的价格拿下你。
参考答案我也分享一下。
假如你手上有 offer:目前手上有几个 offer 在考虑中,有腾讯的暑期转正 offer,薪资还没有开。但华为一直是我很想去的公司,所以我也在等华为的消息。
假如你手上没有 offer:目前有一个独角兽的 offer,但我更倾向于去华为这样的大平台,华为是我的第一选择。
②、查户口
如实回答就行,家是哪里的,父母做什么,有没有兄弟姐妹,是不是独生子女等。
③、接不接受华为的狼性文化,躺平还是奋斗?
这个答案就很唯一了:我很认同华为的奋斗文化,我觉得年轻人就应该多拼一拼,多学一点东西。
我之前在学校,或者在 xx 实习的时候就是这样,遇到有挑战的项目我都会主动去做,不怕苦不怕累。
我认为华为这样的平台能够让我成长得更快,所以我非常期待能早一点加入华为。
千万不要回答 WLB、不想加班、希望不要太累,😄
④、可能还会建议你先签个保底,并问清楚解约流程
华为的流程是比较长的,可能需要等一段时间才能出 offer。
让你签一个保底,这样能安心等他们给你发 offer。
参考答案:好的,我理解,我会先签一个保底,也会和那边确认好解约流程。华为是我的第一选择,你这边有进度,也麻烦第一时间通知我,我好去找学校要新的三方。
⑤、你期望的薪资、base 地等等
我了解到华为的薪资水平在行业内是比较有竞争力的,去年我有师兄师姐他们拿到的是 xxx,我也相信华为会给我一个合理的定价,我非常看重能在华为这个平台上成长和学习。
至于 base 地的话,参考答案:我希望能在深圳和上海,因为家在这边,或者女朋友在这边。
如果大家有其他的问题,也可以在评论区给出,我会第一时间回复大家。
八股带背-华为篇
接下来,我会花一段时间带背八股,帮大家搞定各大公司的八股高频题,开始冲刺,面渣逆袭 RocketMQ 篇网址:https://javabetter.cn/sidebar/sanfene/rocketmq.html
1.为什么要使用消息队列呢?
我认为消息队列的核心价值主要体现在四个方面。首先是解耦,这是最重要的。
比如在派聪明 RAG 项目中,文件上传完成之后,会有很多后续的任务,比如提取元数据、生成全文索引、做 AI 向量化处理。
这些处理不仅数据量大,而且任务本身也比较消耗资源,没有消息队列的话,文件上传服务就得等这些任务都处理完才能返回结果给用户,体验会很差。
于是我们引入了 Kafka 来做消息队列,文件上传服务只需要把文件处理任务发送到消息队列里就可以结束了。其他服务各自去消费这条消息,独立处理自己的业务逻辑。这样即使某个服务宕机了,也不会影响文件上传的核心流程,系统的容错能力就大大提升了。
再比如书在 PmHub 中,任务审批就用了 RocketMQ 来做解耦。
其次是异步处理,系统可以将那些耗时的任务放在消息队列中异步处理,从而快速响应用户的请求。比如说,用户下单后,系统可以先返回一个下单成功的消息,然后将订单信息放入消息队列中,后台系统再去处理订单信息。
再有就是削峰填谷,这一点在高并发场景下特别重要。比如秒杀活动,瞬间可能来了几十万个请求。如果直接打到数据库,系统肯定会崩溃。但通过消息队列,所有请求先进队列,后端消费者按照自己的处理能力逐个消费,即使暂时处理不过来,消息也能安全地存储在队列里。这样系统就不会被突发流量打倒。
除此之外,消息队列还支持持久化存储,支持消息重试和事务机制。这样即使消费者在处理消息时出现异常,消息也不会丢失,可以重新投递处理,最终保证业务逻辑一定会被正确执行。
如何用RocketMQ做削峰填谷的?
我的理解是:用户的所有请求不直接打到后端服务,而是先发送到 RocketMQ 的消息队列里。RocketMQ 作为一个高吞吐量的中间件,能够快速接收这些请求。然后消费者端根据自己的处理能力,按照一定的速度从队列里拉取消息进行处理。这样就形成了一个缓冲区,能够吸收掉突发的流量。
就拿秒杀场景来举例吧。首先,用户的秒杀请求不是直接去扣减库存,而是先发一条消息到 RocketMQ。这个操作很快,因为只是把消息丢到队列里,不涉及任何业务逻辑处理。然后在消费端,我们启动一个消费者线程,这些消费者以一个相对稳定的速度去消费消息,一条一条地处理秒杀逻辑,比如检查库存、扣库存、生成订单等。
// 生产者端 - 接收秒杀请求
@PostMapping("/seckill")
public Result seckill(Long productId, Long userId) {
// 直接发送消息到 RocketMQ,快速返回
Message message = new Message("seckill_topic",
JSON.toJSONString(new SeckillRequest(productId, userId)).getBytes());
try {
SendResult sendResult = rocketMQTemplate.syncSend("seckill_topic", message);
return Result.success("秒杀请求已提交,请稍候");
} catch (Exception e) {
return Result.fail("系统繁忙,请稍后重试");
}
}
// 消费者端 - 按照自己的能力消费消息
@RocketMQMessageListener(topic = "seckill_topic",
consumerGroup = "seckill_consumer_group")
public class SeckillConsumer implements RocketMQListener<SeckillRequest> {
@Override
public void onMessage(SeckillRequest request) {
// 这里按照相对稳定的速度处理秒杀逻辑
// 消费者能处理多快就处理多快,不会被突发流量冲击
seckillService.processSeckill(request.getProductId(), request.getUserId());
}
}
这里有一个需要注意的地方,就是消息堆积的问题,如果消费者一直跟不上生产速度,消息会无限堆积,可能最终会导致磁盘满或者消息过期被删除。所以在实际项目中,我们需要监控队列的堆积情况,必要时通过增加消费者或优化消费逻辑来加快处理速度。
ending
一个人可以走得很快,但一群人才能走得更远。二哥的编程星球已经有 10200 多名球友加入了(马上涨价),如果你也需要一个优质的学习环境,戳链接 🔗 加入我们吧。这是一个 简历精修 + 编程项目实战(RAG 派聪明 Java 版/Go 版本、技术派、微服务 PmHub)+ Java 面试指南的私密圈子,你可以阅读星球专栏、向二哥提问、帮你制定学习计划、和球友一起打卡成长。
最后,把二哥的座右铭送给大家:没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟。共勉 💪。
回复