CHS

降本流末,而生万物

0%

小米就业实践训练营攻略

小米训练营攻略

该训练营全名为小米集团就业实践训练营,应该是面向华东地区高校的计算机专业的学生。

训练营作业仓库已上线:XiaoMiHWRepo

我们大概有 250+人参加,最终大约 40 人战到最后。很多人在第一周退出或被筛掉。

准备工作

分组

总分为两大组,每个大组会分小组,每小组配备一个班主任。班主任和讲师都是小米员工,有什么问题直接问,可以找他们聊天,提前一步了解小米的工作生活。

  • C++:重点实现后台逻辑实现,主要培训内容有多线程交叉编译操作系统等。
  • Android:重点写一个安卓 app。最后要实现一个类微博的 app。

选择 C++方向的可以完全跟着我的教程,安卓可参考。

其实,最终内容都是归于安卓,C++组大作业是给你一个写好页面和接口的 app,你需要使用JNI+Cpp实现相关功能。安卓组是需要独立开发一个类微博 app,包括界面和功能,小米会提供他们自己的类微博 API。

下面主要说C++组的准备工作。

虚拟机

小米会提供他们的配置好的虚拟机,需要使用Virtual BoxVM不能正常识别。后面内容一定会使用这个虚拟机,而且很多内容是配好的,尽量不要使用自己的。

安卓组不需要虚拟机,只需要Android Studio

使用软件(本机)

IDE

两组都会使用到Android Studio,提前下好在本机不要下在虚拟机。

C++组可以先配置VSCode,把编译器配好,至少能运行c++11。如果习惯 Clion 或者 VS 也可以。

版本管理(居然好多人都不会)

Git必装,最好会使用GitHub,小米会使用GitLab来管理作业。操作是一样的。

至少熟练上传命令。如果你都熟练,那么第一天早上内容你已经掌握。

1
2
3
git add .
git commit -m ""
git push

小米老师可能会要求在虚拟机内创建仓库,没有必要,直接在本机就可以。

编译器

最好本机和虚拟机都装三大编译器g++llvmclang

小但必要

  • markdown语法必学,写得好的README 非常加分
  • 记得做的内容截图,增加你的可信度,老师不一定有时间运行所有人的代码,所以一定要写好README
  • 提前了解(c)makefile
  • 提前了解线程std::thread,不管最后大作业是否和我们相同,但一定会用到线程。

思想准备

我认为既然有这个机会,就尽量把他搞完,不管最后有没有 offer,就当这是一个项目需要完成。

既然都看到这里,告诉大家:

  1. 完成并结课一个月后,通过的同学发的是正式 offer,在你毕业后会和你签三方。
  2. 大三的实习可去可不去,不影响正式 offer。实习也是要筛选人去的,不是报名就能去。

  3. 如果不喜欢小米、不想工作、有其他安排,可以在第一星期结束后离开。

有关于课程问题可以问我,仅邮箱memechs33@outlook.com


概况

下面我们跟随列表走完这 14 天

Day Course 备注
Day01 虚拟机,git 操作
Day02 cpp 基础,类操作
Day03 指针,数组,I/O
Day04 STL
Day05 线程
Day06 网络 🛠️
Day07 Android
Day08 OS 🛠️
Day09 性能优化
Day10 编译 🛠️
Day11 FFmpeg 编译
Day12 🥰
Day13 BigHW(编译 ff 的 so 库,保存本地视频为 yuv) 🤡
Day14 BigHW(实现播放/暂停视频,播放音频) 🤡
Day15 BigHW 🥳

小米讲师会提问,回答问题可得记分牌,每节课后会计分,分高能得礼物。

这个分数不作为最终评价。

Day01

  1. Git配置、小米仓库(GitLab)配置
  2. makefile编译
  3. gdb调试

给班主任最容易留下好印象的就是第一天,很多人会配一天的Git,当你熟练使用Git,并且完美提交仓库,老师可能会根据你的目录结构风格让大家都参考你的。

特别一题的是 README 和截图,一定要让班主任很容易就看到你的思路和结果,前面就说到,班主任、讲师都是员工,他们也是打工仔,每天上课工作都比较累,可能都不会细看你的代码,所以,写好 README 和提供截图,能让你在第一天就脱颖而出。当然后面也要天天写 README。

然后关于作业部分,需要你早点准备好编译环境,想我在上文提及的编译器,请准备好,在本机和虚拟机(小米提供的会配好)都要配置,Windows 环境下编译可能不太方便,可以先自己搞个Ubuntu来试一下,当然,像博主我双持 Win 和 Mac,前期的一些编译,我直接交给 Mac 做,只是后面交叉编译对环境和 CPU 有要求,我才启用 Win 游戏本。

第一天总体非常轻松。

Day02/03/04

这几天都是有关C++基本操作,不必理会

如果很熟练了,我建议你用这几天时间,把后面的std::thread好好学一下,这是整个训练营的重点,这个不管是训练营还是工作还是项目,线程管理都非常重要。

然后推荐了解一下Morden C++,了解一下C++17,C++20新标准,我们这组的班主任就很看重这点,以后工作也可能用上。但是Android最高只支持到C++17(NDK15)(2024.5),后续可能会支持更新标准。

前面几天都会非常轻松。

Day05

正式开始学习std::thread,请认真学习这部分内容。

  1. RAII:资源获取即初始化,使用thread构造初始化线程,阻塞线程
  2. mutex互斥锁
  3. 子线程,std::futurestd::futurestd::promise等操作

这是整个训练营中最重要的课,老师可能讲的会比较浅。如有不懂,问老师或速查文档、GPT。要在这节课训练手写线程代码的实现。

线程管理是现在非常重要的项目,在后端,测试端,甚至机器学习类的工作中都一定会遇到相关问题。

Day06

学习网络编程相关操作,这块要看老师安排,可能会要求在训练营最后实现。

这算是第二重要的内容,基本上 C++方向的工作都要和网络打交道。也要训练这类代码,但是我们最后并未要求实现网络内容。

Day07

这天的内容直接和大作业挂钩,必须认真跟着操作最后的动态链接库的部分。

  1. Android Studio相关操作
  2. ❗ 交叉编译 重点
  3. JNI

我们学校是开的有 Android 课程,所以基本操作我们都会,如果你并没学过Android Studio,请你认真学习这一天的所有内容。

交叉编译一定要好好搞,自己亲自在虚拟机中编译,建议不要用自己的系统。学一学怎么写shell批处理脚本

JNI可以多了解一下,反正最后也要用到,在大作业的答辩里,我的班主任问了我JNI的作用性质等问题。

第一周结束

在第七天,也就是安卓课下课的时候,负责人会发一个问卷,主要是了解你的就业意向,如果你认为小米工作很适合你,或者你有其他安排但你也想继续完成的,请你所有都填想就业有关的,如果不想玩了,想放个 7 天小长假,直接就填其他的就好了。但是不要侥幸,不要么棱两可,有同学又填就业又填考研的,直接被刷下来了。

Day08

有关操作系统的内容,课上老师应该会带大家编译 Linux0.1 版本。作业可能让你重写内核,当时我们没人做出来。

在这天老登就要开始给你上强度了,前面听老师讲操作系统历史还挺好玩的,后面开始让你改内核代码,就开始爽起来了。

Day09

今天主要玩玩性能优化工具和一些网络工具,后期最轻松的一天。

没什么说的,好好玩下这些工具。

Day10

学习编译工具,写 makefile 和 cmakefile。

留意一下cmakefile,后面编译大作业使用到JNI也是要写滴。多编译几个项目试下。

Day11

今天要开始起飞了,开始介绍 FFmpeg。

好好学,对大作业很有帮助。锻炼使用 FF 的 API。从现在开始,你可能会遇到全班一起陷入无法运行的情况,加油,希望你是第一个跑起来的。

Day12-Day14

最折磨人的来了。

  1. FFmpeg4交叉编译成一个独立的动态链接库。
  2. 不用写Javaxml任何安卓代码,小米会给你一个写好的简陋的框架。
  3. 使用JNI,这里有个大坑。
  4. 编写你的C++代码。请不要吝啬你的才华,注意安卓支持的 C++版本哦,别太新了

Day12

这一天基本上都在搞编译,尝试自己去写下shell脚本,我们整个组基本到第 13 天下才差不多全员编译通过,这时候你都没多少时间去搞真正的代码了。

Tips:不要一味去复制粘贴别人的脚本代码,修改并尝试自己搞通

Day13

如果你到了第 13 天都还没编译好,我这里还有小秘籍,请你自行寻找,找到了记得点个:heart:。

代码部分我就爱莫能助了,请你自己去写吧,我的实现并不完整而且可能有很多 bug,我自己复盘下来,我觉得应该这样优化更好:

  • 可以引入线程库管理线程
  • Player封装成类,没封装的看得很难受
  • 先搞视频操作,再搞音频

Day14

在晚上 8 点前提交你的代码。恭喜你!这天晚上会有一个小答辩,给你的班主任描述你的项目,他会给你这 2 周来的作业打分,像我的大作业虽然很多都没实现,但是前面小作业拿了很多分,有可能老师还会问你一些八股文,可以提前准备一下。(像个小面试,但是没有那么紧张)

小面试可能涉及到的问题

1
2
3
4
5
TCP/UDP
JNI
C++的一些关键字、操作
OS
HTTP等

完结撒花

希望大家多多赞赏 ​。​🤩​

谢谢大家

欢迎关注我的其它发布渠道