当前位置: 首页 > news >正文

Bilibili Android一二面凉经(2024)

BiliBili Android一二面凉经(2024)

笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《BiliBili Android一二面凉经(2024)》。

面试职位: 高级Android开发工程师(播放业务)

技术一面

  • 面试时长: 50min(提问40min + 反问10min)
  • 代码考核: 无

面试问题(40min)

  • 自我介绍
  • Flow用过吗
  • Jetpack ComposeView
  • 起播优化
  • 业务组件化
  • 内存泄漏排查的经验
    • 在哪里会有常见的内存泄漏
  • 有哪几类锁?这些锁有哪些区别?
  • kotlin独有的类有哪些, 分别是什么功能? (sealed class、value class、data class)
  • 视频播放器有研究过吗
  • RN页面打开速度优化
    • 为什么选用RN, 没用kotlin的跨平台, 或者flutter?

面试反问(10min)

招聘岗位未来负责的内容

  • 1 ijk内核负责解码和渲染。给ijk封装了一层。还接了其他的播放器。为这些播放器接了统一的API, 提供给别的业务方使用, 或者自己业务用。
  • 2 详情页和短视频页(B站内部称之为story页); 长视频的播放流已经经过一年的改造, 现在再用协程、flow、hilt。短视频还未完成改造。
  • 3 不想做播放可以做业务;想做播放的话, 可以去跟ijk对接。两者跨度比较大。

播放真正的底层都是C/C++层, 这个岗位更多的还是上层的吧?

是的, c++层是在ijk内核做的。ijk负责解码。但是播放有什么问题, 或者介入新的播放能力都要经过我们。

播放组有多少人?为什么现在比较少?

现在单端5个。去年优化了一波。

整个Android团队人数。

20+

分组是业务划分还是技术栈分?

不同的端分组。

有代码考核或算法题吗

我不面

面试有几轮

三轮(两轮技术+一轮hr)。

问了团队氛围

二次元氛围浓郁。有个别小朋友(应该是指年轻的同事)二次元属性比较厉害。

每层楼都有猫咪常驻。每次过节都有cosplay, 比如圣诞节什么的。之前有好多女装大佬。

社团: 汉服社、萝莉社。

个人独特爱好包容性比较强。

技术二面

  • 面试时长: 60min(提问40min + 反问20min)
  • 代码考核: 无

面试问题(40min)

  • 自我介绍
  • 业务组件化
  • 播放优化的优化措施、优化的效果(具体的数值)
    • 是否有线上统计数据?
    • 拉流地址过期时间, 过期了怎么做? 用户播放暂停了, 退到后台, 超过过期时间, 缓存会全部失效。针对这块问题有什么优化手段?
    • 播放底层有做什么优化吗? 比如解码
    • 用户网络不好, 带宽紧张, 预加载会导致他当前的音视频不能流畅播放?这种问题怎么解决?
    • 有些音频码率也很高(无损音乐), 动不动一首歌就一两百兆。然后用户的网络状况并不是很优秀, 比如他在地铁上听, 怎么保障流畅度?
    • 怎么计算起播耗时?起始点和结束点分别是?
    • 播放器跨进程通信的时间对你统计有影响嘛?它回调给你的时候, 已经送响给Audio Window了。因此你的打点时机, 相对来说是滞后的。这块gap后来有解决吗?如果没有, 现在想想该怎么解决?
    • 你在做视频和音频上有没有做什么差异化的优化?
  • kotlin相关
    • compose、MVI、coroutines在项目中有用吗?
    • 根据你对kotlin coroutines的理解是, 你觉得它是个什么?
    • 我们在kotlin协程写的时候, 会涉及到一个概念叫CoroutineContext, 如果他只是一个线程池的话, 他设计出来一个context干嘛?
    • 一个协程scope下有多个子协程。当一个某一个子协程异常的时候, 会影响到其他协程吗?
  • 对于你负责的这几个项目, 都是你独自负责项目吗?还是跟其他人合作开发?
  • 这些项目在Android端的代码编写上就是你自己独立负责的?
  • RN相关
    • RN的渲染机制。它的页面绘制是通过什么样的方式完成的?这个页面最终是怎么画出来的?你写的东西在Android上面其实都是没有的, 写的所谓的DSL。
    • RN自己提供的UI组件是不能满足需求的, 然后面对这种问题, 一般怎么解决?
  • 有其他性能优化的经验吗?还是做业务开发为主?
  • 你的业务里面有什么东西是可以去优化?
    • 布局xml转code是手写吗?有自动化吗?
    • 布局可以异步创建吗?
    • Android异步操作UI会抛一个异常?为什么litho不会?

面试反问(20min)

距离一面过了很久了(2周+), 为什么招聘流程会这么慢?

我们在横向比较候选人, 匹配度最高的那个候选人也在横向对比他的offer。整体时间久拖得比较久。

HC多吗?

不多。所以才会横向对比, 优中选优。HC多的话就直接发了嘛。我们也担心白折腾。

现在B站技术选型, 跨端方案, Native占比?

Native占绝对的主导地位。
跨端: 一部分是c/c++(播放器、弹幕), JSRuntime来做。业务层跨端用KMP。

KMP不是不支持UI的跨端吗?

对。我们考量下来, UI在各端上面去做跨端的话, 可能后续还是去用compose做UI的跨端。
目前来讲, 复杂逻辑的跨端和基础组件的跨端可能对我们来说更有意义。因为UI变化太频繁了, 很多跨端方案的UI实现方式不能一比一复刻平台的效果。

为什么没有选择其他跨端方案?

1 复杂逻辑的跨端和基础组件的跨端可能对我们来说更有意义。
2 UI变化太频繁了, 很多跨端方案的UI实现方式不能一比一复刻平台的效果。

Flutter: 平台差异诟病多。
RN: 转成原生性能差。
KMP+compose: 转换成平台可执行的代码, 性能好。缺点是: 逻辑和UI的跨端不是一并兼容, 需要分开做。

听上去B站之前也是尝试过这些跨端方案, 但综合考虑下来最终没有选择?

Flutter和RN都做过。
漫画业务在用Flutter, 团队人少, 交付更重要(Ps: 我理解面试官这里表达的是省人力, 快速交付的意思)。
主站对性能要求高, 大部分场景还是原生。

B站的跨端方案主推KMP和compose的话, 做跨端的都是Android开发吗?还是iOS同学也会参与?

它确实天然对Android友好, 因为使用kotlin嘛。不过iOS也在学。

对岗位的候选人的要求?

要求: 主要看技术基础 + 对播放器有一定的了解(不是完全小白的, 比如说播放器怎么播起来都不知道的那种)
招聘岗位主要是面向于业务开发 + 技术优化为主。
播放业务复杂度特别高。比如播放页的框架是用依赖注入(Dagger)+协程scope抽象出来的一套框架。它需要对依赖注入和各种协程理解比较到位才可以。
没有使用依赖注入的经验也不用太担心, 因为我们同组的同学刚开始也不会写, 会了以后就轻松了。

B站有专门的组去做一些工程的基建, 流程监控, 启动, 内存, 电量等?

有基础架构团队。有负责CI/CD, 以及移动端基础建设。比如说网络库, 埋点上报, APM, APM后台。编译、流程都有。

播放相关的指标的APM, 是播放组这边单独做吗?

播放: 我们会建立自己的业务指标和技术指标。合作比较密切的播放内核组。他们会和我们的指标双向验证。

播放会监控什么指标?

首帧、页面打开速度、卡顿率、错误率、带宽(CDN)。

如果面试流程顺利的话, 后面还有一轮技术面还是直接HR面?

HR面

你们还在横向比较一些候选人吗?

就只有二面的几个。

你们在做鸿蒙吗?怎么做?我听说有些公司在用C/C++做Android/iOS/鸿蒙三者的跨端。

在做。我们一开始也想用C, 但我们没有那么多会C的同事。没有HC, 因此没法招更多会C的同事。

总结

公司氛围比较多元化, 不仅仅有二次元, 公司内部也有许多社团, 对有独特爱好的人群也有非常强的包容性。

B站Android(播放业务)面试以音视频播放+性能优化为主, 也会考察候选人对目前B站工程中在使用的技术(Flow、Compose、KMP、Dagger等)的熟练度。

B站整体的HC比较少, 面试周期比较长。如果真的应聘这个岗位, 那就要非常高的匹配度。我总结了以下几项技术/经验来提升岗位匹配度(但有可能已经招到人了):

  • 视频播放器性能优化
    • 起播
    • 预加载 & 缓存
    • 网络
    • ijkplayer
  • 跨端: KMP + Jetpack Compose
  • 播放器框架: Dagger + Hilt
  • 工程中使用较多: Kotlin Coroutines & Flow

相关文章:

Bilibili Android一二面凉经(2024)

BiliBili Android一二面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《BiliBili Android一二面凉经(2024)》。 面试职位: 高级Android开发工程师&…...

数据库内核研发学习之路(一)

已经上了几天班了,开始做一些总结性的工作。 数据库内核研发首当其中的便是环境配置,今天先介绍一下虚拟机之类的环境搭建,在之前已经写过一篇关于VMware搭建虚拟机的博客了,有兴趣可以去看看,这里我再总结一下使用Vi…...

LSTM:深度学习中的时间序列处理大师

LSTM:深度学习中的时间序列处理大师 引言 在深度学习领域,处理时间序列数据是一项极具挑战性的任务。时间序列数据广泛存在于金融、医疗、气象、自然语言处理等多个领域,这些数据不仅具有时间依赖性,还常常伴随着复杂的长期依赖…...

T113-i系统启动速度优化方案

背景: 硬件:T113-i + emmc 软件:uboot2018 + linux5.4 + QT应用 分支:longan 问题: 全志T113-i的官方系统软件编译出的固件,开机启动时间10多秒,启动时间太长,远远超过行业内linux系统的开机速度,需要进一步优化。 T113-i 优化后启动速度实测数据 启动阶段启动时间(…...

ArcGis将同一图层的多个面要素合并为一个面要素

这里写自定义目录标题 1.加载面要素的shp数据 2.点击菜单栏的地理处理–融合,如下所示: 3.将shp面要素输入,并设置输出,点击确定即可合并。合并后的属性表就只有一个数据了。...

微软Win11 24H2七月更新补丁KB5040435发布!附下载

系统之家于7月10日发出最新报道,微软为Win11用户发布了24H2版本七月的最新更新补丁KB5040435。用户升级系统后,会发现版本号升至 26100.1150。此次更新针对远程身份验证拨入用户服务(RADIUS)协议与 MD5冲突等问题进行修复。接下来跟随小编看看此次更新的…...

iOS 开发中不常见的专业术语

乐此不疲地把简单的问题复杂化,并把这种XX行为叫作专业 APM 在 iOS 开发中,APM 代表 Application Performance Management(应用性能管理)。APM 是一套监控和管理应用程序性能的工具和技术,旨在确保应用程序运行平稳、…...

【中项第三版】系统集成项目管理工程师 | 第 4 章 信息系统架构④ | 4.7

前言 第4章对应的内容选择题和案例分析都会进行考查,这一章节属于技术相关的内容,学习要以教材为准。本章分值预计在4-5分。 目录 4.7 安全架构 4.7.1 安全威胁 4.7.2 定义与范围 4.7.3 整体架构设计 4.7.4 网络安全架构设计 4.7.5 数据库系统安…...

Time to say GoodBye

北湖的繁华 北湖的繁华 北湖的繁华 终究 终究 终究 还是不属于我了 还是不属于我了 还是不属于我了 永远铭记 6 月 26 日 永远铭记6月26日 永远铭记6月26日 在这天下午 , 一个眼镜男夺走了我的资格 在这天下午,一个眼镜男夺走了我的资格 在这天下午,一个眼镜男夺走了我的资格 永…...

C语言之指针的奥秘(二)

一、数组名的理解 int arr[10]{1,2,3,4,5,6,7,8,9,10}; int *p&arr[0]; 这里使用 &arr[0] 的⽅式拿到了数组第⼀个元素的地址,但是其实数组名本来就是地址,而且是数组首元素的地址。如下: 我们发现数组名和数组⾸元素的地址打印出…...

嵌入式linux系统内核启动过程分享

内核的生成步骤可以概括如下: ① 先生成 vmlinux,这是一个elf可执行文件。② 然后 objcopy 成 arch/i386/boot/compressed/vmlinux.bin,去掉了原 elf 文件中一些无用的section等信息。③ gzip 后压缩为 arch/i386/boot/compressed/vmlinux.bin.gz。④ 把压缩文件作为数据段…...

RK3568笔记三十五:LED驱动开发测试

若该文为原创文章,转载请注明原文出处。 字符设备驱动程序的基本框架,主要是如何申请及释放设备号、添加以及注销设备,初始化、添加与删除 cdev 结构体,并通过 cdev_init 函数建立 cdev 和 file_operations 之间的关联&#xff0c…...

pnpm 如何安装指定版本

要安装特定版本的pnpm,可以使用npm命令来全局安装特定版本的pnpm,例如: npm install -g pnpm2.0.0在上面的命令中,使用了2.0.0来指定安装2.0.0版本的pnpm。您可以将2.0.0替换为您需要安装的版本号。 如果您使用的是yarn&#xf…...

LeetCode 240 搜索二维矩阵||

1.题目要求: 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。 每列的元素从上到下升序排列。实列: 2.各位大佬们,大家好,此题我用的方法是一行一行的找&…...

万界星空科技MES系统:食品加工安全的实时监控与智能管理

万界星空科技MES系统通过集成多种技术和功能,能够实时监控食品加工过程中各环节的安全风险。以下是对该系统如何实现实时监控的详细分析: 一、集成传感器和数据分析技术 万界星空科技MES系统利用集成的传感器和数据分析技术,实时监控生产过程…...

【学习笔记】4、组合逻辑电路(下)

接前文《【学习笔记】4、组合逻辑电路(上)》 4.4.5 算术运算电路 1. 半加器和全加器 半加器和全加器是算术运算电路中的基本单元。半加器和全加器是1位相加的组合逻辑电路。 (1)半加器 半加器:只考虑两个加数本身,不考虑低位进…...

使机器人在执行任务倒快递

这段代码是用来控制机器人在不同模式下的行为,具体是处理 residenceright 和 residenceleft 两种模式下的过渡过程。代码中使用了一个 mythread 结构体,该结构体包含了机器人的当前模式 (mode) 和过渡过程的阶段 (residenceTransientProcess)。以下是对这…...

谈谈软件交互设计

谈谈软件交互设计 交互设计的由来 交互设计(Interaction Design)这一概念,最初是由IDEO创始人之一Bill.Moggridge(莫格里奇)1984年在一次会议上提出。他设计了世界上第一台笔记本电脑Compass,并写作出版了在交互设计领域影响深远的《Designing Interactions》一书,被称…...

npm install报错:淘宝镜像证书过期

npm install报错:淘宝镜像证书过期 近期使用npm淘宝镜像新建项目或依赖时出现报错: npm ERR! request to https://registry.npm.taobao.org/xxx failed, reason: certificate has expired 错误原因: 早在 2021 年,淘宝就发文称…...

各种Attention|即插即用|适用于YoloV5、V7、V8、V9、V10(一)

摘要 本文总结了各种注意力,即插即用,方便大家将注意力加到自己的论文中。 SE import torch from torch import nn class SEAttention(nn.Module): """ SENet(Squeeze-and-Excitation Networks)中的注意力…...

基于TorchGeo的遥感影像深度学习实战:从Sentinel-2到作物分类

1. 项目概述与核心价值 如果你正在处理卫星影像、无人机航拍图或者任何带有地理坐标的栅格数据,并且想用深度学习模型从中挖掘信息,那么你很可能已经体会过那种“水土不服”的阵痛。常规的CV库(如torchvision)是为处理标准图片设计…...

基于变分自编码器的类星体光谱无监督分析:QUEST工具原理与实践

1. 项目概述与核心价值如果你也和我一样,长期和斯隆数字巡天(SDSS)这类大型巡天项目产生的海量光谱数据打交道,那你一定理解那种感受:面对动辄数十万条光谱,传统的基于模板匹配或人工特征提取的分析方法&am…...

手把手教你用Arsenal Image Mounter和VMware搞定Windows 11 E01镜像仿真,避开‘No Media’和卷影复制服务坑

实战指南:Windows 11 E01镜像仿真全流程与避坑手册当你需要复现一个Windows 11系统环境进行数字取证分析或软件兼容性测试时,E01格式的磁盘镜像是常见选择。但直接从镜像到可运行的虚拟机,这条路上布满了技术陷阱——从控制器类型不匹配导致的…...

从塔防到RPG:在Unity里用A*算法实现不同游戏类型的敌人AI(实战案例)

从塔防到RPG:在Unity里用A*算法实现不同游戏类型的敌人AI(实战案例)当你在玩一款塔防游戏时,是否好奇那些怪物为何总能找到通往终点的最优路径?或者在RPG游戏中,NPC为何能绕过复杂地形精准追踪玩家&#xf…...

CompressO:重新定义本地视频压缩的三大创新维度

CompressO:重新定义本地视频压缩的三大创新维度 【免费下载链接】compressO Convert any video/image into a tiny size. 100% free & open-source. Available for Mac, Windows & Linux. 项目地址: https://gitcode.com/gh_mirrors/co/compressO 当…...

蛋白质设计新范式:QUBO建模与迭代学习框架解析

1. 项目概述与核心思路在生物信息学和计算生物学领域,蛋白质设计一直是一个“圣杯”级别的挑战。简单来说,它要回答一个逆向问题:给定一个我们想要的蛋白质三维结构,如何从头设计出能折叠成这个结构的氨基酸序列?传统方…...

【具身智能】最大微信群

点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达具身智能:人工智能的下一个浪潮!今年再次被写入《政府工作报告》中,已经成为国家未来重点培育产业。市场方面,具身智能近一年融资更是爆火&…...

揭秘DeepSeek千万级语料构建全流程:从原始网页采集到高质量token化,97.3%过滤率背后的硬核实践

更多请点击: https://intelliparadigm.com 第一章:DeepSeek训练数据准备 DeepSeek系列大模型的训练质量高度依赖于数据的规模、多样性与清洗精度。训练数据并非简单堆叠原始网页或文本,而是经过多阶段筛选、去重、毒性过滤与格式标准化的结构…...

漏洞研究工作流:从CVE追踪到实战提升的闭环方法论

1. 这不是“资源列表”,而是一套可落地的漏洞研究工作流很多人一看到“在线资源全攻略”就下意识点开收藏,然后扔进浏览器书签夹吃灰。我见过太多安全从业者——包括刚入行的蓝队新人、想补实战短板的渗透测试员、甚至部分做红队支撑的工程师——把CVE编…...

AI检测率太高论文过不了?这4个降AI率平台让你2026年顺利毕业!

降AI率工具已成为学术写作中不可或缺的辅助手段。随着高校对AI检测标准的不断升级,越来越多学生开始关注专业、高效的降AIGC平台。基于知网、维普、Turnitin等权威检测系统的数据支持,结合全国多所高校师生的实际使用反馈,以下几款平台在降低…...