大家好,我是二哥呀。
有球友咨询 offer 选择的时候,倾向于小米,然后我就问她 base 地在哪里,说南京,我认为这个薪资还可以;但两个捂脸的表情符号,我懂,我真懂她的意思。
于是就赶紧补了一句,小米应届生这个水平已经很不错了。
到底什么水平?
我把《Java 面试指南》专栏中收录的最新信息同步给大家瞧一眼,你就懂了。
- 软开岗,开了 18*15,硕士 211,拒了,不愧是薪资性价比中的天花板,base 南京
- 客户端,开了 24k,硕士 985,早 9.30 晚 10 点,base 北京
- 数据开发,开了 16k,硕士双一流,面的很艰难,一共 4 面,技术面 3 轮都有手撕,结果只给了 16,还不给 A,base 南京
- Java 岗,开了 23k,硕士 985,绝对是小米薪资体系中应届生的顶薪了,base 武汉
讲句良心话,小米今年的薪资和去年、前年差不多,甚至还有涨价,比如说武汉 Java 岗能开到 23k,真的很高。
但今年的情况和往年有很大不同,就是 AI 的爆火,让其他互联网大厂都开出了比往年更高的薪资。
不比不知道,一比就会有落差。
所以我经常劝大家,只要满足自己的心里预期价,就可以,不要让自己陷入无尽的比价痛苦中。
小米应该是南京、武汉等地的首选目标之一。
相信大家也都关注过这样一条信息,罗福莉在 11 月 12 日官宣正式加入小米的 AI 团队,他们的 slogan 是解锁空间智能,用于多模态感知、推理、生成和行动——这些是 AGI 的核心要素。
这就是变化。
小米也准备在 AI 方向上大干一场了,我们静候佳音。
那针对我们求职者,也要去积极拥抱变化。简历上一定要有一个和 AI 相关的项目(听劝,哪怕你写点评,也加追加这样一条:
基于 LangChain4j 集成阿里云百炼大模型,构建智能对话系统。通过 Redis 实现多轮会话记忆管理,利用 Function Calling 技术实现店铺信息、优惠券查询及预约到店等功能。
就像很多球友给我反馈的,在准备日常实习的时候发现面试官很喜欢问派聪明 RAG 这个和 AI 高度相关的项目。
公司希望自己和 AI 相关,开发者希望从事 AI 相关的开发工作,面试官希望求职者有 AI 相关的开发经验,一连串。
那接下来,就给大家分享几个回答范例,可以直接开背哈(第一个之前分享过)。
复制到浏览器打开:https://paicoding.com/column/10/21
第二个回答
在派聪明项目中,我们有一个核心功能是大文件上传与合并 。我们发现当用户上传大文件并触发合并操作时,后端处理时间过长。如果同步处理,不仅会长时间占用主线程,导致前端请求超时,还容易因为网络波动导致任务失败。
我的目标是将耗时的‘文件合并与后续处理’从主流程中剥离出来,实现异步化,同时必须保证任务不丢失 ,即使处理失败也能有重试机制。
于是我引入了 Kafka 作为消息队列。
前端上传完成后,Controller 层只负责快速响应‘接收成功’,然后在一个 事务 中向 Kafka 发送一条 FileProcessingTask 消息。
FileProcessingTask task = new FileProcessingTask(
request.fileMd5(),
objectUrl,
request.fileName(),
fileUpload.getUserId(),
fileUpload.getOrgTag(),
fileUpload.isPublic()
);
LogUtils.logBusiness("MERGE_FILE", userId, "发送文件处理任务到Kafka(事务): topic=%s, fileMd5=%s, fileName=%s",
kafkaConfig.getFileProcessingTopic(), request.fileMd5(), request.fileName());
kafkaTemplate.executeInTransaction(kt -> {
kt.send(kafkaConfig.getFileProcessingTopic(), task);
return true;
});
我在消费者端配置了死信队列策略 DeadLetterPublishingRecoverer。如果文件处理连续失败(比如重试 3 次后),消息会自动进入死信队列,而不是无限重试阻塞消费者。
在发送端,我使用了 executeInTransaction 方法,确保创建文件处理任务时,任务信息会可靠地发送到 fileProcessingTopic 主题,供消费者异步处理。如果发送失败,整个操作会回滚,避免出现"任务已创建但消息未发送"的不一致状态。
上线后经测试,500M 的大文件上传能稳定在 200 毫秒内。
第三个回答
派聪明是一个支持多团队协作的系统(SaaS 模式)。最开始设计时,我们面临一个棘手问题:新注册用户的知识库怎么存,怎么隔离,怎么共享?我们需要一种机制,既能让用户拥有私有空间,又能支持未来的团队协作,且必须保证数据的绝对隔离。
于是我设计了一套基于组织标签 (OrgTag) 的自动装配机制,确保用户注册即拥有独立的、隔离的数据空间,且过程必须是原子性的。
我重构了 UserService 的注册流程,当用户注册时,系统不仅会插入一条用户记录,还会同步生成一个以 PRIVATE_ 开头的专属组织标签,并将其强制绑定为用户的“主组织”。
// src/main/java/com/yizhaoqi/smartpai/service/UserService.java
@Transactional // 确保用户创建和空间分配是原子操作
public void registerUser(String username, String password) {
// 1. 基础校验与用户创建
if (userRepository.findByUsername(username).isPresent()) {
throw new CustomException("Username already exists", HttpStatus.BAD_REQUEST);
}
User user = new User();
user.setUsername(username);
user.setPassword(PasswordUtil.encode(password));
// 2. 核心逻辑:自动生成私有组织标签
// 格式如:PRIVATE_zhangsan,确保天然隔离
String privateTagId = PRIVATE_TAG_PREFIX + username;
// 3. 级联保存:先创建标签,再绑定用户
createPrivateOrgTag(privateTagId, username, user);
user.setOrgTags(privateTagId); // 赋予权限
user.setPrimaryOrg(privateTagId); // 设置默认上下文
userRepository.save(user);
// 4. 更新缓存,保证后续请求能立即读到权限
orgTagCacheService.cacheUserOrgTags(username, List.of(privateTagId));
}
这个设计确保了“用户 A 无法看到用户 B 的私有文件”,但却能共享组织下公开的共有文件。
冲!
尤其是 27 届打算冲日常实习的同学,积极备战起来。
ending
一个人可以走得很快,但一群人才能走得更远。二哥的编程星球已经有 10700 多名球友加入了,如果你也需要一个优质的学习环境,戳链接 🔗 加入我们吧。这是一个 简历精修 + 编程项目实战(RAG 派聪明 Java 版/Go 版本、技术派、微服务 PmHub)+ Java 面试指南的私密圈子,你可以阅读星球专栏、向二哥提问、帮你制定学习计划、和球友一起打卡成长。
最后,把二哥的座右铭送给大家:没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟。共勉 💪。
回复