TikTok短视频Android一面凉经(2024)
笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《TikTok短视频Android一面凉经(2024)》。
面试职位: Android工程师
技术一面
- 面试形式:视频面试
- 面试时长: 90min(提问60min + 代码25min + 反问5min)
- 代码考核: 数组实现队列。 push, pop, size。进阶:泛型; 再进阶: 线程安全
- 岗位地点: 杭州余杭区抖音集团(EFC)
面试问题(60min)
- 是否在职, 离职时间
- 介绍一下你在上家单位做的东西吧
- 这些业务模块是你一个人负责吗?
- RN页面打开速度优化
- 这个页面为什么要改成RN呢?
- 所以为什么技术上要去选择RN呢?看上去有很多技术风险。
- 你们有很强的跨平台的诉求吗?
- 你了解的动态化方案有哪些?
- 那为什么会选择RN, 而不是UI动态化的方案?
- RN的技术原理, 执行流程, 渲染原理。
- 深入一点吧。第一步, js代码和js引擎之间的解析关系, 包括和原生的通信方式是怎么做的?
- 能更具体点吗?它怎么去解析jsbundle的, 怎么去映射成Native的View的。
- 核心的执行流程呢?
- 负责RN化的时候, 你负责的是哪块部分?
- RN相关的性能优化, 是怎么做的优化, 取得预期收益有哪些, 深入一下技术原理。
- 局部刷新的原理?
- 如何做RN和原生的性能对比?
- 除了启动时长, 还有哪些性能指标?
- 帧率怎么监控?
- 你说到更好的方案当时是怎么做的?
- 编舞者在Android系统上的作用?
- 播放优化
- 你做了什么事情?
- 预加载x个不会带来资源的竞争和劣化吗?
- 播放器播放文件的整个流程?
- 视图预热对App的内存影响有具体关注过吗?
- 如何监控内存?
- 怎么做的?
- LeakCanary是在发生内存泄漏的时候去dump内存, 有没有在未发生内存泄漏的时候监控内存的手段。
- retrofit的技术原理。
- 动态代理是如何实现的?
- Retrofit如何将注解调用到okhttp的网络请求流程里?
- 如何拿到注解, 如何转化成okhttp的request?
- 举个例子, Tiktok的feed流的冷启动起播速度优化, 你会怎么做?
- 还有别的吗? 启动速度还跟什么有关?
代码考核(25min)
数组实现队列。 实现三个方法push(), pop(), size()。自己设计用例。要求能编过, 运行逻辑正确。
进阶1: 泛型。(Int改为T)
进阶2: 线程安全。(方法加synchronized)
fun main(args: Array<String>) {
val q = Queue<Int>(1)
println(q.push(1))// 1
println(q.push(2))// 2
println(q.push(3))// 3
println(q.size())// 3
println(q.pop())// 1
println(q.push(4))// 4
println(q.size())// 3
}
class Queue<T>(var n: Int) {
private var arr = Array<Any?>(n) {}
var h = 0
var t = 0
fun pop(): T {
val ans = arr[h]
h = (h + 1) % n
return ans as T
}
fun push(num: T): T {
arr[t] = num as Any
t = (t + 1) % n
if (t == h) {
val newSize = n shl 1
val newArray = arr.copyOf(newSize)
arr = newArray
h = 0
t = n
//println("扩容: $n -> $newSize")
n = newSize
}
return num
}
fun size(): Int {
return if (t > h) {
t - h
} else {
n - (h - t)
}
}
}
反问问题(5min)
应聘岗位负责的业务
Tiktok的feed功能相关, 业务迭代开发。交互部分, Tab框架。Feed相关的二级页面。
Tiktok人数, 规模
不方便说。规模比较大。
Tiktok国内国外?
国内国外都有。
这个岗位会负责播放相关的?
会有。短视频应用。
底层播放能力是有单独的团队去做的吧?
对。但我们会有一些深入的定制化相关的, 都会涉及到播放器相关的。
TT跨端方案用的多?还是都是native?
都有。
这个岗位负责的内容有跨端相关的吗?自研的?
也有。自研。跟RN类似, 技术方案不太一样。
鸿蒙?
不方便说。
对候选人能力的要求。职级要求?
没有特别的要求, 主要也是就这你的简历来提问。不方便。
工作地点。你是在上海?
杭州的话在西溪那边。面试官是在上海。
字节每一轮技术面都会有代码考核吗?
基本上都会有, 更倾向于面试官的风格, 偏好。
几轮技术面?
HR安排。
技术相关的, 是不是还是不太方便聊?
这个太宽泛了, 要是以后有机会的加入我们的话, 可以再详细聊。
总结
- 虽然我应聘的是杭州的岗位, 但面试官是在上海的。近期接触到的面试, 基本都是这样, 异地面试。反正都是视频面试也没差。
- 虽然这一次面试面了一个半小时, 但从反问环节也能看出, 面试官对我并不满意, 也不愿透露更多部门团队相关的信息。
- 不仅要把自己做过的项目背景、选型、自己负责的内容、优化项、优化收益这些内容讲清楚, 还需要把项目中使用到的技术的原理说得明白。
- 这次的代码考核整体不算太难。主要涉及三个知识点:
- 数组扩容
- 泛型
- 线程安全